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.
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
@@ -16,7 +16,6 @@
16
16
  */
17
17
  goog.module('Blockly.blockRendering.BottomRow');
18
18
 
19
- const object = goog.require('Blockly.utils.object');
20
19
  /* eslint-disable-next-line no-unused-vars */
21
20
  const {BlockSvg} = goog.requireType('Blockly.BlockSvg');
22
21
  /* eslint-disable-next-line no-unused-vars */
@@ -32,104 +31,108 @@ const {Types} = goog.require('Blockly.blockRendering.Types');
32
31
  * a block as well as spacing information for the bottom row.
33
32
  * Elements in a bottom row can consist of corners, spacers and next
34
33
  * connections.
35
- * @param {!ConstantProvider} constants The rendering
36
- * constants provider.
37
- * @package
38
- * @constructor
39
34
  * @extends {Row}
35
+ * @struct
40
36
  * @alias Blockly.blockRendering.BottomRow
41
37
  */
42
- const BottomRow = function(constants) {
43
- BottomRow.superClass_.constructor.call(this, constants);
44
- this.type |= Types.BOTTOM_ROW;
45
-
38
+ class BottomRow extends Row {
46
39
  /**
47
- * Whether this row has a next connection.
40
+ * @param {!ConstantProvider} constants The rendering
41
+ * constants provider.
48
42
  * @package
49
- * @type {boolean}
50
43
  */
51
- this.hasNextConnection = false;
44
+ constructor(constants) {
45
+ super(constants);
46
+ this.type |= Types.BOTTOM_ROW;
47
+
48
+ /**
49
+ * Whether this row has a next connection.
50
+ * @package
51
+ * @type {boolean}
52
+ */
53
+ this.hasNextConnection = false;
54
+
55
+ /**
56
+ * The next connection on the row, if any.
57
+ * @package
58
+ * @type {NextConnection}
59
+ */
60
+ this.connection = null;
61
+
62
+ /**
63
+ * The amount that the bottom of the block extends below the horizontal
64
+ * edge, e.g. because of a next connection. Must be non-negative (see
65
+ * #2820).
66
+ * @package
67
+ * @type {number}
68
+ */
69
+ this.descenderHeight = 0;
70
+
71
+ /**
72
+ * The Y position of the bottom edge of the block, relative to the origin
73
+ * of the block rendering.
74
+ * @type {number}
75
+ */
76
+ this.baseline = 0;
77
+ }
52
78
 
53
79
  /**
54
- * The next connection on the row, if any.
55
- * @package
56
- * @type {NextConnection}
80
+ * Returns whether or not the bottom row has a left square corner.
81
+ * @param {!BlockSvg} block The block whose bottom row this represents.
82
+ * @return {boolean} Whether or not the bottom row has a left square corner.
57
83
  */
58
- this.connection = null;
84
+ hasLeftSquareCorner(block) {
85
+ return !!block.outputConnection || !!block.getNextBlock();
86
+ }
59
87
 
60
88
  /**
61
- * The amount that the bottom of the block extends below the horizontal edge,
62
- * e.g. because of a next connection. Must be non-negative (see #2820).
63
- * @package
64
- * @type {number}
89
+ * Returns whether or not the bottom row has a right square corner.
90
+ * @param {!BlockSvg} _block The block whose bottom row this represents.
91
+ * @return {boolean} Whether or not the bottom row has a right square corner.
65
92
  */
66
- this.descenderHeight = 0;
93
+ hasRightSquareCorner(_block) {
94
+ return true;
95
+ }
67
96
 
68
97
  /**
69
- * The Y position of the bottom edge of the block, relative to the origin
70
- * of the block rendering.
71
- * @type {number}
98
+ * @override
72
99
  */
73
- this.baseline = 0;
74
- };
75
- object.inherits(BottomRow, Row);
76
-
77
- /**
78
- * Returns whether or not the bottom row has a left square corner.
79
- * @param {!BlockSvg} block The block whose bottom row this represents.
80
- * @return {boolean} Whether or not the bottom row has a left square corner.
81
- */
82
- BottomRow.prototype.hasLeftSquareCorner = function(block) {
83
- return !!block.outputConnection || !!block.getNextBlock();
84
- };
85
-
86
- /**
87
- * Returns whether or not the bottom row has a right square corner.
88
- * @param {!BlockSvg} _block The block whose bottom row this represents.
89
- * @return {boolean} Whether or not the bottom row has a right square corner.
90
- */
91
- BottomRow.prototype.hasRightSquareCorner = function(_block) {
92
- return true;
93
- };
94
-
95
- /**
96
- * @override
97
- */
98
- BottomRow.prototype.measure = function() {
99
- let height = 0;
100
- let width = 0;
101
- let descenderHeight = 0;
102
- for (let i = 0; i < this.elements.length; i++) {
103
- const elem = this.elements[i];
104
- width += elem.width;
105
- if (!(Types.isSpacer(elem))) {
106
- // Note: this assumes that next connections have *only* descenderHeight,
107
- // with no height above the baseline.
108
- if (Types.isNextConnection(elem)) {
109
- descenderHeight = Math.max(descenderHeight, elem.height);
110
- } else {
111
- height = Math.max(height, elem.height);
100
+ measure() {
101
+ let height = 0;
102
+ let width = 0;
103
+ let descenderHeight = 0;
104
+ for (let i = 0; i < this.elements.length; i++) {
105
+ const elem = this.elements[i];
106
+ width += elem.width;
107
+ if (!(Types.isSpacer(elem))) {
108
+ // Note: this assumes that next connections have *only* descenderHeight,
109
+ // with no height above the baseline.
110
+ if (Types.isNextConnection(elem)) {
111
+ descenderHeight = Math.max(descenderHeight, elem.height);
112
+ } else {
113
+ height = Math.max(height, elem.height);
114
+ }
112
115
  }
113
116
  }
117
+ this.width = Math.max(this.minWidth, width);
118
+ this.height = Math.max(this.minHeight, height) + descenderHeight;
119
+ this.descenderHeight = descenderHeight;
120
+ this.widthWithConnectedBlocks = this.width;
114
121
  }
115
- this.width = Math.max(this.minWidth, width);
116
- this.height = Math.max(this.minHeight, height) + descenderHeight;
117
- this.descenderHeight = descenderHeight;
118
- this.widthWithConnectedBlocks = this.width;
119
- };
120
122
 
121
- /**
122
- * @override
123
- */
124
- BottomRow.prototype.startsWithElemSpacer = function() {
125
- return false;
126
- };
123
+ /**
124
+ * @override
125
+ */
126
+ startsWithElemSpacer() {
127
+ return false;
128
+ }
127
129
 
128
- /**
129
- * @override
130
- */
131
- BottomRow.prototype.endsWithElemSpacer = function() {
132
- return false;
133
- };
130
+ /**
131
+ * @override
132
+ */
133
+ endsWithElemSpacer() {
134
+ return false;
135
+ }
136
+ }
134
137
 
135
138
  exports.BottomRow = BottomRow;
@@ -16,7 +16,6 @@
16
16
  */
17
17
  goog.module('Blockly.blockRendering.Connection');
18
18
 
19
- const object = goog.require('Blockly.utils.object');
20
19
  /* eslint-disable-next-line no-unused-vars */
21
20
  const {ConstantProvider} = goog.requireType('Blockly.blockRendering.ConstantProvider');
22
21
  const {Measurable} = goog.require('Blockly.blockRendering.Measurable');
@@ -28,22 +27,30 @@ const {Types} = goog.require('Blockly.blockRendering.Types');
28
27
  /**
29
28
  * The base class to represent a connection and the space that it takes up on
30
29
  * the block.
31
- * @param {!ConstantProvider} constants The rendering
32
- * constants provider.
33
- * @param {!RenderedConnection} connectionModel The connection object on
34
- * the block that this represents.
35
- * @package
36
- * @constructor
37
30
  * @extends {Measurable}
38
31
  * @alias Blockly.blockRendering.Connection
39
32
  */
40
- const Connection = function(constants, connectionModel) {
41
- Connection.superClass_.constructor.call(this, constants);
42
- this.connectionModel = connectionModel;
43
- this.shape = this.constants_.shapeFor(connectionModel);
44
- this.isDynamicShape = !!this.shape['isDynamic'];
45
- this.type |= Types.CONNECTION;
46
- };
47
- object.inherits(Connection, Measurable);
33
+ class Connection extends Measurable {
34
+ /**
35
+ * @param {!ConstantProvider} constants The rendering
36
+ * constants provider.
37
+ * @param {!RenderedConnection} connectionModel The connection object on
38
+ * the block that this represents.
39
+ * @package
40
+ */
41
+ constructor(constants, connectionModel) {
42
+ super(constants);
43
+
44
+ /** @type {!RenderedConnection} */
45
+ this.connectionModel = connectionModel;
46
+
47
+ /** @type {!Object} */
48
+ this.shape = this.constants_.shapeFor(connectionModel);
49
+
50
+ /** @type {boolean} */
51
+ this.isDynamicShape = !!this.shape['isDynamic'];
52
+ this.type |= Types.CONNECTION;
53
+ }
54
+ }
48
55
 
49
56
  exports.Connection = Connection;
@@ -16,7 +16,6 @@
16
16
  */
17
17
  goog.module('Blockly.blockRendering.ExternalValueInput');
18
18
 
19
- const object = goog.require('Blockly.utils.object');
20
19
  /* eslint-disable-next-line no-unused-vars */
21
20
  const {ConstantProvider} = goog.requireType('Blockly.blockRendering.ConstantProvider');
22
21
  const {InputConnection} = goog.require('Blockly.blockRendering.InputConnection');
@@ -28,30 +27,44 @@ const {Types} = goog.require('Blockly.blockRendering.Types');
28
27
  /**
29
28
  * An object containing information about the space an external value input
30
29
  * takes up during rendering
31
- * @param {!ConstantProvider} constants The rendering
32
- * constants provider.
33
- * @param {!Input} input The external value input to measure and store
34
- * information for.
35
- * @package
36
- * @constructor
30
+ * @struct
37
31
  * @extends {InputConnection}
38
32
  * @alias Blockly.blockRendering.ExternalValueInput
39
33
  */
40
- const ExternalValueInput = function(constants, input) {
41
- ExternalValueInput.superClass_.constructor.call(this, constants, input);
42
- this.type |= Types.EXTERNAL_VALUE_INPUT;
43
- if (!this.connectedBlock) {
44
- this.height = this.shape.height;
45
- } else {
46
- this.height = this.connectedBlockHeight -
47
- this.constants_.TAB_OFFSET_FROM_TOP - this.constants_.MEDIUM_PADDING;
48
- }
49
- this.width = this.shape.width + this.constants_.EXTERNAL_VALUE_INPUT_PADDING;
34
+ class ExternalValueInput extends InputConnection {
35
+ /**
36
+ * @param {!ConstantProvider} constants The rendering
37
+ * constants provider.
38
+ * @param {!Input} input The external value input to measure and store
39
+ * information for.
40
+ * @package
41
+ */
42
+ constructor(constants, input) {
43
+ super(constants, input);
44
+ this.type |= Types.EXTERNAL_VALUE_INPUT;
45
+
46
+ /** @type {number} */
47
+ this.height = 0;
48
+ if (!this.connectedBlock) {
49
+ this.height = this.shape.height;
50
+ } else {
51
+ this.height = this.connectedBlockHeight -
52
+ this.constants_.TAB_OFFSET_FROM_TOP - this.constants_.MEDIUM_PADDING;
53
+ }
54
+
55
+ /** @type {number} */
56
+ this.width =
57
+ this.shape.width + this.constants_.EXTERNAL_VALUE_INPUT_PADDING;
50
58
 
51
- this.connectionOffsetY = this.constants_.TAB_OFFSET_FROM_TOP;
52
- this.connectionHeight = this.shape.height;
53
- this.connectionWidth = this.shape.width;
54
- };
55
- object.inherits(ExternalValueInput, InputConnection);
59
+ /** @type {number} */
60
+ this.connectionOffsetY = this.constants_.TAB_OFFSET_FROM_TOP;
61
+
62
+ /** @type {number} */
63
+ this.connectionHeight = this.shape.height;
64
+
65
+ /** @type {number} */
66
+ this.connectionWidth = this.shape.width;
67
+ }
68
+ }
56
69
 
57
70
  exports.ExternalValueInput = ExternalValueInput;
@@ -16,7 +16,6 @@
16
16
  */
17
17
  goog.module('Blockly.blockRendering.Field');
18
18
 
19
- const object = goog.require('Blockly.utils.object');
20
19
  /* eslint-disable-next-line no-unused-vars */
21
20
  const {ConstantProvider} = goog.requireType('Blockly.blockRendering.ConstantProvider');
22
21
  /* eslint-disable-next-line no-unused-vars */
@@ -30,27 +29,43 @@ const {Types} = goog.require('Blockly.blockRendering.Types');
30
29
  /**
31
30
  * An object containing information about the space a field takes up during
32
31
  * rendering
33
- * @param {!ConstantProvider} constants The rendering
34
- * constants provider.
35
- * @param {!BlocklyField} field The field to measure and store information for.
36
- * @param {!Input} parentInput The parent input for the field.
37
- * @package
38
- * @constructor
32
+ * @struct
39
33
  * @extends {Measurable}
40
34
  * @alias Blockly.blockRendering.Field
41
35
  */
42
- const Field = function(constants, field, parentInput) {
43
- Field.superClass_.constructor.call(this, constants);
44
- this.field = field;
45
- this.isEditable = field.EDITABLE;
46
- this.flipRtl = field.getFlipRtl();
47
- this.type |= Types.FIELD;
48
-
49
- const size = this.field.getSize();
50
- this.height = size.height;
51
- this.width = size.width;
52
- this.parentInput = parentInput;
53
- };
54
- object.inherits(Field, Measurable);
36
+ class Field extends Measurable {
37
+ /**
38
+ * @param {!ConstantProvider} constants The rendering
39
+ * constants provider.
40
+ * @param {!BlocklyField} field The field to measure and store information
41
+ * for.
42
+ * @param {!Input} parentInput The parent input for the field.
43
+ * @package
44
+ */
45
+ constructor(constants, field, parentInput) {
46
+ super(constants);
47
+
48
+ /** @type {!BlocklyField} */
49
+ this.field = field;
50
+
51
+ /** @type {boolean} */
52
+ this.isEditable = field.EDITABLE;
53
+
54
+ /** @type {boolean} */
55
+ this.flipRtl = field.getFlipRtl();
56
+ this.type |= Types.FIELD;
57
+
58
+ const size = this.field.getSize();
59
+
60
+ /** @type {number} */
61
+ this.height = size.height;
62
+
63
+ /** @type {number} */
64
+ this.width = size.width;
65
+
66
+ /** @type {!Input} */
67
+ this.parentInput = parentInput;
68
+ }
69
+ }
55
70
 
56
71
  exports.Field = Field;
@@ -16,7 +16,6 @@
16
16
  */
17
17
  goog.module('Blockly.blockRendering.Hat');
18
18
 
19
- const object = goog.require('Blockly.utils.object');
20
19
  /* eslint-disable-next-line no-unused-vars */
21
20
  const {ConstantProvider} = goog.requireType('Blockly.blockRendering.ConstantProvider');
22
21
  const {Measurable} = goog.require('Blockly.blockRendering.Measurable');
@@ -26,20 +25,26 @@ const {Types} = goog.require('Blockly.blockRendering.Types');
26
25
  /**
27
26
  * An object containing information about the space a hat takes up during
28
27
  * rendering.
29
- * @param {!ConstantProvider} constants The rendering
30
- * constants provider.
31
- * @package
32
- * @constructor
28
+ * @struct
33
29
  * @extends {Measurable}
34
30
  * @alias Blockly.blockRendering.Hat
35
31
  */
36
- const Hat = function(constants) {
37
- Hat.superClass_.constructor.call(this, constants);
38
- this.type |= Types.HAT;
39
- this.height = this.constants_.START_HAT.height;
40
- this.width = this.constants_.START_HAT.width;
41
- this.ascenderHeight = this.height;
42
- };
43
- object.inherits(Hat, Measurable);
32
+ class Hat extends Measurable {
33
+ /**
34
+ * @param {!ConstantProvider} constants The rendering
35
+ * constants provider.
36
+ * @package
37
+ */
38
+ constructor(constants) {
39
+ super(constants);
40
+ this.type |= Types.HAT;
41
+
42
+ this.height = this.constants_.START_HAT.height;
43
+ this.width = this.constants_.START_HAT.width;
44
+
45
+ /** @type {number} */
46
+ this.ascenderHeight = this.height;
47
+ }
48
+ }
44
49
 
45
50
  exports.Hat = Hat;
@@ -16,7 +16,6 @@
16
16
  */
17
17
  goog.module('Blockly.blockRendering.Icon');
18
18
 
19
- const object = goog.require('Blockly.utils.object');
20
19
  /* eslint-disable-next-line no-unused-vars */
21
20
  const {ConstantProvider} = goog.requireType('Blockly.blockRendering.ConstantProvider');
22
21
  /* eslint-disable-next-line no-unused-vars */
@@ -28,24 +27,32 @@ const {Types} = goog.require('Blockly.blockRendering.Types');
28
27
  /**
29
28
  * An object containing information about the space an icon takes up during
30
29
  * rendering
31
- * @param {!ConstantProvider} constants The rendering
32
- * constants provider.
33
- * @param {!BlocklyIcon} icon The icon to measure and store information for.
34
- * @package
35
- * @constructor
36
30
  * @extends {Measurable}
31
+ * @struct
37
32
  * @alias Blockly.blockRendering.Icon
38
33
  */
39
- const Icon = function(constants, icon) {
40
- Icon.superClass_.constructor.call(this, constants);
41
- this.icon = icon;
42
- this.isVisible = icon.isVisible();
43
- this.type |= Types.ICON;
44
-
45
- const size = icon.getCorrectedSize();
46
- this.height = size.height;
47
- this.width = size.width;
48
- };
49
- object.inherits(Icon, Measurable);
34
+ class Icon extends Measurable {
35
+ /**
36
+ * An object containing information about the space an icon takes up during
37
+ * rendering
38
+ * @param {!ConstantProvider} constants The rendering
39
+ * constants provider.
40
+ * @param {!BlocklyIcon} icon The icon to measure and store information for.
41
+ * @package
42
+ */
43
+ constructor(constants, icon) {
44
+ super(constants);
50
45
 
46
+ /** @type {!BlocklyIcon} */
47
+ this.icon = icon;
48
+
49
+ /** @type {boolean} */
50
+ this.isVisible = icon.isVisible();
51
+ this.type |= Types.ICON;
52
+
53
+ const size = icon.getCorrectedSize();
54
+ this.height = size.height;
55
+ this.width = size.width;
56
+ }
57
+ }
51
58
  exports.Icon = Icon;
@@ -16,7 +16,6 @@
16
16
  */
17
17
  goog.module('Blockly.blockRendering.InRowSpacer');
18
18
 
19
- const object = goog.require('Blockly.utils.object');
20
19
  /* eslint-disable-next-line no-unused-vars */
21
20
  const {ConstantProvider} = goog.requireType('Blockly.blockRendering.ConstantProvider');
22
21
  const {Measurable} = goog.require('Blockly.blockRendering.Measurable');
@@ -26,20 +25,23 @@ const {Types} = goog.require('Blockly.blockRendering.Types');
26
25
  /**
27
26
  * An object containing information about a spacer between two elements on a
28
27
  * row.
29
- * @param {!ConstantProvider} constants The rendering
30
- * constants provider.
31
- * @param {number} width The width of the spacer.
32
- * @package
33
- * @constructor
34
28
  * @extends {Measurable}
29
+ * @struct
35
30
  * @alias Blockly.blockRendering.InRowSpacer
36
31
  */
37
- const InRowSpacer = function(constants, width) {
38
- InRowSpacer.superClass_.constructor.call(this, constants);
39
- this.type |= Types.SPACER | Types.IN_ROW_SPACER;
40
- this.width = width;
41
- this.height = this.constants_.SPACER_DEFAULT_HEIGHT;
42
- };
43
- object.inherits(InRowSpacer, Measurable);
32
+ class InRowSpacer extends Measurable {
33
+ /**
34
+ * @param {!ConstantProvider} constants The rendering
35
+ * constants provider.
36
+ * @param {number} width The width of the spacer.
37
+ * @package
38
+ */
39
+ constructor(constants, width) {
40
+ super(constants);
41
+ this.type |= Types.SPACER | Types.IN_ROW_SPACER;
42
+ this.width = width;
43
+ this.height = this.constants_.SPACER_DEFAULT_HEIGHT;
44
+ }
45
+ }
44
46
 
45
47
  exports.InRowSpacer = InRowSpacer;
@@ -16,7 +16,6 @@
16
16
  */
17
17
  goog.module('Blockly.blockRendering.InlineInput');
18
18
 
19
- const object = goog.require('Blockly.utils.object');
20
19
  /* eslint-disable-next-line no-unused-vars */
21
20
  const {ConstantProvider} = goog.requireType('Blockly.blockRendering.ConstantProvider');
22
21
  const {InputConnection} = goog.require('Blockly.blockRendering.InputConnection');
@@ -28,43 +27,54 @@ const {Types} = goog.require('Blockly.blockRendering.Types');
28
27
  /**
29
28
  * An object containing information about the space an inline input takes up
30
29
  * during rendering
31
- * @param {!ConstantProvider} constants The rendering
32
- * constants provider.
33
- * @param {!Input} input The inline input to measure and store
34
- * information for.
35
- * @package
36
- * @constructor
37
30
  * @extends {InputConnection}
31
+ * @struct
38
32
  * @alias Blockly.blockRendering.InlineInput
39
33
  */
40
- const InlineInput = function(constants, input) {
41
- InlineInput.superClass_.constructor.call(this, constants, input);
42
- this.type |= Types.INLINE_INPUT;
34
+ class InlineInput extends InputConnection {
35
+ /**
36
+ * @param {!ConstantProvider} constants The rendering
37
+ * constants provider.
38
+ * @param {!Input} input The inline input to measure and store
39
+ * information for.
40
+ * @package
41
+ */
42
+ constructor(constants, input) {
43
+ super(constants, input);
44
+ this.type |= Types.INLINE_INPUT;
43
45
 
44
- if (!this.connectedBlock) {
45
- this.height = this.constants_.EMPTY_INLINE_INPUT_HEIGHT;
46
- this.width = this.constants_.EMPTY_INLINE_INPUT_PADDING;
47
- } else {
48
- // We allow the dark path to show on the parent block so that the child
49
- // block looks embossed. This takes up an extra pixel in both x and y.
50
- this.width = this.connectedBlockWidth;
51
- this.height = this.connectedBlockHeight;
52
- }
46
+ if (!this.connectedBlock) {
47
+ this.height = this.constants_.EMPTY_INLINE_INPUT_HEIGHT;
48
+ this.width = this.constants_.EMPTY_INLINE_INPUT_PADDING;
49
+ } else {
50
+ // We allow the dark path to show on the parent block so that the child
51
+ // block looks embossed. This takes up an extra pixel in both x and y.
52
+ this.width = this.connectedBlockWidth;
53
+ this.height = this.connectedBlockHeight;
54
+ }
55
+
56
+ /** @type {number} */
57
+ this.connectionHeight = !this.isDynamicShape ?
58
+ this.shape.height :
59
+ this.shape.height(this.height);
60
+
61
+ /** @type {number} */
62
+ this.connectionWidth =
63
+ !this.isDynamicShape ? this.shape.width : this.shape.width(this.height);
64
+ if (!this.connectedBlock) {
65
+ this.width += this.connectionWidth * (this.isDynamicShape ? 2 : 1);
66
+ }
67
+
68
+ /** @type {number} */
69
+ this.connectionOffsetY = this.isDynamicShape ?
70
+ this.shape.connectionOffsetY(this.connectionHeight) :
71
+ this.constants_.TAB_OFFSET_FROM_TOP;
53
72
 
54
- this.connectionHeight =
55
- !this.isDynamicShape ? this.shape.height : this.shape.height(this.height);
56
- this.connectionWidth =
57
- !this.isDynamicShape ? this.shape.width : this.shape.width(this.height);
58
- if (!this.connectedBlock) {
59
- this.width += this.connectionWidth * (this.isDynamicShape ? 2 : 1);
73
+ /** @type {number} */
74
+ this.connectionOffsetX = this.isDynamicShape ?
75
+ this.shape.connectionOffsetX(this.connectionWidth) :
76
+ 0;
60
77
  }
61
- this.connectionOffsetY = this.isDynamicShape ?
62
- this.shape.connectionOffsetY(this.connectionHeight) :
63
- this.constants_.TAB_OFFSET_FROM_TOP;
64
- this.connectionOffsetX = this.isDynamicShape ?
65
- this.shape.connectionOffsetX(this.connectionWidth) :
66
- 0;
67
- };
68
- object.inherits(InlineInput, InputConnection);
78
+ }
69
79
 
70
80
  exports.InlineInput = InlineInput;