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
@@ -26,105 +26,109 @@ const {MarkerSvg} = goog.requireType('Blockly.blockRendering.MarkerSvg');
26
26
  /**
27
27
  * Class for a marker.
28
28
  * This is used in keyboard navigation to save a location in the Blockly AST.
29
- * @constructor
30
29
  * @alias Blockly.Marker
31
30
  */
32
- const Marker = function() {
31
+ class Marker {
33
32
  /**
34
- * The colour of the marker.
35
- * @type {?string}
33
+ * Constructs a new Marker instance.
36
34
  */
37
- this.colour = null;
35
+ constructor() {
36
+ /**
37
+ * The colour of the marker.
38
+ * @type {?string}
39
+ */
40
+ this.colour = null;
41
+
42
+ /**
43
+ * The current location of the marker.
44
+ * @type {ASTNode}
45
+ * @private
46
+ */
47
+ this.curNode_ = null;
48
+
49
+ /**
50
+ * The object in charge of drawing the visual representation of the current
51
+ * node.
52
+ * @type {MarkerSvg}
53
+ * @private
54
+ */
55
+ this.drawer_ = null;
56
+
57
+ /**
58
+ * The type of the marker.
59
+ * @type {string}
60
+ */
61
+ this.type = 'marker';
62
+ }
38
63
 
39
64
  /**
40
- * The current location of the marker.
41
- * @type {ASTNode}
42
- * @private
65
+ * Sets the object in charge of drawing the marker.
66
+ * @param {MarkerSvg} drawer The object in charge of
67
+ * drawing the marker.
43
68
  */
44
- this.curNode_ = null;
69
+ setDrawer(drawer) {
70
+ this.drawer_ = drawer;
71
+ }
45
72
 
46
73
  /**
47
- * The object in charge of drawing the visual representation of the current
48
- * node.
49
- * @type {MarkerSvg}
50
- * @private
74
+ * Get the current drawer for the marker.
75
+ * @return {MarkerSvg} The object in charge of drawing
76
+ * the marker.
51
77
  */
52
- this.drawer_ = null;
78
+ getDrawer() {
79
+ return this.drawer_;
80
+ }
53
81
 
54
82
  /**
55
- * The type of the marker.
56
- * @type {string}
83
+ * Gets the current location of the marker.
84
+ * @return {ASTNode} The current field, connection, or block the marker
85
+ * is on.
57
86
  */
58
- this.type = 'marker';
59
- };
60
-
61
- /**
62
- * Sets the object in charge of drawing the marker.
63
- * @param {MarkerSvg} drawer The object in charge of
64
- * drawing the marker.
65
- */
66
- Marker.prototype.setDrawer = function(drawer) {
67
- this.drawer_ = drawer;
68
- };
69
-
70
- /**
71
- * Get the current drawer for the marker.
72
- * @return {MarkerSvg} The object in charge of drawing
73
- * the marker.
74
- */
75
- Marker.prototype.getDrawer = function() {
76
- return this.drawer_;
77
- };
78
-
79
- /**
80
- * Gets the current location of the marker.
81
- * @return {ASTNode} The current field, connection, or block the marker
82
- * is on.
83
- */
84
- Marker.prototype.getCurNode = function() {
85
- return this.curNode_;
86
- };
87
+ getCurNode() {
88
+ return this.curNode_;
89
+ }
87
90
 
88
- /**
89
- * Set the location of the marker and call the update method.
90
- * Setting isStack to true will only work if the newLocation is the top most
91
- * output or previous connection on a stack.
92
- * @param {ASTNode} newNode The new location of the marker.
93
- */
94
- Marker.prototype.setCurNode = function(newNode) {
95
- const oldNode = this.curNode_;
96
- this.curNode_ = newNode;
97
- if (this.drawer_) {
98
- this.drawer_.draw(oldNode, this.curNode_);
91
+ /**
92
+ * Set the location of the marker and call the update method.
93
+ * Setting isStack to true will only work if the newLocation is the top most
94
+ * output or previous connection on a stack.
95
+ * @param {ASTNode} newNode The new location of the marker.
96
+ */
97
+ setCurNode(newNode) {
98
+ const oldNode = this.curNode_;
99
+ this.curNode_ = newNode;
100
+ if (this.drawer_) {
101
+ this.drawer_.draw(oldNode, this.curNode_);
102
+ }
99
103
  }
100
- };
101
104
 
102
- /**
103
- * Redraw the current marker.
104
- * @package
105
- */
106
- Marker.prototype.draw = function() {
107
- if (this.drawer_) {
108
- this.drawer_.draw(this.curNode_, this.curNode_);
105
+ /**
106
+ * Redraw the current marker.
107
+ * @package
108
+ */
109
+ draw() {
110
+ if (this.drawer_) {
111
+ this.drawer_.draw(this.curNode_, this.curNode_);
112
+ }
109
113
  }
110
- };
111
114
 
112
- /**
113
- * Hide the marker SVG.
114
- */
115
- Marker.prototype.hide = function() {
116
- if (this.drawer_) {
117
- this.drawer_.hide();
115
+ /**
116
+ * Hide the marker SVG.
117
+ */
118
+ hide() {
119
+ if (this.drawer_) {
120
+ this.drawer_.hide();
121
+ }
118
122
  }
119
- };
120
123
 
121
- /**
122
- * Dispose of this marker.
123
- */
124
- Marker.prototype.dispose = function() {
125
- if (this.getDrawer()) {
126
- this.getDrawer().dispose();
124
+ /**
125
+ * Dispose of this marker.
126
+ */
127
+ dispose() {
128
+ if (this.getDrawer()) {
129
+ this.getDrawer().dispose();
130
+ }
127
131
  }
128
- };
132
+ }
129
133
 
130
134
  exports.Marker = Marker;
@@ -17,7 +17,6 @@
17
17
  */
18
18
  goog.module('Blockly.TabNavigateCursor');
19
19
 
20
- const object = goog.require('Blockly.utils.object');
21
20
  const {ASTNode} = goog.require('Blockly.ASTNode');
22
21
  const {BasicCursor} = goog.require('Blockly.BasicCursor');
23
22
  /* eslint-disable-next-line no-unused-vars */
@@ -26,32 +25,28 @@ const {Field} = goog.requireType('Blockly.Field');
26
25
 
27
26
  /**
28
27
  * A cursor for navigating between tab navigable fields.
29
- * @constructor
30
28
  * @extends {BasicCursor}
31
29
  * @alias Blockly.TabNavigateCursor
32
30
  */
33
- const TabNavigateCursor = function() {
34
- TabNavigateCursor.superClass_.constructor.call(this);
35
- };
36
- object.inherits(TabNavigateCursor, BasicCursor);
37
-
38
- /**
39
- * Skip all nodes except for tab navigable fields.
40
- * @param {?ASTNode} node The AST node to check whether it is valid.
41
- * @return {boolean} True if the node should be visited, false otherwise.
42
- * @override
43
- */
44
- TabNavigateCursor.prototype.validNode_ = function(node) {
45
- let isValid = false;
46
- const type = node && node.getType();
47
- if (node) {
48
- const location = /** @type {Field} */ (node.getLocation());
49
- if (type === ASTNode.types.FIELD && location && location.isTabNavigable() &&
50
- location.isClickable()) {
51
- isValid = true;
31
+ class TabNavigateCursor extends BasicCursor {
32
+ /**
33
+ * Skip all nodes except for tab navigable fields.
34
+ * @param {?ASTNode} node The AST node to check whether it is valid.
35
+ * @return {boolean} True if the node should be visited, false otherwise.
36
+ * @override
37
+ */
38
+ validNode_(node) {
39
+ let isValid = false;
40
+ const type = node && node.getType();
41
+ if (node) {
42
+ const location = /** @type {Field} */ (node.getLocation());
43
+ if (type === ASTNode.types.FIELD && location &&
44
+ location.isTabNavigable() && location.isClickable()) {
45
+ isValid = true;
46
+ }
52
47
  }
48
+ return isValid;
53
49
  }
54
- return isValid;
55
- };
50
+ }
56
51
 
57
52
  exports.TabNavigateCursor = TabNavigateCursor;
@@ -25,177 +25,189 @@ const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
25
25
 
26
26
  /**
27
27
  * Class to manage the multiple markers and the cursor on a workspace.
28
- * @param {!WorkspaceSvg} workspace The workspace for the marker manager.
29
- * @constructor
30
28
  * @alias Blockly.MarkerManager
31
- * @package
32
29
  */
33
- const MarkerManager = function(workspace) {
30
+ class MarkerManager {
34
31
  /**
35
- * The cursor.
36
- * @type {?Cursor}
37
- * @private
32
+ * @param {!WorkspaceSvg} workspace The workspace for the marker manager.
33
+ * @package
38
34
  */
39
- this.cursor_ = null;
35
+ constructor(workspace) {
36
+ /**
37
+ * The cursor.
38
+ * @type {?Cursor}
39
+ * @private
40
+ */
41
+ this.cursor_ = null;
42
+
43
+ /**
44
+ * The cursor's SVG element.
45
+ * @type {?SVGElement}
46
+ * @private
47
+ */
48
+ this.cursorSvg_ = null;
49
+
50
+ /**
51
+ * The map of markers for the workspace.
52
+ * @type {!Object<string, !Marker>}
53
+ * @private
54
+ */
55
+ this.markers_ = Object.create(null);
56
+
57
+ /**
58
+ * The workspace this marker manager is associated with.
59
+ * @type {!WorkspaceSvg}
60
+ * @private
61
+ */
62
+ this.workspace_ = workspace;
63
+
64
+ /**
65
+ * The marker's SVG element.
66
+ * @type {?SVGElement}
67
+ * @private
68
+ */
69
+ this.markerSvg_ = null;
70
+ }
40
71
 
41
72
  /**
42
- * The cursor's SVG element.
43
- * @type {?SVGElement}
44
- * @private
73
+ * Register the marker by adding it to the map of markers.
74
+ * @param {string} id A unique identifier for the marker.
75
+ * @param {!Marker} marker The marker to register.
45
76
  */
46
- this.cursorSvg_ = null;
77
+ registerMarker(id, marker) {
78
+ if (this.markers_[id]) {
79
+ this.unregisterMarker(id);
80
+ }
81
+ marker.setDrawer(this.workspace_.getRenderer().makeMarkerDrawer(
82
+ this.workspace_, marker));
83
+ this.setMarkerSvg(marker.getDrawer().createDom());
84
+ this.markers_[id] = marker;
85
+ }
47
86
 
48
87
  /**
49
- * The map of markers for the workspace.
50
- * @type {!Object<string, !Marker>}
51
- * @private
88
+ * Unregister the marker by removing it from the map of markers.
89
+ * @param {string} id The ID of the marker to unregister.
52
90
  */
53
- this.markers_ = Object.create(null);
91
+ unregisterMarker(id) {
92
+ const marker = this.markers_[id];
93
+ if (marker) {
94
+ marker.dispose();
95
+ delete this.markers_[id];
96
+ } else {
97
+ throw Error(
98
+ 'Marker with ID ' + id + ' does not exist. ' +
99
+ 'Can only unregister markers that exist.');
100
+ }
101
+ }
54
102
 
55
103
  /**
56
- * The workspace this marker manager is associated with.
57
- * @type {!WorkspaceSvg}
58
- * @private
104
+ * Get the cursor for the workspace.
105
+ * @return {?Cursor} The cursor for this workspace.
59
106
  */
60
- this.workspace_ = workspace;
61
- };
62
-
63
- /**
64
- * The name of the local marker.
65
- * @type {string}
66
- * @const
67
- */
68
- MarkerManager.LOCAL_MARKER = 'local_marker_1';
69
-
70
- /**
71
- * Register the marker by adding it to the map of markers.
72
- * @param {string} id A unique identifier for the marker.
73
- * @param {!Marker} marker The marker to register.
74
- */
75
- MarkerManager.prototype.registerMarker = function(id, marker) {
76
- if (this.markers_[id]) {
77
- this.unregisterMarker(id);
107
+ getCursor() {
108
+ return this.cursor_;
78
109
  }
79
- marker.setDrawer(
80
- this.workspace_.getRenderer().makeMarkerDrawer(this.workspace_, marker));
81
- this.setMarkerSvg(marker.getDrawer().createDom());
82
- this.markers_[id] = marker;
83
- };
84
110
 
85
- /**
86
- * Unregister the marker by removing it from the map of markers.
87
- * @param {string} id The ID of the marker to unregister.
88
- */
89
- MarkerManager.prototype.unregisterMarker = function(id) {
90
- const marker = this.markers_[id];
91
- if (marker) {
92
- marker.dispose();
93
- delete this.markers_[id];
94
- } else {
95
- throw Error(
96
- 'Marker with ID ' + id + ' does not exist. ' +
97
- 'Can only unregister markers that exist.');
111
+ /**
112
+ * Get a single marker that corresponds to the given ID.
113
+ * @param {string} id A unique identifier for the marker.
114
+ * @return {?Marker} The marker that corresponds to the given ID,
115
+ * or null if none exists.
116
+ */
117
+ getMarker(id) {
118
+ return this.markers_[id] || null;
98
119
  }
99
- };
100
120
 
101
- /**
102
- * Get the cursor for the workspace.
103
- * @return {?Cursor} The cursor for this workspace.
104
- */
105
- MarkerManager.prototype.getCursor = function() {
106
- return this.cursor_;
107
- };
108
-
109
- /**
110
- * Get a single marker that corresponds to the given ID.
111
- * @param {string} id A unique identifier for the marker.
112
- * @return {?Marker} The marker that corresponds to the given ID,
113
- * or null if none exists.
114
- */
115
- MarkerManager.prototype.getMarker = function(id) {
116
- return this.markers_[id] || null;
117
- };
118
-
119
- /**
120
- * Sets the cursor and initializes the drawer for use with keyboard navigation.
121
- * @param {Cursor} cursor The cursor used to move around this workspace.
122
- */
123
- MarkerManager.prototype.setCursor = function(cursor) {
124
- if (this.cursor_ && this.cursor_.getDrawer()) {
125
- this.cursor_.getDrawer().dispose();
126
- }
127
- this.cursor_ = cursor;
128
- if (this.cursor_) {
129
- const drawer = this.workspace_.getRenderer().makeMarkerDrawer(
130
- this.workspace_, this.cursor_);
131
- this.cursor_.setDrawer(drawer);
132
- this.setCursorSvg(this.cursor_.getDrawer().createDom());
121
+ /**
122
+ * Sets the cursor and initializes the drawer for use with keyboard
123
+ * navigation.
124
+ * @param {Cursor} cursor The cursor used to move around this workspace.
125
+ */
126
+ setCursor(cursor) {
127
+ if (this.cursor_ && this.cursor_.getDrawer()) {
128
+ this.cursor_.getDrawer().dispose();
129
+ }
130
+ this.cursor_ = cursor;
131
+ if (this.cursor_) {
132
+ const drawer = this.workspace_.getRenderer().makeMarkerDrawer(
133
+ this.workspace_, this.cursor_);
134
+ this.cursor_.setDrawer(drawer);
135
+ this.setCursorSvg(this.cursor_.getDrawer().createDom());
136
+ }
133
137
  }
134
- };
135
138
 
136
- /**
137
- * Add the cursor SVG to this workspace SVG group.
138
- * @param {?SVGElement} cursorSvg The SVG root of the cursor to be added to the
139
- * workspace SVG group.
140
- * @package
141
- */
142
- MarkerManager.prototype.setCursorSvg = function(cursorSvg) {
143
- if (!cursorSvg) {
144
- this.cursorSvg_ = null;
145
- return;
139
+ /**
140
+ * Add the cursor SVG to this workspace SVG group.
141
+ * @param {?SVGElement} cursorSvg The SVG root of the cursor to be added to
142
+ * the workspace SVG group.
143
+ * @package
144
+ */
145
+ setCursorSvg(cursorSvg) {
146
+ if (!cursorSvg) {
147
+ this.cursorSvg_ = null;
148
+ return;
149
+ }
150
+
151
+ this.workspace_.getBlockCanvas().appendChild(cursorSvg);
152
+ this.cursorSvg_ = cursorSvg;
146
153
  }
147
154
 
148
- this.workspace_.getBlockCanvas().appendChild(cursorSvg);
149
- this.cursorSvg_ = cursorSvg;
150
- };
155
+ /**
156
+ * Add the marker SVG to this workspaces SVG group.
157
+ * @param {?SVGElement} markerSvg The SVG root of the marker to be added to
158
+ * the workspace SVG group.
159
+ * @package
160
+ */
161
+ setMarkerSvg(markerSvg) {
162
+ if (!markerSvg) {
163
+ this.markerSvg_ = null;
164
+ return;
165
+ }
151
166
 
152
- /**
153
- * Add the marker SVG to this workspaces SVG group.
154
- * @param {?SVGElement} markerSvg The SVG root of the marker to be added to the
155
- * workspace SVG group.
156
- * @package
157
- */
158
- MarkerManager.prototype.setMarkerSvg = function(markerSvg) {
159
- if (!markerSvg) {
160
- this.markerSvg_ = null;
161
- return;
167
+ if (this.workspace_.getBlockCanvas()) {
168
+ if (this.cursorSvg_) {
169
+ this.workspace_.getBlockCanvas().insertBefore(
170
+ markerSvg, this.cursorSvg_);
171
+ } else {
172
+ this.workspace_.getBlockCanvas().appendChild(markerSvg);
173
+ }
174
+ }
162
175
  }
163
176
 
164
- if (this.workspace_.getBlockCanvas()) {
165
- if (this.cursorSvg_) {
166
- this.workspace_.getBlockCanvas().insertBefore(markerSvg, this.cursorSvg_);
167
- } else {
168
- this.workspace_.getBlockCanvas().appendChild(markerSvg);
177
+ /**
178
+ * Redraw the attached cursor SVG if needed.
179
+ * @package
180
+ */
181
+ updateMarkers() {
182
+ if (this.workspace_.keyboardAccessibilityMode && this.cursorSvg_) {
183
+ this.workspace_.getCursor().draw();
169
184
  }
170
185
  }
171
- };
172
186
 
173
- /**
174
- * Redraw the attached cursor SVG if needed.
175
- * @package
176
- */
177
- MarkerManager.prototype.updateMarkers = function() {
178
- if (this.workspace_.keyboardAccessibilityMode && this.cursorSvg_) {
179
- this.workspace_.getCursor().draw();
187
+ /**
188
+ * Dispose of the marker manager.
189
+ * Go through and delete all markers associated with this marker manager.
190
+ * @suppress {checkTypes}
191
+ * @package
192
+ */
193
+ dispose() {
194
+ const markerIds = Object.keys(this.markers_);
195
+ for (let i = 0, markerId; (markerId = markerIds[i]); i++) {
196
+ this.unregisterMarker(markerId);
197
+ }
198
+ this.markers_ = null;
199
+ if (this.cursor_) {
200
+ this.cursor_.dispose();
201
+ this.cursor_ = null;
202
+ }
180
203
  }
181
- };
204
+ }
182
205
 
183
206
  /**
184
- * Dispose of the marker manager.
185
- * Go through and delete all markers associated with this marker manager.
186
- * @suppress {checkTypes}
187
- * @package
207
+ * The name of the local marker.
208
+ * @type {string}
209
+ * @const
188
210
  */
189
- MarkerManager.prototype.dispose = function() {
190
- const markerIds = Object.keys(this.markers_);
191
- for (let i = 0, markerId; (markerId = markerIds[i]); i++) {
192
- this.unregisterMarker(markerId);
193
- }
194
- this.markers_ = null;
195
- if (this.cursor_) {
196
- this.cursor_.dispose();
197
- this.cursor_ = null;
198
- }
199
- };
211
+ MarkerManager.LOCAL_MARKER = 'local_marker_1';
200
212
 
201
213
  exports.MarkerManager = MarkerManager;