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.
Files changed (262) hide show
  1. package/blockly.d.ts +18963 -18432
  2. package/blockly.min.js +852 -844
  3. package/blockly_compressed.js +669 -664
  4. package/blockly_compressed.js.map +1 -1
  5. package/blocks/blocks.js +47 -0
  6. package/blocks/colour.js +13 -3
  7. package/blocks/lists.js +22 -13
  8. package/blocks/logic.js +13 -3
  9. package/blocks/loops.js +24 -11
  10. package/blocks/math.js +12 -3
  11. package/blocks/procedures.js +41 -27
  12. package/blocks/text.js +22 -13
  13. package/blocks/variables.js +14 -3
  14. package/blocks/variables_dynamic.js +13 -3
  15. package/blocks_compressed.js +146 -141
  16. package/blocks_compressed.js.map +1 -1
  17. package/core/block.js +1869 -1814
  18. package/core/block_drag_surface.js +201 -200
  19. package/core/block_dragger.js +377 -373
  20. package/core/block_svg.js +1593 -1479
  21. package/core/blockly.js +8 -22
  22. package/core/blocks.js +9 -2
  23. package/core/browser_events.js +22 -5
  24. package/core/bubble.js +841 -797
  25. package/core/bubble_dragger.js +213 -206
  26. package/core/bump_objects.js +2 -2
  27. package/core/clipboard.js +9 -9
  28. package/core/comment.js +353 -332
  29. package/core/common.js +46 -17
  30. package/core/component_manager.js +181 -174
  31. package/core/config.js +87 -0
  32. package/core/connection.js +595 -584
  33. package/core/connection_checker.js +242 -244
  34. package/core/connection_db.js +235 -230
  35. package/core/contextmenu.js +9 -6
  36. package/core/contextmenu_items.js +1 -2
  37. package/core/contextmenu_registry.js +93 -89
  38. package/core/css.js +474 -474
  39. package/core/delete_area.js +45 -42
  40. package/core/drag_target.js +57 -56
  41. package/core/dropdowndiv.js +153 -163
  42. package/core/events/events.js +2 -2
  43. package/core/events/events_abstract.js +89 -77
  44. package/core/events/events_block_base.js +37 -36
  45. package/core/events/events_block_change.js +130 -124
  46. package/core/events/events_block_create.js +73 -71
  47. package/core/events/events_block_delete.js +84 -82
  48. package/core/events/events_block_drag.js +50 -49
  49. package/core/events/events_block_move.js +147 -140
  50. package/core/events/events_bubble_open.js +51 -50
  51. package/core/events/events_click.js +48 -44
  52. package/core/events/events_comment_base.js +72 -69
  53. package/core/events/events_comment_change.js +63 -61
  54. package/core/events/events_comment_create.js +44 -42
  55. package/core/events/events_comment_delete.js +42 -40
  56. package/core/events/events_comment_move.js +106 -104
  57. package/core/events/events_marker_move.js +65 -64
  58. package/core/events/events_selected.js +46 -45
  59. package/core/events/events_theme_change.js +36 -35
  60. package/core/events/events_toolbox_item_select.js +46 -45
  61. package/core/events/events_trashcan_open.js +37 -36
  62. package/core/events/events_ui.js +47 -46
  63. package/core/events/events_ui_base.js +30 -29
  64. package/core/events/events_var_base.js +37 -36
  65. package/core/events/events_var_create.js +50 -48
  66. package/core/events/events_var_delete.js +50 -48
  67. package/core/events/events_var_rename.js +51 -49
  68. package/core/events/events_viewport.js +66 -65
  69. package/core/events/utils.js +29 -14
  70. package/core/events/workspace_events.js +49 -55
  71. package/core/extensions.js +4 -3
  72. package/core/field.js +1061 -997
  73. package/core/field_angle.js +462 -442
  74. package/core/field_checkbox.js +194 -182
  75. package/core/field_colour.js +519 -505
  76. package/core/field_dropdown.js +617 -598
  77. package/core/field_image.js +229 -220
  78. package/core/field_label.js +102 -91
  79. package/core/field_label_serializable.js +42 -41
  80. package/core/field_multilineinput.js +372 -358
  81. package/core/field_number.js +272 -253
  82. package/core/field_textinput.js +499 -467
  83. package/core/field_variable.js +458 -420
  84. package/core/flyout_base.js +1005 -952
  85. package/core/flyout_button.js +277 -260
  86. package/core/flyout_horizontal.js +304 -302
  87. package/core/flyout_metrics_manager.js +64 -64
  88. package/core/flyout_vertical.js +306 -300
  89. package/core/generator.js +459 -446
  90. package/core/gesture.js +829 -813
  91. package/core/grid.js +166 -163
  92. package/core/icon.js +168 -159
  93. package/core/inject.js +7 -5
  94. package/core/input.js +257 -248
  95. package/core/insertion_marker_manager.js +655 -624
  96. package/core/internal_constants.js +0 -129
  97. package/core/keyboard_nav/ast_node.js +605 -596
  98. package/core/keyboard_nav/basic_cursor.js +166 -165
  99. package/core/keyboard_nav/cursor.js +99 -97
  100. package/core/keyboard_nav/marker.js +83 -79
  101. package/core/keyboard_nav/tab_navigate_cursor.js +18 -23
  102. package/core/marker_manager.js +153 -141
  103. package/core/menu.js +377 -372
  104. package/core/menuitem.js +223 -217
  105. package/core/metrics_manager.js +403 -390
  106. package/core/mutator.js +468 -437
  107. package/core/names.js +229 -188
  108. package/core/options.js +290 -284
  109. package/core/procedures.js +29 -17
  110. package/core/registry.js +19 -16
  111. package/core/rendered_connection.js +482 -463
  112. package/core/renderers/common/block_rendering.js +9 -3
  113. package/core/renderers/common/constants.js +1119 -1112
  114. package/core/renderers/common/debug.js +14 -0
  115. package/core/renderers/common/debugger.js +338 -316
  116. package/core/renderers/common/drawer.js +380 -370
  117. package/core/renderers/common/i_path_object.js +2 -2
  118. package/core/renderers/common/info.js +626 -618
  119. package/core/renderers/common/marker_svg.js +579 -541
  120. package/core/renderers/common/path_object.js +203 -200
  121. package/core/renderers/common/renderer.js +220 -218
  122. package/core/renderers/geras/constants.js +36 -36
  123. package/core/renderers/geras/drawer.js +155 -147
  124. package/core/renderers/geras/highlight_constants.js +244 -238
  125. package/core/renderers/geras/highlighter.js +231 -179
  126. package/core/renderers/geras/info.js +392 -369
  127. package/core/renderers/geras/measurables/inline_input.js +25 -19
  128. package/core/renderers/geras/measurables/statement_input.js +23 -17
  129. package/core/renderers/geras/path_object.js +106 -121
  130. package/core/renderers/geras/renderer.js +96 -98
  131. package/core/renderers/measurables/base.js +30 -18
  132. package/core/renderers/measurables/bottom_row.js +83 -80
  133. package/core/renderers/measurables/connection.js +22 -15
  134. package/core/renderers/measurables/external_value_input.js +35 -22
  135. package/core/renderers/measurables/field.js +35 -20
  136. package/core/renderers/measurables/hat.js +18 -13
  137. package/core/renderers/measurables/icon.js +24 -17
  138. package/core/renderers/measurables/in_row_spacer.js +15 -13
  139. package/core/renderers/measurables/inline_input.js +43 -33
  140. package/core/renderers/measurables/input_connection.js +41 -28
  141. package/core/renderers/measurables/input_row.js +50 -44
  142. package/core/renderers/measurables/jagged_edge.js +14 -12
  143. package/core/renderers/measurables/next_connection.js +16 -14
  144. package/core/renderers/measurables/output_connection.js +26 -20
  145. package/core/renderers/measurables/previous_connection.js +16 -15
  146. package/core/renderers/measurables/round_corner.js +20 -18
  147. package/core/renderers/measurables/row.js +184 -168
  148. package/core/renderers/measurables/spacer_row.js +38 -23
  149. package/core/renderers/measurables/square_corner.js +18 -16
  150. package/core/renderers/measurables/statement_input.js +23 -20
  151. package/core/renderers/measurables/top_row.js +88 -85
  152. package/core/renderers/minimalist/constants.js +8 -7
  153. package/core/renderers/minimalist/drawer.js +11 -10
  154. package/core/renderers/minimalist/info.js +18 -18
  155. package/core/renderers/minimalist/renderer.js +40 -39
  156. package/core/renderers/thrasos/info.js +258 -248
  157. package/core/renderers/thrasos/renderer.js +20 -20
  158. package/core/renderers/zelos/constants.js +898 -873
  159. package/core/renderers/zelos/drawer.js +186 -169
  160. package/core/renderers/zelos/info.js +502 -479
  161. package/core/renderers/zelos/marker_svg.js +129 -115
  162. package/core/renderers/zelos/measurables/bottom_row.js +31 -30
  163. package/core/renderers/zelos/measurables/inputs.js +22 -21
  164. package/core/renderers/zelos/measurables/row_elements.js +14 -13
  165. package/core/renderers/zelos/measurables/top_row.js +34 -33
  166. package/core/renderers/zelos/path_object.js +181 -180
  167. package/core/renderers/zelos/renderer.js +91 -92
  168. package/core/scrollbar.js +759 -713
  169. package/core/scrollbar_pair.js +250 -245
  170. package/core/serialization/blocks.js +19 -9
  171. package/core/serialization/workspaces.js +3 -2
  172. package/core/shortcut_registry.js +286 -277
  173. package/core/sprites.js +31 -0
  174. package/core/theme.js +135 -141
  175. package/core/theme_manager.js +147 -143
  176. package/core/toolbox/category.js +602 -576
  177. package/core/toolbox/collapsible_category.js +226 -227
  178. package/core/toolbox/separator.js +70 -61
  179. package/core/toolbox/toolbox.js +934 -927
  180. package/core/toolbox/toolbox_item.js +115 -99
  181. package/core/tooltip.js +108 -35
  182. package/core/touch.js +8 -3
  183. package/core/touch_gesture.js +254 -251
  184. package/core/trashcan.js +606 -595
  185. package/core/utils/coordinate.js +97 -95
  186. package/core/utils/dom.js +2 -2
  187. package/core/utils/global.js +2 -0
  188. package/core/utils/rect.js +41 -37
  189. package/core/utils/sentinel.js +25 -0
  190. package/core/utils/size.js +30 -27
  191. package/core/utils/svg.js +18 -16
  192. package/core/variable_map.js +325 -341
  193. package/core/variable_model.js +55 -54
  194. package/core/variables.js +9 -2
  195. package/core/variables_dynamic.js +3 -1
  196. package/core/warning.js +126 -120
  197. package/core/widgetdiv.js +4 -4
  198. package/core/workspace.js +685 -664
  199. package/core/workspace_audio.js +124 -118
  200. package/core/workspace_comment.js +308 -298
  201. package/core/workspace_comment_svg.js +1029 -951
  202. package/core/workspace_drag_surface_svg.js +147 -140
  203. package/core/workspace_dragger.js +70 -71
  204. package/core/workspace_svg.js +2322 -2297
  205. package/core/xml.js +30 -20
  206. package/core/zoom_controls.js +431 -439
  207. package/dart_compressed.js +40 -43
  208. package/dart_compressed.js.map +1 -1
  209. package/generators/dart/colour.js +56 -64
  210. package/generators/dart/lists.js +61 -50
  211. package/generators/dart/math.js +160 -148
  212. package/generators/dart/text.js +83 -61
  213. package/generators/javascript/colour.js +37 -34
  214. package/generators/javascript/lists.js +50 -43
  215. package/generators/javascript/math.js +123 -139
  216. package/generators/javascript/text.js +67 -81
  217. package/generators/lua/colour.js +25 -23
  218. package/generators/lua/lists.js +97 -69
  219. package/generators/lua/logic.js +1 -2
  220. package/generators/lua/math.js +182 -144
  221. package/generators/lua/text.js +116 -99
  222. package/generators/php/colour.js +38 -32
  223. package/generators/php/lists.js +109 -89
  224. package/generators/php/math.js +90 -81
  225. package/generators/php/text.js +63 -61
  226. package/generators/python/colour.js +18 -18
  227. package/generators/python/lists.js +38 -30
  228. package/generators/python/loops.js +12 -8
  229. package/generators/python/math.js +104 -106
  230. package/generators/python/text.js +34 -30
  231. package/javascript_compressed.js +37 -39
  232. package/javascript_compressed.js.map +1 -1
  233. package/lua_compressed.js +39 -42
  234. package/lua_compressed.js.map +1 -1
  235. package/msg/az.js +2 -2
  236. package/msg/be.js +4 -4
  237. package/msg/cs.js +15 -15
  238. package/msg/de.js +1 -1
  239. package/msg/diq.js +1 -1
  240. package/msg/eo.js +1 -1
  241. package/msg/es.js +1 -1
  242. package/msg/fa.js +1 -1
  243. package/msg/fr.js +4 -4
  244. package/msg/he.js +1 -1
  245. package/msg/hr.js +2 -2
  246. package/msg/hy.js +2 -2
  247. package/msg/id.js +12 -12
  248. package/msg/inh.js +14 -14
  249. package/msg/ja.js +7 -7
  250. package/msg/lv.js +29 -29
  251. package/msg/pa.js +3 -3
  252. package/msg/smn.js +436 -0
  253. package/msg/te.js +1 -1
  254. package/msg/yue.js +1 -1
  255. package/msg/zh-hans.js +3 -3
  256. package/msg/zh-hant.js +3 -3
  257. package/package.json +7 -6
  258. package/php_compressed.js +38 -42
  259. package/php_compressed.js.map +1 -1
  260. package/python_compressed.js +26 -25
  261. package/python_compressed.js.map +1 -1
  262. package/blocks/all.js +0 -23
@@ -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
- const VariableModel = function(workspace, name, opt_type, opt_id) {
32
+ class VariableModel {
42
33
  /**
43
- * The workspace the variable is in.
44
- * @type {!Workspace}
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
- this.workspace = workspace;
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
- * The name of the variable, typically defined by the user. It may be
50
- * changed by the user.
51
- * @type {string}
52
- */
53
- this.name = name;
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 type of the variable, such as 'int' or 'sound_effect'. This may be
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
- this.type = opt_type || '';
63
-
80
+ getId() {
81
+ return this.id_;
82
+ }
64
83
  /**
65
- * A unique ID for the variable. This should be defined at creation and
66
- * not change, even if the name changes. In most cases this should be a
67
- * UUID.
68
- * @type {string}
69
- * @private
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
- this.id_ = opt_id || idGenerator.genUid();
72
-
73
- eventUtils.fire(new (eventUtils.get(eventUtils.VAR_CREATE))(this));
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 {!Workspace} workspace The workspace containing variables.
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 = workspace.isFlyout ? workspace.targetWorkspace : workspace;
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 {!Workspace} workspace The workspace containing variables.
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
- const Warning = function(block) {
42
- Warning.superClass_.constructor.call(this, block);
43
- this.createIcon();
44
- // The text_ object can contain multiple warnings.
45
- this.text_ = Object.create(null);
46
- };
47
- object.inherits(Warning, Icon);
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
- * Draw the warning icon.
56
- * @param {!Element} group The icon group.
57
- * @protected
58
- */
59
- Warning.prototype.drawIcon_ = function(group) {
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
- * Show or hide the warning bubble.
90
- * @param {boolean} visible True if the bubble should be visible.
91
- */
92
- Warning.prototype.setVisible = function(visible) {
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
- * Show the bubble.
107
- * @private
108
- */
109
- Warning.prototype.createBubble_ = function() {
110
- this.paragraphElement_ = Bubble.textToDom(this.getText());
111
- this.bubble_ = Bubble.createNonEditableBubble(
112
- this.paragraphElement_, /** @type {!BlockSvg} */ (this.block_),
113
- /** @type {!Coordinate} */ (this.iconXY_));
114
- this.applyColour();
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
- * Dispose of the bubble and references to it.
119
- * @private
120
- */
121
- Warning.prototype.disposeBubble_ = function() {
122
- this.bubble_.dispose();
123
- this.bubble_ = null;
124
- this.paragraphElement_ = null;
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
- * Set this warning's text.
129
- * @param {string} text Warning text (or '' to delete). This supports
130
- * linebreaks.
131
- * @param {string} id An ID for this text entry to be able to maintain
132
- * multiple warnings.
133
- */
134
- Warning.prototype.setText = function(text, id) {
135
- if (this.text_[id] === text) {
136
- return;
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
- if (text) {
139
- this.text_[id] = text;
140
- } else {
141
- delete this.text_[id];
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
- if (this.isVisible()) {
144
- this.setVisible(false);
145
- this.setVisible(true);
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
- * Get this warning's texts.
151
- * @return {string} All texts concatenated into one string.
152
- */
153
- Warning.prototype.getText = function() {
154
- const allWarnings = [];
155
- for (const id in this.text_) {
156
- allWarnings.push(this.text_[id]);
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
- * Dispose of this warning.
163
- */
164
- Warning.prototype.dispose = function() {
165
- this.block_.warning = null;
166
- Icon.prototype.dispose.call(this);
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 {?Element}
59
+ * @type {?HTMLDivElement}
60
60
  */
61
61
  let DIV;
62
62
 
63
63
  /**
64
64
  * Returns the HTML container for editor widgets.
65
- * @return {?Element} The editor widget container.
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 {?Element} newDiv The new value for the DIV field.
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);