blockly 7.20211209.4 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/blockly.d.ts +18963 -18432
  2. package/blockly.min.js +852 -844
  3. package/blockly_compressed.js +669 -664
  4. package/blockly_compressed.js.map +1 -1
  5. package/blocks/blocks.js +47 -0
  6. package/blocks/colour.js +13 -3
  7. package/blocks/lists.js +22 -13
  8. package/blocks/logic.js +13 -3
  9. package/blocks/loops.js +24 -11
  10. package/blocks/math.js +12 -3
  11. package/blocks/procedures.js +41 -27
  12. package/blocks/text.js +22 -13
  13. package/blocks/variables.js +14 -3
  14. package/blocks/variables_dynamic.js +13 -3
  15. package/blocks_compressed.js +146 -141
  16. package/blocks_compressed.js.map +1 -1
  17. package/core/block.js +1869 -1814
  18. package/core/block_drag_surface.js +201 -200
  19. package/core/block_dragger.js +377 -373
  20. package/core/block_svg.js +1593 -1479
  21. package/core/blockly.js +8 -22
  22. package/core/blocks.js +9 -2
  23. package/core/browser_events.js +22 -5
  24. package/core/bubble.js +841 -797
  25. package/core/bubble_dragger.js +213 -206
  26. package/core/bump_objects.js +2 -2
  27. package/core/clipboard.js +9 -9
  28. package/core/comment.js +353 -332
  29. package/core/common.js +46 -17
  30. package/core/component_manager.js +181 -174
  31. package/core/config.js +87 -0
  32. package/core/connection.js +595 -584
  33. package/core/connection_checker.js +242 -244
  34. package/core/connection_db.js +235 -230
  35. package/core/contextmenu.js +9 -6
  36. package/core/contextmenu_items.js +1 -2
  37. package/core/contextmenu_registry.js +93 -89
  38. package/core/css.js +474 -474
  39. package/core/delete_area.js +45 -42
  40. package/core/drag_target.js +57 -56
  41. package/core/dropdowndiv.js +153 -163
  42. package/core/events/events.js +2 -2
  43. package/core/events/events_abstract.js +89 -77
  44. package/core/events/events_block_base.js +37 -36
  45. package/core/events/events_block_change.js +130 -124
  46. package/core/events/events_block_create.js +73 -71
  47. package/core/events/events_block_delete.js +84 -82
  48. package/core/events/events_block_drag.js +50 -49
  49. package/core/events/events_block_move.js +147 -140
  50. package/core/events/events_bubble_open.js +51 -50
  51. package/core/events/events_click.js +48 -44
  52. package/core/events/events_comment_base.js +72 -69
  53. package/core/events/events_comment_change.js +63 -61
  54. package/core/events/events_comment_create.js +44 -42
  55. package/core/events/events_comment_delete.js +42 -40
  56. package/core/events/events_comment_move.js +106 -104
  57. package/core/events/events_marker_move.js +65 -64
  58. package/core/events/events_selected.js +46 -45
  59. package/core/events/events_theme_change.js +36 -35
  60. package/core/events/events_toolbox_item_select.js +46 -45
  61. package/core/events/events_trashcan_open.js +37 -36
  62. package/core/events/events_ui.js +47 -46
  63. package/core/events/events_ui_base.js +30 -29
  64. package/core/events/events_var_base.js +37 -36
  65. package/core/events/events_var_create.js +50 -48
  66. package/core/events/events_var_delete.js +50 -48
  67. package/core/events/events_var_rename.js +51 -49
  68. package/core/events/events_viewport.js +66 -65
  69. package/core/events/utils.js +29 -14
  70. package/core/events/workspace_events.js +49 -55
  71. package/core/extensions.js +4 -3
  72. package/core/field.js +1061 -997
  73. package/core/field_angle.js +462 -442
  74. package/core/field_checkbox.js +194 -182
  75. package/core/field_colour.js +519 -505
  76. package/core/field_dropdown.js +617 -598
  77. package/core/field_image.js +229 -220
  78. package/core/field_label.js +102 -91
  79. package/core/field_label_serializable.js +42 -41
  80. package/core/field_multilineinput.js +372 -358
  81. package/core/field_number.js +272 -253
  82. package/core/field_textinput.js +499 -467
  83. package/core/field_variable.js +458 -420
  84. package/core/flyout_base.js +1005 -952
  85. package/core/flyout_button.js +277 -260
  86. package/core/flyout_horizontal.js +304 -302
  87. package/core/flyout_metrics_manager.js +64 -64
  88. package/core/flyout_vertical.js +306 -300
  89. package/core/generator.js +459 -446
  90. package/core/gesture.js +829 -813
  91. package/core/grid.js +166 -163
  92. package/core/icon.js +168 -159
  93. package/core/inject.js +7 -5
  94. package/core/input.js +257 -248
  95. package/core/insertion_marker_manager.js +655 -624
  96. package/core/internal_constants.js +0 -129
  97. package/core/keyboard_nav/ast_node.js +605 -596
  98. package/core/keyboard_nav/basic_cursor.js +166 -165
  99. package/core/keyboard_nav/cursor.js +99 -97
  100. package/core/keyboard_nav/marker.js +83 -79
  101. package/core/keyboard_nav/tab_navigate_cursor.js +18 -23
  102. package/core/marker_manager.js +153 -141
  103. package/core/menu.js +377 -372
  104. package/core/menuitem.js +223 -217
  105. package/core/metrics_manager.js +403 -390
  106. package/core/mutator.js +468 -437
  107. package/core/names.js +229 -188
  108. package/core/options.js +290 -284
  109. package/core/procedures.js +29 -17
  110. package/core/registry.js +19 -16
  111. package/core/rendered_connection.js +482 -463
  112. package/core/renderers/common/block_rendering.js +9 -3
  113. package/core/renderers/common/constants.js +1119 -1112
  114. package/core/renderers/common/debug.js +14 -0
  115. package/core/renderers/common/debugger.js +338 -316
  116. package/core/renderers/common/drawer.js +380 -370
  117. package/core/renderers/common/i_path_object.js +2 -2
  118. package/core/renderers/common/info.js +626 -618
  119. package/core/renderers/common/marker_svg.js +579 -541
  120. package/core/renderers/common/path_object.js +203 -200
  121. package/core/renderers/common/renderer.js +220 -218
  122. package/core/renderers/geras/constants.js +36 -36
  123. package/core/renderers/geras/drawer.js +155 -147
  124. package/core/renderers/geras/highlight_constants.js +244 -238
  125. package/core/renderers/geras/highlighter.js +231 -179
  126. package/core/renderers/geras/info.js +392 -369
  127. package/core/renderers/geras/measurables/inline_input.js +25 -19
  128. package/core/renderers/geras/measurables/statement_input.js +23 -17
  129. package/core/renderers/geras/path_object.js +106 -121
  130. package/core/renderers/geras/renderer.js +96 -98
  131. package/core/renderers/measurables/base.js +30 -18
  132. package/core/renderers/measurables/bottom_row.js +83 -80
  133. package/core/renderers/measurables/connection.js +22 -15
  134. package/core/renderers/measurables/external_value_input.js +35 -22
  135. package/core/renderers/measurables/field.js +35 -20
  136. package/core/renderers/measurables/hat.js +18 -13
  137. package/core/renderers/measurables/icon.js +24 -17
  138. package/core/renderers/measurables/in_row_spacer.js +15 -13
  139. package/core/renderers/measurables/inline_input.js +43 -33
  140. package/core/renderers/measurables/input_connection.js +41 -28
  141. package/core/renderers/measurables/input_row.js +50 -44
  142. package/core/renderers/measurables/jagged_edge.js +14 -12
  143. package/core/renderers/measurables/next_connection.js +16 -14
  144. package/core/renderers/measurables/output_connection.js +26 -20
  145. package/core/renderers/measurables/previous_connection.js +16 -15
  146. package/core/renderers/measurables/round_corner.js +20 -18
  147. package/core/renderers/measurables/row.js +184 -168
  148. package/core/renderers/measurables/spacer_row.js +38 -23
  149. package/core/renderers/measurables/square_corner.js +18 -16
  150. package/core/renderers/measurables/statement_input.js +23 -20
  151. package/core/renderers/measurables/top_row.js +88 -85
  152. package/core/renderers/minimalist/constants.js +8 -7
  153. package/core/renderers/minimalist/drawer.js +11 -10
  154. package/core/renderers/minimalist/info.js +18 -18
  155. package/core/renderers/minimalist/renderer.js +40 -39
  156. package/core/renderers/thrasos/info.js +258 -248
  157. package/core/renderers/thrasos/renderer.js +20 -20
  158. package/core/renderers/zelos/constants.js +898 -873
  159. package/core/renderers/zelos/drawer.js +186 -169
  160. package/core/renderers/zelos/info.js +502 -479
  161. package/core/renderers/zelos/marker_svg.js +129 -115
  162. package/core/renderers/zelos/measurables/bottom_row.js +31 -30
  163. package/core/renderers/zelos/measurables/inputs.js +22 -21
  164. package/core/renderers/zelos/measurables/row_elements.js +14 -13
  165. package/core/renderers/zelos/measurables/top_row.js +34 -33
  166. package/core/renderers/zelos/path_object.js +181 -180
  167. package/core/renderers/zelos/renderer.js +91 -92
  168. package/core/scrollbar.js +759 -713
  169. package/core/scrollbar_pair.js +250 -245
  170. package/core/serialization/blocks.js +19 -9
  171. package/core/serialization/workspaces.js +3 -2
  172. package/core/shortcut_registry.js +286 -277
  173. package/core/sprites.js +31 -0
  174. package/core/theme.js +135 -141
  175. package/core/theme_manager.js +147 -143
  176. package/core/toolbox/category.js +602 -576
  177. package/core/toolbox/collapsible_category.js +226 -227
  178. package/core/toolbox/separator.js +70 -61
  179. package/core/toolbox/toolbox.js +934 -927
  180. package/core/toolbox/toolbox_item.js +115 -99
  181. package/core/tooltip.js +108 -35
  182. package/core/touch.js +8 -3
  183. package/core/touch_gesture.js +254 -251
  184. package/core/trashcan.js +606 -595
  185. package/core/utils/coordinate.js +97 -95
  186. package/core/utils/dom.js +2 -2
  187. package/core/utils/global.js +2 -0
  188. package/core/utils/rect.js +41 -37
  189. package/core/utils/sentinel.js +25 -0
  190. package/core/utils/size.js +30 -27
  191. package/core/utils/svg.js +18 -16
  192. package/core/variable_map.js +325 -341
  193. package/core/variable_model.js +55 -54
  194. package/core/variables.js +9 -2
  195. package/core/variables_dynamic.js +3 -1
  196. package/core/warning.js +126 -120
  197. package/core/widgetdiv.js +4 -4
  198. package/core/workspace.js +685 -664
  199. package/core/workspace_audio.js +124 -118
  200. package/core/workspace_comment.js +308 -298
  201. package/core/workspace_comment_svg.js +1029 -951
  202. package/core/workspace_drag_surface_svg.js +147 -140
  203. package/core/workspace_dragger.js +70 -71
  204. package/core/workspace_svg.js +2322 -2297
  205. package/core/xml.js +30 -20
  206. package/core/zoom_controls.js +431 -439
  207. package/dart_compressed.js +40 -43
  208. package/dart_compressed.js.map +1 -1
  209. package/generators/dart/colour.js +56 -64
  210. package/generators/dart/lists.js +61 -50
  211. package/generators/dart/math.js +160 -148
  212. package/generators/dart/text.js +83 -61
  213. package/generators/javascript/colour.js +37 -34
  214. package/generators/javascript/lists.js +50 -43
  215. package/generators/javascript/math.js +123 -139
  216. package/generators/javascript/text.js +67 -81
  217. package/generators/lua/colour.js +25 -23
  218. package/generators/lua/lists.js +97 -69
  219. package/generators/lua/logic.js +1 -2
  220. package/generators/lua/math.js +182 -144
  221. package/generators/lua/text.js +116 -99
  222. package/generators/php/colour.js +38 -32
  223. package/generators/php/lists.js +109 -89
  224. package/generators/php/math.js +90 -81
  225. package/generators/php/text.js +63 -61
  226. package/generators/python/colour.js +18 -18
  227. package/generators/python/lists.js +38 -30
  228. package/generators/python/loops.js +12 -8
  229. package/generators/python/math.js +104 -106
  230. package/generators/python/text.js +34 -30
  231. package/javascript_compressed.js +37 -39
  232. package/javascript_compressed.js.map +1 -1
  233. package/lua_compressed.js +39 -42
  234. package/lua_compressed.js.map +1 -1
  235. package/msg/az.js +2 -2
  236. package/msg/be.js +4 -4
  237. package/msg/cs.js +15 -15
  238. package/msg/de.js +1 -1
  239. package/msg/diq.js +1 -1
  240. package/msg/eo.js +1 -1
  241. package/msg/es.js +1 -1
  242. package/msg/fa.js +1 -1
  243. package/msg/fr.js +4 -4
  244. package/msg/he.js +1 -1
  245. package/msg/hr.js +2 -2
  246. package/msg/hy.js +2 -2
  247. package/msg/id.js +12 -12
  248. package/msg/inh.js +14 -14
  249. package/msg/ja.js +7 -7
  250. package/msg/lv.js +29 -29
  251. package/msg/pa.js +3 -3
  252. package/msg/smn.js +436 -0
  253. package/msg/te.js +1 -1
  254. package/msg/yue.js +1 -1
  255. package/msg/zh-hans.js +3 -3
  256. package/msg/zh-hant.js +3 -3
  257. package/package.json +7 -6
  258. package/php_compressed.js +38 -42
  259. package/php_compressed.js.map +1 -1
  260. package/python_compressed.js +26 -25
  261. package/python_compressed.js.map +1 -1
  262. package/blocks/all.js +0 -23
@@ -16,7 +16,6 @@
16
16
  goog.module('Blockly.Events.CommentMove');
17
17
 
18
18
  const eventUtils = goog.require('Blockly.Events.utils');
19
- const object = goog.require('Blockly.utils.object');
20
19
  const registry = goog.require('Blockly.registry');
21
20
  const {CommentBase} = goog.require('Blockly.Events.CommentBase');
22
21
  const {Coordinate} = goog.require('Blockly.utils.Coordinate');
@@ -26,129 +25,132 @@ const {WorkspaceComment} = goog.requireType('Blockly.WorkspaceComment');
26
25
 
27
26
  /**
28
27
  * Class for a comment move event. Created before the move.
29
- * @param {!WorkspaceComment=} opt_comment The comment that is being
30
- * moved. Undefined for a blank event.
31
28
  * @extends {CommentBase}
32
- * @constructor
33
29
  * @alias Blockly.Events.CommentMove
34
30
  */
35
- const CommentMove = function(opt_comment) {
36
- CommentMove.superClass_.constructor.call(this, opt_comment);
37
- if (!opt_comment) {
38
- return; // Blank event to be populated by fromJson.
31
+ class CommentMove extends CommentBase {
32
+ /**
33
+ * @param {!WorkspaceComment=} opt_comment The comment that is being
34
+ * moved. Undefined for a blank event.
35
+ */
36
+ constructor(opt_comment) {
37
+ super(opt_comment);
38
+
39
+ /**
40
+ * Type of this event.
41
+ * @type {string}
42
+ */
43
+ this.type = eventUtils.COMMENT_MOVE;
44
+
45
+ if (!opt_comment) {
46
+ return; // Blank event to be populated by fromJson.
47
+ }
48
+
49
+ /**
50
+ * The comment that is being moved. Will be cleared after recording the new
51
+ * location.
52
+ * @type {WorkspaceComment}
53
+ */
54
+ this.comment_ = opt_comment;
55
+
56
+ /**
57
+ * The location before the move, in workspace coordinates.
58
+ * @type {!Coordinate}
59
+ */
60
+ this.oldCoordinate_ = opt_comment.getXY();
61
+
62
+ /**
63
+ * The location after the move, in workspace coordinates.
64
+ * @type {Coordinate}
65
+ */
66
+ this.newCoordinate_ = null;
39
67
  }
40
68
 
41
69
  /**
42
- * The comment that is being moved. Will be cleared after recording the new
43
- * location.
44
- * @type {WorkspaceComment}
70
+ * Record the comment's new location. Called after the move. Can only be
71
+ * called once.
45
72
  */
46
- this.comment_ = opt_comment;
73
+ recordNew() {
74
+ if (!this.comment_) {
75
+ throw Error(
76
+ 'Tried to record the new position of a comment on the ' +
77
+ 'same event twice.');
78
+ }
79
+ this.newCoordinate_ = this.comment_.getXY();
80
+ this.comment_ = null;
81
+ }
47
82
 
48
83
  /**
49
- * The location before the move, in workspace coordinates.
50
- * @type {!Coordinate}
84
+ * Override the location before the move. Use this if you don't create the
85
+ * event until the end of the move, but you know the original location.
86
+ * @param {!Coordinate} xy The location before the move,
87
+ * in workspace coordinates.
51
88
  */
52
- this.oldCoordinate_ = opt_comment.getXY();
89
+ setOldCoordinate(xy) {
90
+ this.oldCoordinate_ = xy;
91
+ }
53
92
 
93
+ // TODO (#1266): "Full" and "minimal" serialization.
54
94
  /**
55
- * The location after the move, in workspace coordinates.
56
- * @type {Coordinate}
95
+ * Encode the event as JSON.
96
+ * @return {!Object} JSON representation.
57
97
  */
58
- this.newCoordinate_ = null;
59
- };
60
- object.inherits(CommentMove, CommentBase);
61
-
62
- /**
63
- * Record the comment's new location. Called after the move. Can only be
64
- * called once.
65
- */
66
- CommentMove.prototype.recordNew = function() {
67
- if (!this.comment_) {
68
- throw Error(
69
- 'Tried to record the new position of a comment on the ' +
70
- 'same event twice.');
98
+ toJson() {
99
+ const json = super.toJson();
100
+ if (this.oldCoordinate_) {
101
+ json['oldCoordinate'] = Math.round(this.oldCoordinate_.x) + ',' +
102
+ Math.round(this.oldCoordinate_.y);
103
+ }
104
+ if (this.newCoordinate_) {
105
+ json['newCoordinate'] = Math.round(this.newCoordinate_.x) + ',' +
106
+ Math.round(this.newCoordinate_.y);
107
+ }
108
+ return json;
71
109
  }
72
- this.newCoordinate_ = this.comment_.getXY();
73
- this.comment_ = null;
74
- };
75
-
76
- /**
77
- * Type of this event.
78
- * @type {string}
79
- */
80
- CommentMove.prototype.type = eventUtils.COMMENT_MOVE;
81
-
82
- /**
83
- * Override the location before the move. Use this if you don't create the
84
- * event until the end of the move, but you know the original location.
85
- * @param {!Coordinate} xy The location before the move,
86
- * in workspace coordinates.
87
- */
88
- CommentMove.prototype.setOldCoordinate = function(xy) {
89
- this.oldCoordinate_ = xy;
90
- };
91
110
 
92
- /**
93
- * Encode the event as JSON.
94
- * @return {!Object} JSON representation.
95
- */
96
- // TODO (#1266): "Full" and "minimal" serialization.
97
- CommentMove.prototype.toJson = function() {
98
- const json = CommentMove.superClass_.toJson.call(this);
99
- if (this.oldCoordinate_) {
100
- json['oldCoordinate'] = Math.round(this.oldCoordinate_.x) + ',' +
101
- Math.round(this.oldCoordinate_.y);
102
- }
103
- if (this.newCoordinate_) {
104
- json['newCoordinate'] = Math.round(this.newCoordinate_.x) + ',' +
105
- Math.round(this.newCoordinate_.y);
111
+ /**
112
+ * Decode the JSON event.
113
+ * @param {!Object} json JSON representation.
114
+ */
115
+ fromJson(json) {
116
+ super.fromJson(json);
117
+
118
+ if (json['oldCoordinate']) {
119
+ const xy = json['oldCoordinate'].split(',');
120
+ this.oldCoordinate_ = new Coordinate(Number(xy[0]), Number(xy[1]));
121
+ }
122
+ if (json['newCoordinate']) {
123
+ const xy = json['newCoordinate'].split(',');
124
+ this.newCoordinate_ = new Coordinate(Number(xy[0]), Number(xy[1]));
125
+ }
106
126
  }
107
- return json;
108
- };
109
-
110
- /**
111
- * Decode the JSON event.
112
- * @param {!Object} json JSON representation.
113
- */
114
- CommentMove.prototype.fromJson = function(json) {
115
- CommentMove.superClass_.fromJson.call(this, json);
116
127
 
117
- if (json['oldCoordinate']) {
118
- const xy = json['oldCoordinate'].split(',');
119
- this.oldCoordinate_ = new Coordinate(Number(xy[0]), Number(xy[1]));
120
- }
121
- if (json['newCoordinate']) {
122
- const xy = json['newCoordinate'].split(',');
123
- this.newCoordinate_ = new Coordinate(Number(xy[0]), Number(xy[1]));
128
+ /**
129
+ * Does this event record any change of state?
130
+ * @return {boolean} False if something changed.
131
+ */
132
+ isNull() {
133
+ return Coordinate.equals(this.oldCoordinate_, this.newCoordinate_);
124
134
  }
125
- };
126
135
 
127
- /**
128
- * Does this event record any change of state?
129
- * @return {boolean} False if something changed.
130
- */
131
- CommentMove.prototype.isNull = function() {
132
- return Coordinate.equals(this.oldCoordinate_, this.newCoordinate_);
133
- };
134
-
135
- /**
136
- * Run a move event.
137
- * @param {boolean} forward True if run forward, false if run backward (undo).
138
- */
139
- CommentMove.prototype.run = function(forward) {
140
- const workspace = this.getEventWorkspace_();
141
- const comment = workspace.getCommentById(this.commentId);
142
- if (!comment) {
143
- console.warn('Can\'t move non-existent comment: ' + this.commentId);
144
- return;
136
+ /**
137
+ * Run a move event.
138
+ * @param {boolean} forward True if run forward, false if run backward (undo).
139
+ */
140
+ run(forward) {
141
+ const workspace = this.getEventWorkspace_();
142
+ const comment = workspace.getCommentById(this.commentId);
143
+ if (!comment) {
144
+ console.warn('Can\'t move non-existent comment: ' + this.commentId);
145
+ return;
146
+ }
147
+
148
+ const target = forward ? this.newCoordinate_ : this.oldCoordinate_;
149
+ // TODO: Check if the comment is being dragged, and give up if so.
150
+ const current = comment.getXY();
151
+ comment.moveBy(target.x - current.x, target.y - current.y);
145
152
  }
146
-
147
- const target = forward ? this.newCoordinate_ : this.oldCoordinate_;
148
- // TODO: Check if the comment is being dragged, and give up if so.
149
- const current = comment.getXY();
150
- comment.moveBy(target.x - current.x, target.y - current.y);
151
- };
153
+ }
152
154
 
153
155
  registry.register(registry.Type.EVENT, eventUtils.COMMENT_MOVE, CommentMove);
154
156
 
@@ -16,7 +16,6 @@
16
16
  goog.module('Blockly.Events.MarkerMove');
17
17
 
18
18
  const eventUtils = goog.require('Blockly.Events.utils');
19
- const object = goog.require('Blockly.utils.object');
20
19
  const registry = goog.require('Blockly.registry');
21
20
  const {ASTNode} = goog.require('Blockly.ASTNode');
22
21
  /* eslint-disable-next-line no-unused-vars */
@@ -28,81 +27,83 @@ const {Workspace} = goog.requireType('Blockly.Workspace');
28
27
 
29
28
  /**
30
29
  * Class for a marker move event.
31
- * @param {?Block=} opt_block The affected block. Null if current node
32
- * is of type workspace. Undefined for a blank event.
33
- * @param {boolean=} isCursor Whether this is a cursor event. Undefined for a
34
- * blank event.
35
- * @param {?ASTNode=} opt_oldNode The old node the marker used to be on.
36
- * Undefined for a blank event.
37
- * @param {!ASTNode=} opt_newNode The new node the marker is now on.
38
- * Undefined for a blank event.
39
30
  * @extends {UiBase}
40
- * @constructor
41
31
  * @alias Blockly.Events.MarkerMove
42
32
  */
43
- const MarkerMove = function(opt_block, isCursor, opt_oldNode, opt_newNode) {
44
- let workspaceId = opt_block ? opt_block.workspace.id : undefined;
45
- if (opt_newNode && opt_newNode.getType() === ASTNode.types.WORKSPACE) {
46
- workspaceId = (/** @type {!Workspace} */ (opt_newNode.getLocation())).id;
47
- }
48
- MarkerMove.superClass_.constructor.call(this, workspaceId);
49
-
33
+ class MarkerMove extends UiBase {
50
34
  /**
51
- * The workspace identifier for this event.
52
- * @type {?string}
35
+ * @param {?Block=} opt_block The affected block. Null if current node
36
+ * is of type workspace. Undefined for a blank event.
37
+ * @param {boolean=} isCursor Whether this is a cursor event. Undefined for a
38
+ * blank event.
39
+ * @param {?ASTNode=} opt_oldNode The old node the marker used to be on.
40
+ * Undefined for a blank event.
41
+ * @param {!ASTNode=} opt_newNode The new node the marker is now on.
42
+ * Undefined for a blank event.
53
43
  */
54
- this.blockId = opt_block ? opt_block.id : null;
44
+ constructor(opt_block, isCursor, opt_oldNode, opt_newNode) {
45
+ let workspaceId = opt_block ? opt_block.workspace.id : undefined;
46
+ if (opt_newNode && opt_newNode.getType() === ASTNode.types.WORKSPACE) {
47
+ workspaceId = (/** @type {!Workspace} */ (opt_newNode.getLocation())).id;
48
+ }
49
+ super(workspaceId);
55
50
 
56
- /**
57
- * The old node the marker used to be on.
58
- * @type {?ASTNode|undefined}
59
- */
60
- this.oldNode = opt_oldNode;
51
+ /**
52
+ * The workspace identifier for this event.
53
+ * @type {?string}
54
+ */
55
+ this.blockId = opt_block ? opt_block.id : null;
56
+
57
+ /**
58
+ * The old node the marker used to be on.
59
+ * @type {?ASTNode|undefined}
60
+ */
61
+ this.oldNode = opt_oldNode;
62
+
63
+ /**
64
+ * The new node the marker is now on.
65
+ * @type {ASTNode|undefined}
66
+ */
67
+ this.newNode = opt_newNode;
68
+
69
+ /**
70
+ * Whether this is a cursor event.
71
+ * @type {boolean|undefined}
72
+ */
73
+ this.isCursor = isCursor;
74
+
75
+ /**
76
+ * Type of this event.
77
+ * @type {string}
78
+ */
79
+ this.type = eventUtils.MARKER_MOVE;
80
+ }
61
81
 
62
82
  /**
63
- * The new node the marker is now on.
64
- * @type {ASTNode|undefined}
83
+ * Encode the event as JSON.
84
+ * @return {!Object} JSON representation.
65
85
  */
66
- this.newNode = opt_newNode;
86
+ toJson() {
87
+ const json = super.toJson();
88
+ json['isCursor'] = this.isCursor;
89
+ json['blockId'] = this.blockId;
90
+ json['oldNode'] = this.oldNode;
91
+ json['newNode'] = this.newNode;
92
+ return json;
93
+ }
67
94
 
68
95
  /**
69
- * Whether this is a cursor event.
70
- * @type {boolean|undefined}
96
+ * Decode the JSON event.
97
+ * @param {!Object} json JSON representation.
71
98
  */
72
- this.isCursor = isCursor;
73
- };
74
- object.inherits(MarkerMove, UiBase);
75
-
76
- /**
77
- * Type of this event.
78
- * @type {string}
79
- */
80
- MarkerMove.prototype.type = eventUtils.MARKER_MOVE;
81
-
82
- /**
83
- * Encode the event as JSON.
84
- * @return {!Object} JSON representation.
85
- */
86
- MarkerMove.prototype.toJson = function() {
87
- const json = MarkerMove.superClass_.toJson.call(this);
88
- json['isCursor'] = this.isCursor;
89
- json['blockId'] = this.blockId;
90
- json['oldNode'] = this.oldNode;
91
- json['newNode'] = this.newNode;
92
- return json;
93
- };
94
-
95
- /**
96
- * Decode the JSON event.
97
- * @param {!Object} json JSON representation.
98
- */
99
- MarkerMove.prototype.fromJson = function(json) {
100
- MarkerMove.superClass_.fromJson.call(this, json);
101
- this.isCursor = json['isCursor'];
102
- this.blockId = json['blockId'];
103
- this.oldNode = json['oldNode'];
104
- this.newNode = json['newNode'];
105
- };
99
+ fromJson(json) {
100
+ super.fromJson(json);
101
+ this.isCursor = json['isCursor'];
102
+ this.blockId = json['blockId'];
103
+ this.oldNode = json['oldNode'];
104
+ this.newNode = json['newNode'];
105
+ }
106
+ }
106
107
 
107
108
  registry.register(registry.Type.EVENT, eventUtils.MARKER_MOVE, MarkerMove);
108
109
 
@@ -16,66 +16,67 @@
16
16
  goog.module('Blockly.Events.Selected');
17
17
 
18
18
  const eventUtils = goog.require('Blockly.Events.utils');
19
- const object = goog.require('Blockly.utils.object');
20
19
  const registry = goog.require('Blockly.registry');
21
20
  const {UiBase} = goog.require('Blockly.Events.UiBase');
22
21
 
23
22
 
24
23
  /**
25
24
  * Class for a selected event.
26
- * @param {?string=} opt_oldElementId The ID of the previously selected
27
- * element. Null if no element last selected. Undefined for a blank event.
28
- * @param {?string=} opt_newElementId The ID of the selected element. Null if no
29
- * element currently selected (deselect). Undefined for a blank event.
30
- * @param {string=} opt_workspaceId The workspace identifier for this event.
31
- * Null if no element previously selected. Undefined for a blank event.
32
25
  * @extends {UiBase}
33
- * @constructor
34
26
  * @alias Blockly.Events.Selected
35
27
  */
36
- const Selected = function(opt_oldElementId, opt_newElementId, opt_workspaceId) {
37
- Selected.superClass_.constructor.call(this, opt_workspaceId);
38
-
28
+ class Selected extends UiBase {
39
29
  /**
40
- * The id of the last selected element.
41
- * @type {?string|undefined}
30
+ * @param {?string=} opt_oldElementId The ID of the previously selected
31
+ * element. Null if no element last selected. Undefined for a blank event.
32
+ * @param {?string=} opt_newElementId The ID of the selected element. Null if
33
+ * no element currently selected (deselect). Undefined for a blank event.
34
+ * @param {string=} opt_workspaceId The workspace identifier for this event.
35
+ * Null if no element previously selected. Undefined for a blank event.
42
36
  */
43
- this.oldElementId = opt_oldElementId;
37
+ constructor(opt_oldElementId, opt_newElementId, opt_workspaceId) {
38
+ super(opt_workspaceId);
44
39
 
45
- /**
46
- * The id of the selected element.
47
- * @type {?string|undefined}
48
- */
49
- this.newElementId = opt_newElementId;
50
- };
51
- object.inherits(Selected, UiBase);
40
+ /**
41
+ * The id of the last selected element.
42
+ * @type {?string|undefined}
43
+ */
44
+ this.oldElementId = opt_oldElementId;
52
45
 
53
- /**
54
- * Type of this event.
55
- * @type {string}
56
- */
57
- Selected.prototype.type = eventUtils.SELECTED;
46
+ /**
47
+ * The id of the selected element.
48
+ * @type {?string|undefined}
49
+ */
50
+ this.newElementId = opt_newElementId;
58
51
 
59
- /**
60
- * Encode the event as JSON.
61
- * @return {!Object} JSON representation.
62
- */
63
- Selected.prototype.toJson = function() {
64
- const json = Selected.superClass_.toJson.call(this);
65
- json['oldElementId'] = this.oldElementId;
66
- json['newElementId'] = this.newElementId;
67
- return json;
68
- };
52
+ /**
53
+ * Type of this event.
54
+ * @type {string}
55
+ */
56
+ this.type = eventUtils.SELECTED;
57
+ }
69
58
 
70
- /**
71
- * Decode the JSON event.
72
- * @param {!Object} json JSON representation.
73
- */
74
- Selected.prototype.fromJson = function(json) {
75
- Selected.superClass_.fromJson.call(this, json);
76
- this.oldElementId = json['oldElementId'];
77
- this.newElementId = json['newElementId'];
78
- };
59
+ /**
60
+ * Encode the event as JSON.
61
+ * @return {!Object} JSON representation.
62
+ */
63
+ toJson() {
64
+ const json = super.toJson();
65
+ json['oldElementId'] = this.oldElementId;
66
+ json['newElementId'] = this.newElementId;
67
+ return json;
68
+ }
69
+
70
+ /**
71
+ * Decode the JSON event.
72
+ * @param {!Object} json JSON representation.
73
+ */
74
+ fromJson(json) {
75
+ super.fromJson(json);
76
+ this.oldElementId = json['oldElementId'];
77
+ this.newElementId = json['newElementId'];
78
+ }
79
+ }
79
80
 
80
81
  registry.register(registry.Type.EVENT, eventUtils.SELECTED, Selected);
81
82
 
@@ -16,55 +16,56 @@
16
16
  goog.module('Blockly.Events.ThemeChange');
17
17
 
18
18
  const eventUtils = goog.require('Blockly.Events.utils');
19
- const object = goog.require('Blockly.utils.object');
20
19
  const registry = goog.require('Blockly.registry');
21
20
  const {UiBase} = goog.require('Blockly.Events.UiBase');
22
21
 
23
22
 
24
23
  /**
25
24
  * Class for a theme change event.
26
- * @param {string=} opt_themeName The theme name. Undefined for a blank event.
27
- * @param {string=} opt_workspaceId The workspace identifier for this event.
28
- * event. Undefined for a blank event.
29
25
  * @extends {UiBase}
30
- * @constructor
31
26
  * @alias Blockly.Events.ThemeChange
32
27
  */
33
- const ThemeChange = function(opt_themeName, opt_workspaceId) {
34
- ThemeChange.superClass_.constructor.call(this, opt_workspaceId);
35
-
28
+ class ThemeChange extends UiBase {
36
29
  /**
37
- * The theme name.
38
- * @type {string|undefined}
30
+ * @param {string=} opt_themeName The theme name. Undefined for a blank event.
31
+ * @param {string=} opt_workspaceId The workspace identifier for this event.
32
+ * event. Undefined for a blank event.
39
33
  */
40
- this.themeName = opt_themeName;
41
- };
42
- object.inherits(ThemeChange, UiBase);
34
+ constructor(opt_themeName, opt_workspaceId) {
35
+ super(opt_workspaceId);
43
36
 
44
- /**
45
- * Type of this event.
46
- * @type {string}
47
- */
48
- ThemeChange.prototype.type = eventUtils.THEME_CHANGE;
37
+ /**
38
+ * The theme name.
39
+ * @type {string|undefined}
40
+ */
41
+ this.themeName = opt_themeName;
49
42
 
50
- /**
51
- * Encode the event as JSON.
52
- * @return {!Object} JSON representation.
53
- */
54
- ThemeChange.prototype.toJson = function() {
55
- const json = ThemeChange.superClass_.toJson.call(this);
56
- json['themeName'] = this.themeName;
57
- return json;
58
- };
43
+ /**
44
+ * Type of this event.
45
+ * @type {string}
46
+ */
47
+ this.type = eventUtils.THEME_CHANGE;
48
+ }
59
49
 
60
- /**
61
- * Decode the JSON event.
62
- * @param {!Object} json JSON representation.
63
- */
64
- ThemeChange.prototype.fromJson = function(json) {
65
- ThemeChange.superClass_.fromJson.call(this, json);
66
- this.themeName = json['themeName'];
67
- };
50
+ /**
51
+ * Encode the event as JSON.
52
+ * @return {!Object} JSON representation.
53
+ */
54
+ toJson() {
55
+ const json = super.toJson();
56
+ json['themeName'] = this.themeName;
57
+ return json;
58
+ }
59
+
60
+ /**
61
+ * Decode the JSON event.
62
+ * @param {!Object} json JSON representation.
63
+ */
64
+ fromJson(json) {
65
+ super.fromJson(json);
66
+ this.themeName = json['themeName'];
67
+ }
68
+ }
68
69
 
69
70
  registry.register(registry.Type.EVENT, eventUtils.THEME_CHANGE, ThemeChange);
70
71