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
@@ -17,7 +17,6 @@
17
17
  goog.module('Blockly.zelos.PathObject');
18
18
 
19
19
  const dom = goog.require('Blockly.utils.dom');
20
- const object = goog.require('Blockly.utils.object');
21
20
  /* eslint-disable-next-line no-unused-vars */
22
21
  const {ConstantProvider} = goog.requireType('Blockly.zelos.ConstantProvider');
23
22
  const {PathObject: BasePathObject} = goog.require('Blockly.blockRendering.PathObject');
@@ -29,218 +28,220 @@ const {Theme} = goog.requireType('Blockly.Theme');
29
28
  /**
30
29
  * An object that handles creating and setting each of the SVG elements
31
30
  * used by the renderer.
32
- * @param {!SVGElement} root The root SVG element.
33
- * @param {!Theme.BlockStyle} style The style object to use for
34
- * colouring.
35
- * @param {!ConstantProvider} constants The renderer's constants.
36
- * @constructor
37
- * @extends {BasePathObject}
38
- * @package
39
31
  * @alias Blockly.zelos.PathObject
40
32
  */
41
- const PathObject = function(root, style, constants) {
42
- PathObject.superClass_.constructor.call(this, root, style, constants);
43
-
33
+ class PathObject extends BasePathObject {
44
34
  /**
45
- * The renderer's constant provider.
46
- * @type {!ConstantProvider}
35
+ * @param {!SVGElement} root The root SVG element.
36
+ * @param {!Theme.BlockStyle} style The style object to use for
37
+ * colouring.
38
+ * @param {!ConstantProvider} constants The renderer's constants.
39
+ * @package
47
40
  */
48
- this.constants = constants;
41
+ constructor(root, style, constants) {
42
+ super(root, style, constants);
43
+
44
+ /**
45
+ * The renderer's constant provider.
46
+ * @type {!ConstantProvider}
47
+ */
48
+ this.constants = constants;
49
+
50
+ /**
51
+ * The selected path of the block.
52
+ * @type {?SVGElement}
53
+ * @private
54
+ */
55
+ this.svgPathSelected_ = null;
56
+
57
+ /**
58
+ * The outline paths on the block.
59
+ * @type {!Object<string, !SVGElement>}
60
+ * @private
61
+ */
62
+ this.outlines_ = Object.create(null);
63
+
64
+ /**
65
+ * A set used to determine which outlines were used during a draw pass. The
66
+ * set is initialized with a reference to all the outlines in
67
+ * `this.outlines_`. Every time we use an outline during the draw pass, the
68
+ * reference is removed from this set.
69
+ * @type {Object<string, number>}
70
+ * @private
71
+ */
72
+ this.remainingOutlines_ = null;
73
+
74
+ /**
75
+ * The type of block's output connection shape. This is set when a block
76
+ * with an output connection is drawn.
77
+ * @package
78
+ */
79
+ this.outputShapeType = null;
80
+ }
49
81
 
50
82
  /**
51
- * The selected path of the block.
52
- * @type {?SVGElement}
53
- * @private
83
+ * @override
54
84
  */
55
- this.svgPathSelected_ = null;
85
+ setPath(pathString) {
86
+ super.setPath(pathString);
87
+ if (this.svgPathSelected_) {
88
+ this.svgPathSelected_.setAttribute('d', pathString);
89
+ }
90
+ }
56
91
 
57
92
  /**
58
- * The outline paths on the block.
59
- * @type {!Object<string, !SVGElement>}
60
- * @private
93
+ * @override
61
94
  */
62
- this.outlines_ = Object.create(null);
95
+ applyColour(block) {
96
+ super.applyColour(block);
97
+ // Set shadow stroke colour.
98
+ if (block.isShadow() && block.getParent()) {
99
+ this.svgPath.setAttribute(
100
+ 'stroke', block.getParent().style.colourTertiary);
101
+ }
63
102
 
64
- /**
65
- * A set used to determine which outlines were used during a draw pass. The
66
- * set is initialized with a reference to all the outlines in
67
- * `this.outlines_`. Every time we use an outline during the draw pass, the
68
- * reference is removed from this set.
69
- * @type {Object<string, number>}
70
- * @private
71
- */
72
- this.remainingOutlines_ = null;
103
+ // Apply colour to outlines.
104
+ for (const key in this.outlines_) {
105
+ this.outlines_[key].setAttribute('fill', this.style.colourTertiary);
106
+ }
107
+ }
73
108
 
74
109
  /**
75
- * The type of block's output connection shape. This is set when a block with
76
- * an output connection is drawn.
77
- * @package
110
+ * @override
78
111
  */
79
- this.outputShapeType = null;
80
- };
81
- object.inherits(PathObject, BasePathObject);
82
-
83
- /**
84
- * @override
85
- */
86
- PathObject.prototype.setPath = function(pathString) {
87
- PathObject.superClass_.setPath.call(this, pathString);
88
- if (this.svgPathSelected_) {
89
- this.svgPathSelected_.setAttribute('d', pathString);
90
- }
91
- };
92
-
93
- /**
94
- * @override
95
- */
96
- PathObject.prototype.applyColour = function(block) {
97
- PathObject.superClass_.applyColour.call(this, block);
98
- // Set shadow stroke colour.
99
- if (block.isShadow() && block.getParent()) {
100
- this.svgPath.setAttribute('stroke', block.getParent().style.colourTertiary);
112
+ flipRTL() {
113
+ super.flipRTL();
114
+ // Mirror each input outline path.
115
+ for (const key in this.outlines_) {
116
+ this.outlines_[key].setAttribute('transform', 'scale(-1 1)');
117
+ }
101
118
  }
102
119
 
103
- // Apply colour to outlines.
104
- for (const key in this.outlines_) {
105
- this.outlines_[key].setAttribute('fill', this.style.colourTertiary);
120
+ /**
121
+ * @override
122
+ */
123
+ updateSelected(enable) {
124
+ this.setClass_('blocklySelected', enable);
125
+ if (enable) {
126
+ if (!this.svgPathSelected_) {
127
+ this.svgPathSelected_ =
128
+ /** @type {!SVGElement} */ (this.svgPath.cloneNode(true));
129
+ this.svgPathSelected_.setAttribute('fill', 'none');
130
+ this.svgPathSelected_.setAttribute(
131
+ 'filter', 'url(#' + this.constants.selectedGlowFilterId + ')');
132
+ this.svgRoot.appendChild(this.svgPathSelected_);
133
+ }
134
+ } else {
135
+ if (this.svgPathSelected_) {
136
+ this.svgRoot.removeChild(this.svgPathSelected_);
137
+ this.svgPathSelected_ = null;
138
+ }
139
+ }
106
140
  }
107
- };
108
141
 
109
- /**
110
- * @override
111
- */
112
- PathObject.prototype.flipRTL = function() {
113
- PathObject.superClass_.flipRTL.call(this);
114
- // Mirror each input outline path.
115
- for (const key in this.outlines_) {
116
- this.outlines_[key].setAttribute('transform', 'scale(-1 1)');
142
+ /**
143
+ * @override
144
+ */
145
+ updateReplacementFade(enable) {
146
+ this.setClass_('blocklyReplaceable', enable);
147
+ if (enable) {
148
+ this.svgPath.setAttribute(
149
+ 'filter', 'url(#' + this.constants.replacementGlowFilterId + ')');
150
+ } else {
151
+ this.svgPath.removeAttribute('filter');
152
+ }
117
153
  }
118
- };
119
154
 
120
- /**
121
- * @override
122
- */
123
- PathObject.prototype.updateSelected = function(enable) {
124
- this.setClass_('blocklySelected', enable);
125
- if (enable) {
126
- if (!this.svgPathSelected_) {
127
- this.svgPathSelected_ =
128
- /** @type {!SVGElement} */ (this.svgPath.cloneNode(true));
129
- this.svgPathSelected_.setAttribute('fill', 'none');
130
- this.svgPathSelected_.setAttribute(
131
- 'filter', 'url(#' + this.constants.selectedGlowFilterId + ')');
132
- this.svgRoot.appendChild(this.svgPathSelected_);
155
+ /**
156
+ * @override
157
+ */
158
+ updateShapeForInputHighlight(conn, enable) {
159
+ const name = conn.getParentInput().name;
160
+ const outlinePath = this.getOutlinePath_(name);
161
+ if (!outlinePath) {
162
+ return;
133
163
  }
134
- } else {
135
- if (this.svgPathSelected_) {
136
- this.svgRoot.removeChild(this.svgPathSelected_);
137
- this.svgPathSelected_ = null;
164
+ if (enable) {
165
+ outlinePath.setAttribute(
166
+ 'filter', 'url(#' + this.constants.replacementGlowFilterId + ')');
167
+ } else {
168
+ outlinePath.removeAttribute('filter');
138
169
  }
139
170
  }
140
- };
141
171
 
142
- /**
143
- * @override
144
- */
145
- PathObject.prototype.updateReplacementFade = function(enable) {
146
- this.setClass_('blocklyReplaceable', enable);
147
- if (enable) {
148
- this.svgPath.setAttribute(
149
- 'filter', 'url(#' + this.constants.replacementGlowFilterId + ')');
150
- } else {
151
- this.svgPath.removeAttribute('filter');
172
+ /**
173
+ * Method that's called when the drawer is about to draw the block.
174
+ * @package
175
+ */
176
+ beginDrawing() {
177
+ this.remainingOutlines_ = Object.create(null);
178
+ for (const key in this.outlines_) {
179
+ // The value set here isn't used anywhere, we are just using the
180
+ // object as a Set data structure.
181
+ this.remainingOutlines_[key] = 1;
182
+ }
152
183
  }
153
- };
154
184
 
155
- /**
156
- * @override
157
- */
158
- PathObject.prototype.updateShapeForInputHighlight = function(conn, enable) {
159
- const name = conn.getParentInput().name;
160
- const outlinePath = this.getOutlinePath_(name);
161
- if (!outlinePath) {
162
- return;
163
- }
164
- if (enable) {
165
- outlinePath.setAttribute(
166
- 'filter', 'url(#' + this.constants.replacementGlowFilterId + ')');
167
- } else {
168
- outlinePath.removeAttribute('filter');
185
+ /**
186
+ * Method that's called when the drawer is done drawing.
187
+ * @package
188
+ */
189
+ endDrawing() {
190
+ // Go through all remaining outlines that were not used this draw pass, and
191
+ // remove them.
192
+ if (this.remainingOutlines_) {
193
+ for (const key in this.remainingOutlines_) {
194
+ this.removeOutlinePath_(key);
195
+ }
196
+ }
197
+ this.remainingOutlines_ = null;
169
198
  }
170
- };
171
199
 
172
- /**
173
- * Method that's called when the drawer is about to draw the block.
174
- * @package
175
- */
176
- PathObject.prototype.beginDrawing = function() {
177
- this.remainingOutlines_ = Object.create(null);
178
- for (const key in this.outlines_) {
179
- // The value set here isn't used anywhere, we are just using the
180
- // object as a Set data structure.
181
- this.remainingOutlines_[key] = 1;
200
+ /**
201
+ * Set the path generated by the renderer for an outline path on the
202
+ * respective outline path SVG element.
203
+ * @param {string} name The input name.
204
+ * @param {string} pathString The path.
205
+ * @package
206
+ */
207
+ setOutlinePath(name, pathString) {
208
+ const outline = this.getOutlinePath_(name);
209
+ outline.setAttribute('d', pathString);
210
+ outline.setAttribute('fill', this.style.colourTertiary);
182
211
  }
183
- };
184
212
 
185
- /**
186
- * Method that's called when the drawer is done drawing.
187
- * @package
188
- */
189
- PathObject.prototype.endDrawing = function() {
190
- // Go through all remaining outlines that were not used this draw pass, and
191
- // remove them.
192
- if (this.remainingOutlines_) {
193
- for (const key in this.remainingOutlines_) {
194
- this.removeOutlinePath_(key);
213
+ /**
214
+ * Create's an outline path for the specified input.
215
+ * @param {string} name The input name.
216
+ * @return {!SVGElement} The SVG outline path.
217
+ * @private
218
+ */
219
+ getOutlinePath_(name) {
220
+ if (!this.outlines_[name]) {
221
+ this.outlines_[name] = dom.createSvgElement(
222
+ Svg.PATH, {
223
+ 'class': 'blocklyOutlinePath',
224
+ // IE doesn't like paths without the data definition, set empty
225
+ // default
226
+ 'd': '',
227
+ },
228
+ this.svgRoot);
195
229
  }
230
+ if (this.remainingOutlines_) {
231
+ delete this.remainingOutlines_[name];
232
+ }
233
+ return this.outlines_[name];
196
234
  }
197
- this.remainingOutlines_ = null;
198
- };
199
-
200
- /**
201
- * Set the path generated by the renderer for an outline path on the respective
202
- * outline path SVG element.
203
- * @param {string} name The input name.
204
- * @param {string} pathString The path.
205
- * @package
206
- */
207
- PathObject.prototype.setOutlinePath = function(name, pathString) {
208
- const outline = this.getOutlinePath_(name);
209
- outline.setAttribute('d', pathString);
210
- outline.setAttribute('fill', this.style.colourTertiary);
211
- };
212
235
 
213
- /**
214
- * Create's an outline path for the specified input.
215
- * @param {string} name The input name.
216
- * @return {!SVGElement} The SVG outline path.
217
- * @private
218
- */
219
- PathObject.prototype.getOutlinePath_ = function(name) {
220
- if (!this.outlines_[name]) {
221
- this.outlines_[name] = dom.createSvgElement(
222
- Svg.PATH, {
223
- 'class': 'blocklyOutlinePath',
224
- // IE doesn't like paths without the data definition, set empty
225
- // default
226
- 'd': '',
227
- },
228
- this.svgRoot);
229
- }
230
- if (this.remainingOutlines_) {
231
- delete this.remainingOutlines_[name];
236
+ /**
237
+ * Remove an outline path that is associated with the specified input.
238
+ * @param {string} name The input name.
239
+ * @private
240
+ */
241
+ removeOutlinePath_(name) {
242
+ this.outlines_[name].parentNode.removeChild(this.outlines_[name]);
243
+ delete this.outlines_[name];
232
244
  }
233
- return this.outlines_[name];
234
- };
235
-
236
- /**
237
- * Remove an outline path that is associated with the specified input.
238
- * @param {string} name The input name.
239
- * @private
240
- */
241
- PathObject.prototype.removeOutlinePath_ = function(name) {
242
- this.outlines_[name].parentNode.removeChild(this.outlines_[name]);
243
- delete this.outlines_[name];
244
- };
245
+ }
245
246
 
246
247
  exports.PathObject = PathObject;
@@ -16,7 +16,6 @@
16
16
  goog.module('Blockly.zelos.Renderer');
17
17
 
18
18
  const blockRendering = goog.require('Blockly.blockRendering');
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
  const {ConnectionType} = goog.require('Blockly.ConnectionType');
@@ -39,109 +38,109 @@ const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
39
38
 
40
39
  /**
41
40
  * The zelos renderer.
42
- * @param {string} name The renderer name.
43
- * @package
44
- * @constructor
45
41
  * @extends {BaseRenderer}
46
42
  * @alias Blockly.zelos.Renderer
47
43
  */
48
- const Renderer = function(name) {
49
- Renderer.superClass_.constructor.call(this, name);
50
- };
51
- object.inherits(Renderer, BaseRenderer);
44
+ class Renderer extends BaseRenderer {
45
+ /**
46
+ * @param {string} name The renderer name.
47
+ * @package
48
+ */
49
+ constructor(name) {
50
+ super(name);
51
+ }
52
52
 
53
- /**
54
- * Create a new instance of the renderer's constant provider.
55
- * @return {!ConstantProvider} The constant provider.
56
- * @protected
57
- * @override
58
- */
59
- Renderer.prototype.makeConstants_ = function() {
60
- return new ConstantProvider();
61
- };
53
+ /**
54
+ * Create a new instance of the renderer's constant provider.
55
+ * @return {!ConstantProvider} The constant provider.
56
+ * @protected
57
+ * @override
58
+ */
59
+ makeConstants_() {
60
+ return new ConstantProvider();
61
+ }
62
62
 
63
- /**
64
- * Create a new instance of the renderer's render info object.
65
- * @param {!BlockSvg} block The block to measure.
66
- * @return {!RenderInfo} The render info object.
67
- * @protected
68
- * @override
69
- */
70
- Renderer.prototype.makeRenderInfo_ = function(block) {
71
- return new RenderInfo(this, block);
72
- };
63
+ /**
64
+ * Create a new instance of the renderer's render info object.
65
+ * @param {!BlockSvg} block The block to measure.
66
+ * @return {!RenderInfo} The render info object.
67
+ * @protected
68
+ * @override
69
+ */
70
+ makeRenderInfo_(block) {
71
+ return new RenderInfo(this, block);
72
+ }
73
73
 
74
- /**
75
- * Create a new instance of the renderer's drawer.
76
- * @param {!BlockSvg} block The block to render.
77
- * @param {!BaseRenderInfo} info An object containing all
78
- * information needed to render this block.
79
- * @return {!Drawer} The drawer.
80
- * @protected
81
- * @override
82
- */
83
- Renderer.prototype.makeDrawer_ = function(block, info) {
84
- return new Drawer(
85
- block,
86
- /** @type {!RenderInfo} */ (info));
87
- };
74
+ /**
75
+ * Create a new instance of the renderer's drawer.
76
+ * @param {!BlockSvg} block The block to render.
77
+ * @param {!BaseRenderInfo} info An object containing all
78
+ * information needed to render this block.
79
+ * @return {!Drawer} The drawer.
80
+ * @protected
81
+ * @override
82
+ */
83
+ makeDrawer_(block, info) {
84
+ return new Drawer(
85
+ block,
86
+ /** @type {!RenderInfo} */ (info));
87
+ }
88
88
 
89
- /**
90
- * Create a new instance of the renderer's cursor drawer.
91
- * @param {!WorkspaceSvg} workspace The workspace the cursor belongs to.
92
- * @param {!Marker} marker The marker.
93
- * @return {!MarkerSvg} The object in charge of drawing
94
- * the marker.
95
- * @package
96
- * @override
97
- */
98
- Renderer.prototype.makeMarkerDrawer = function(workspace, marker) {
99
- return new MarkerSvg(workspace, this.getConstants(), marker);
100
- };
89
+ /**
90
+ * Create a new instance of the renderer's cursor drawer.
91
+ * @param {!WorkspaceSvg} workspace The workspace the cursor belongs to.
92
+ * @param {!Marker} marker The marker.
93
+ * @return {!MarkerSvg} The object in charge of drawing
94
+ * the marker.
95
+ * @package
96
+ * @override
97
+ */
98
+ makeMarkerDrawer(workspace, marker) {
99
+ return new MarkerSvg(workspace, this.getConstants(), marker);
100
+ }
101
101
 
102
- /**
103
- * Create a new instance of a renderer path object.
104
- * @param {!SVGElement} root The root SVG element.
105
- * @param {!Theme.BlockStyle} style The style object to use for
106
- * colouring.
107
- * @return {!PathObject} The renderer path object.
108
- * @package
109
- * @override
110
- */
111
- Renderer.prototype.makePathObject = function(root, style) {
112
- return new PathObject(
113
- root, style,
114
- /** @type {!ConstantProvider} */ (this.getConstants()));
115
- };
102
+ /**
103
+ * Create a new instance of a renderer path object.
104
+ * @param {!SVGElement} root The root SVG element.
105
+ * @param {!Theme.BlockStyle} style The style object to use for
106
+ * colouring.
107
+ * @return {!PathObject} The renderer path object.
108
+ * @package
109
+ * @override
110
+ */
111
+ makePathObject(root, style) {
112
+ return new PathObject(
113
+ root, style,
114
+ /** @type {!ConstantProvider} */ (this.getConstants()));
115
+ }
116
116
 
117
- /**
118
- * @override
119
- */
120
- Renderer.prototype.shouldHighlightConnection = function(conn) {
121
- return conn.type !== ConnectionType.INPUT_VALUE &&
122
- conn.type !== ConnectionType.OUTPUT_VALUE;
123
- };
117
+ /**
118
+ * @override
119
+ */
120
+ shouldHighlightConnection(conn) {
121
+ return conn.type !== ConnectionType.INPUT_VALUE &&
122
+ conn.type !== ConnectionType.OUTPUT_VALUE;
123
+ }
124
124
 
125
- /**
126
- * @override
127
- */
128
- Renderer.prototype.getConnectionPreviewMethod = function(
129
- closest, local, topBlock) {
130
- if (local.type === ConnectionType.OUTPUT_VALUE) {
131
- if (!closest.isConnected()) {
132
- return InsertionMarkerManager.PREVIEW_TYPE.INPUT_OUTLINE;
125
+ /**
126
+ * @override
127
+ */
128
+ getConnectionPreviewMethod(closest, local, topBlock) {
129
+ if (local.type === ConnectionType.OUTPUT_VALUE) {
130
+ if (!closest.isConnected()) {
131
+ return InsertionMarkerManager.PREVIEW_TYPE.INPUT_OUTLINE;
132
+ }
133
+ // TODO: Returning this is a total hack, because we don't want to show
134
+ // a replacement fade, we want to show an outline affect.
135
+ // Sadly zelos does not support showing an outline around filled
136
+ // inputs, so we have to pretend like the connected block is getting
137
+ // replaced.
138
+ return InsertionMarkerManager.PREVIEW_TYPE.REPLACEMENT_FADE;
133
139
  }
134
- // TODO: Returning this is a total hack, because we don't want to show
135
- // a replacement fade, we want to show an outline affect.
136
- // Sadly zelos does not support showing an outline around filled
137
- // inputs, so we have to pretend like the connected block is getting
138
- // replaced.
139
- return InsertionMarkerManager.PREVIEW_TYPE.REPLACEMENT_FADE;
140
- }
141
140
 
142
- return Renderer.superClass_.getConnectionPreviewMethod(
143
- closest, local, topBlock);
144
- };
141
+ return super.getConnectionPreviewMethod(closest, local, topBlock);
142
+ }
143
+ }
145
144
 
146
145
  blockRendering.register('zelos', Renderer);
147
146