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
@@ -33,155 +33,162 @@ const {Svg} = goog.require('Blockly.utils.Svg');
33
33
  * Blocks are moved into this SVG during a drag, improving performance.
34
34
  * The entire SVG is translated using CSS transforms instead of SVG so the
35
35
  * blocks are never repainted during drag improving performance.
36
- * @param {!Element} container Containing element.
37
- * @constructor
38
36
  * @alias Blockly.WorkspaceDragSurfaceSvg
39
37
  */
40
- const WorkspaceDragSurfaceSvg = function(container) {
41
- this.container_ = container;
42
- this.createDom();
43
- };
44
-
45
- /**
46
- * The SVG drag surface. Set once by WorkspaceDragSurfaceSvg.createDom.
47
- * @type {SVGElement}
48
- * @private
49
- */
50
- WorkspaceDragSurfaceSvg.prototype.SVG_ = null;
51
-
52
- /**
53
- * Containing HTML element; parent of the workspace and the drag surface.
54
- * @type {Element}
55
- * @private
56
- */
57
- WorkspaceDragSurfaceSvg.prototype.container_ = null;
58
-
59
- /**
60
- * Create the drag surface and inject it into the container.
61
- */
62
- WorkspaceDragSurfaceSvg.prototype.createDom = function() {
63
- if (this.SVG_) {
64
- return; // Already created.
38
+ class WorkspaceDragSurfaceSvg {
39
+ /**
40
+ * @param {!Element} container Containing element.
41
+ */
42
+ constructor(container) {
43
+ /**
44
+ * The SVG drag surface. Set once by WorkspaceDragSurfaceSvg.createDom.
45
+ * @type {SVGElement}
46
+ * @private
47
+ */
48
+ this.SVG_ = null;
49
+
50
+ /**
51
+ * Containing HTML element; parent of the workspace and the drag surface.
52
+ * @type {Element}
53
+ * @private
54
+ */
55
+ this.container_ = container;
56
+
57
+ /**
58
+ * The element to insert the block canvas and bubble canvas after when it
59
+ * goes back in the DOM at the end of a drag.
60
+ * @type {Element}
61
+ * @private
62
+ */
63
+ this.previousSibling_ = null;
64
+
65
+ this.createDom();
65
66
  }
66
-
67
67
  /**
68
- * Dom structure when the workspace is being dragged. If there is no drag in
69
- * progress, the SVG is empty and display: none.
70
- * <svg class="blocklyWsDragSurface" style=transform:translate3d(...)>
71
- * <g class="blocklyBlockCanvas"></g>
72
- * <g class="blocklyBubbleCanvas">/g>
73
- * </svg>
68
+ * Create the drag surface and inject it into the container.
74
69
  */
75
- this.SVG_ = dom.createSvgElement(
76
- Svg.SVG, {
77
- 'xmlns': dom.SVG_NS,
78
- 'xmlns:html': dom.HTML_NS,
79
- 'xmlns:xlink': dom.XLINK_NS,
80
- 'version': '1.1',
81
- 'class': 'blocklyWsDragSurface blocklyOverflowVisible',
82
- },
83
- null);
84
- this.container_.appendChild(this.SVG_);
85
- };
86
-
87
- /**
88
- * Translate the entire drag surface during a drag.
89
- * We translate the drag surface instead of the blocks inside the surface
90
- * so that the browser avoids repainting the SVG.
91
- * Because of this, the drag coordinates must be adjusted by scale.
92
- * @param {number} x X translation for the entire surface
93
- * @param {number} y Y translation for the entire surface
94
- * @package
95
- */
96
- WorkspaceDragSurfaceSvg.prototype.translateSurface = function(x, y) {
97
- // This is a work-around to prevent a the blocks from rendering
98
- // fuzzy while they are being moved on the drag surface.
99
- const fixedX = x.toFixed(0);
100
- const fixedY = y.toFixed(0);
101
-
102
- this.SVG_.style.display = 'block';
103
- dom.setCssTransform(
104
- this.SVG_, 'translate3d(' + fixedX + 'px, ' + fixedY + 'px, 0)');
105
- };
106
-
107
- /**
108
- * Reports the surface translation in scaled workspace coordinates.
109
- * Use this when finishing a drag to return blocks to the correct position.
110
- * @return {!Coordinate} Current translation of the surface
111
- * @package
112
- */
113
- WorkspaceDragSurfaceSvg.prototype.getSurfaceTranslation = function() {
114
- return svgMath.getRelativeXY(/** @type {!SVGElement} */ (this.SVG_));
115
- };
116
-
117
- /**
118
- * Move the blockCanvas and bubbleCanvas out of the surface SVG and on to
119
- * newSurface.
120
- * @param {SVGElement} newSurface The element to put the drag surface contents
121
- * into.
122
- * @package
123
- */
124
- WorkspaceDragSurfaceSvg.prototype.clearAndHide = function(newSurface) {
125
- if (!newSurface) {
126
- throw Error(
127
- 'Couldn\'t clear and hide the drag surface: missing new surface.');
70
+ createDom() {
71
+ if (this.SVG_) {
72
+ return; // Already created.
73
+ }
74
+
75
+ /**
76
+ * Dom structure when the workspace is being dragged. If there is no drag in
77
+ * progress, the SVG is empty and display: none.
78
+ * <svg class="blocklyWsDragSurface" style=transform:translate3d(...)>
79
+ * <g class="blocklyBlockCanvas"></g>
80
+ * <g class="blocklyBubbleCanvas">/g>
81
+ * </svg>
82
+ */
83
+ this.SVG_ = dom.createSvgElement(
84
+ Svg.SVG, {
85
+ 'xmlns': dom.SVG_NS,
86
+ 'xmlns:html': dom.HTML_NS,
87
+ 'xmlns:xlink': dom.XLINK_NS,
88
+ 'version': '1.1',
89
+ 'class': 'blocklyWsDragSurface blocklyOverflowVisible',
90
+ },
91
+ null);
92
+ this.container_.appendChild(this.SVG_);
128
93
  }
129
- const blockCanvas = /** @type {!Element} */ (this.SVG_.childNodes[0]);
130
- const bubbleCanvas = /** @type {!Element} */ (this.SVG_.childNodes[1]);
131
- if (!blockCanvas || !bubbleCanvas ||
132
- !dom.hasClass(blockCanvas, 'blocklyBlockCanvas') ||
133
- !dom.hasClass(bubbleCanvas, 'blocklyBubbleCanvas')) {
134
- throw Error(
135
- 'Couldn\'t clear and hide the drag surface. A node was missing.');
94
+ /**
95
+ * Translate the entire drag surface during a drag.
96
+ * We translate the drag surface instead of the blocks inside the surface
97
+ * so that the browser avoids repainting the SVG.
98
+ * Because of this, the drag coordinates must be adjusted by scale.
99
+ * @param {number} x X translation for the entire surface
100
+ * @param {number} y Y translation for the entire surface
101
+ * @package
102
+ */
103
+ translateSurface(x, y) {
104
+ // This is a work-around to prevent a the blocks from rendering
105
+ // fuzzy while they are being moved on the drag surface.
106
+ const fixedX = x.toFixed(0);
107
+ const fixedY = y.toFixed(0);
108
+
109
+ this.SVG_.style.display = 'block';
110
+ dom.setCssTransform(
111
+ this.SVG_, 'translate3d(' + fixedX + 'px, ' + fixedY + 'px, 0)');
136
112
  }
137
-
138
- // If there is a previous sibling, put the blockCanvas back right afterwards,
139
- // otherwise insert it as the first child node in newSurface.
140
- if (this.previousSibling_ !== null) {
141
- dom.insertAfter(blockCanvas, this.previousSibling_);
142
- } else {
143
- newSurface.insertBefore(blockCanvas, newSurface.firstChild);
113
+ /**
114
+ * Reports the surface translation in scaled workspace coordinates.
115
+ * Use this when finishing a drag to return blocks to the correct position.
116
+ * @return {!Coordinate} Current translation of the surface
117
+ * @package
118
+ */
119
+ getSurfaceTranslation() {
120
+ return svgMath.getRelativeXY(/** @type {!SVGElement} */ (this.SVG_));
144
121
  }
145
-
146
- // Reattach the bubble canvas after the blockCanvas.
147
- dom.insertAfter(bubbleCanvas, blockCanvas);
148
- // Hide the drag surface.
149
- this.SVG_.style.display = 'none';
150
- if (this.SVG_.childNodes.length) {
151
- throw Error('Drag surface was not cleared.');
122
+ /**
123
+ * Move the blockCanvas and bubbleCanvas out of the surface SVG and on to
124
+ * newSurface.
125
+ * @param {SVGElement} newSurface The element to put the drag surface contents
126
+ * into.
127
+ * @package
128
+ */
129
+ clearAndHide(newSurface) {
130
+ if (!newSurface) {
131
+ throw Error(
132
+ 'Couldn\'t clear and hide the drag surface: missing new surface.');
133
+ }
134
+ const blockCanvas = /** @type {!Element} */ (this.SVG_.childNodes[0]);
135
+ const bubbleCanvas = /** @type {!Element} */ (this.SVG_.childNodes[1]);
136
+ if (!blockCanvas || !bubbleCanvas ||
137
+ !dom.hasClass(blockCanvas, 'blocklyBlockCanvas') ||
138
+ !dom.hasClass(bubbleCanvas, 'blocklyBubbleCanvas')) {
139
+ throw Error(
140
+ 'Couldn\'t clear and hide the drag surface. A node was missing.');
141
+ }
142
+
143
+ // If there is a previous sibling, put the blockCanvas back right
144
+ // afterwards, otherwise insert it as the first child node in newSurface.
145
+ if (this.previousSibling_ !== null) {
146
+ dom.insertAfter(blockCanvas, this.previousSibling_);
147
+ } else {
148
+ newSurface.insertBefore(blockCanvas, newSurface.firstChild);
149
+ }
150
+
151
+ // Reattach the bubble canvas after the blockCanvas.
152
+ dom.insertAfter(bubbleCanvas, blockCanvas);
153
+ // Hide the drag surface.
154
+ this.SVG_.style.display = 'none';
155
+ if (this.SVG_.childNodes.length) {
156
+ throw Error('Drag surface was not cleared.');
157
+ }
158
+ dom.setCssTransform(this.SVG_, '');
159
+ this.previousSibling_ = null;
152
160
  }
153
- dom.setCssTransform(this.SVG_, '');
154
- this.previousSibling_ = null;
155
- };
156
-
157
- /**
158
- * Set the SVG to have the block canvas and bubble canvas in it and then
159
- * show the surface.
160
- * @param {!SVGElement} blockCanvas The block canvas <g> element from the
161
- * workspace.
162
- * @param {!SVGElement} bubbleCanvas The <g> element that contains the bubbles.
163
- * @param {Element} previousSibling The element to insert the block canvas and
164
- bubble canvas after when it goes back in the DOM at the end of a drag.
165
- * @param {number} width The width of the workspace SVG element.
166
- * @param {number} height The height of the workspace SVG element.
167
- * @param {number} scale The scale of the workspace being dragged.
168
- * @package
169
- */
170
- WorkspaceDragSurfaceSvg.prototype.setContentsAndShow = function(
171
- blockCanvas, bubbleCanvas, previousSibling, width, height, scale) {
172
- if (this.SVG_.childNodes.length) {
173
- throw Error('Already dragging a block.');
161
+ /**
162
+ * Set the SVG to have the block canvas and bubble canvas in it and then
163
+ * show the surface.
164
+ * @param {!SVGElement} blockCanvas The block canvas <g> element from the
165
+ * workspace.
166
+ * @param {!SVGElement} bubbleCanvas The <g> element that contains the
167
+ bubbles.
168
+ * @param {Element} previousSibling The element to insert the block canvas and
169
+ bubble canvas after when it goes back in the DOM at the end of a drag.
170
+ * @param {number} width The width of the workspace SVG element.
171
+ * @param {number} height The height of the workspace SVG element.
172
+ * @param {number} scale The scale of the workspace being dragged.
173
+ * @package
174
+ */
175
+ setContentsAndShow(
176
+ blockCanvas, bubbleCanvas, previousSibling, width, height, scale) {
177
+ if (this.SVG_.childNodes.length) {
178
+ throw Error('Already dragging a block.');
179
+ }
180
+ this.previousSibling_ = previousSibling;
181
+ // Make sure the blocks and bubble canvas are scaled appropriately.
182
+ blockCanvas.setAttribute(
183
+ 'transform', 'translate(0, 0) scale(' + scale + ')');
184
+ bubbleCanvas.setAttribute(
185
+ 'transform', 'translate(0, 0) scale(' + scale + ')');
186
+ this.SVG_.setAttribute('width', width);
187
+ this.SVG_.setAttribute('height', height);
188
+ this.SVG_.appendChild(blockCanvas);
189
+ this.SVG_.appendChild(bubbleCanvas);
190
+ this.SVG_.style.display = 'block';
174
191
  }
175
- this.previousSibling_ = previousSibling;
176
- // Make sure the blocks and bubble canvas are scaled appropriately.
177
- blockCanvas.setAttribute('transform', 'translate(0, 0) scale(' + scale + ')');
178
- bubbleCanvas.setAttribute(
179
- 'transform', 'translate(0, 0) scale(' + scale + ')');
180
- this.SVG_.setAttribute('width', width);
181
- this.SVG_.setAttribute('height', height);
182
- this.SVG_.appendChild(blockCanvas);
183
- this.SVG_.appendChild(bubbleCanvas);
184
- this.SVG_.style.display = 'block';
185
- };
192
+ }
186
193
 
187
194
  exports.WorkspaceDragSurfaceSvg = WorkspaceDragSurfaceSvg;
@@ -27,90 +27,89 @@ const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
27
27
  * Note that the workspace itself manages whether or not it has a drag surface
28
28
  * and how to do translations based on that. This simply passes the right
29
29
  * commands based on events.
30
- * @param {!WorkspaceSvg} workspace The workspace to drag.
31
- * @constructor
32
30
  * @alias Blockly.WorkspaceDragger
33
31
  */
34
- const WorkspaceDragger = function(workspace) {
32
+ class WorkspaceDragger {
35
33
  /**
36
- * @type {!WorkspaceSvg}
37
- * @private
34
+ * @param {!WorkspaceSvg} workspace The workspace to drag.
38
35
  */
39
- this.workspace_ = workspace;
36
+ constructor(workspace) {
37
+ /**
38
+ * @type {!WorkspaceSvg}
39
+ * @private
40
+ */
41
+ this.workspace_ = workspace;
40
42
 
43
+ /**
44
+ * Whether horizontal scroll is enabled.
45
+ * @type {boolean}
46
+ * @private
47
+ */
48
+ this.horizontalScrollEnabled_ = this.workspace_.isMovableHorizontally();
49
+
50
+ /**
51
+ * Whether vertical scroll is enabled.
52
+ * @type {boolean}
53
+ * @private
54
+ */
55
+ this.verticalScrollEnabled_ = this.workspace_.isMovableVertically();
56
+
57
+ /**
58
+ * The scroll position of the workspace at the beginning of the drag.
59
+ * Coordinate system: pixel coordinates.
60
+ * @type {!Coordinate}
61
+ * @protected
62
+ */
63
+ this.startScrollXY_ = new Coordinate(workspace.scrollX, workspace.scrollY);
64
+ }
41
65
  /**
42
- * Whether horizontal scroll is enabled.
43
- * @type {boolean}
44
- * @private
66
+ * Sever all links from this object.
67
+ * @package
68
+ * @suppress {checkTypes}
45
69
  */
46
- this.horizontalScrollEnabled_ = this.workspace_.isMovableHorizontally();
47
-
70
+ dispose() {
71
+ this.workspace_ = null;
72
+ }
48
73
  /**
49
- * Whether vertical scroll is enabled.
50
- * @type {boolean}
51
- * @private
74
+ * Start dragging the workspace.
75
+ * @package
52
76
  */
53
- this.verticalScrollEnabled_ = this.workspace_.isMovableVertically();
54
-
77
+ startDrag() {
78
+ if (common.getSelected()) {
79
+ common.getSelected().unselect();
80
+ }
81
+ this.workspace_.setupDragSurface();
82
+ }
55
83
  /**
56
- * The scroll position of the workspace at the beginning of the drag.
57
- * Coordinate system: pixel coordinates.
58
- * @type {!Coordinate}
59
- * @protected
84
+ * Finish dragging the workspace and put everything back where it belongs.
85
+ * @param {!Coordinate} currentDragDeltaXY How far the pointer has
86
+ * moved from the position at the start of the drag, in pixel coordinates.
87
+ * @package
60
88
  */
61
- this.startScrollXY_ = new Coordinate(workspace.scrollX, workspace.scrollY);
62
- };
63
-
64
- /**
65
- * Sever all links from this object.
66
- * @package
67
- * @suppress {checkTypes}
68
- */
69
- WorkspaceDragger.prototype.dispose = function() {
70
- this.workspace_ = null;
71
- };
72
-
73
- /**
74
- * Start dragging the workspace.
75
- * @package
76
- */
77
- WorkspaceDragger.prototype.startDrag = function() {
78
- if (common.getSelected()) {
79
- common.getSelected().unselect();
89
+ endDrag(currentDragDeltaXY) {
90
+ // Make sure everything is up to date.
91
+ this.drag(currentDragDeltaXY);
92
+ this.workspace_.resetDragSurface();
80
93
  }
81
- this.workspace_.setupDragSurface();
82
- };
83
-
84
- /**
85
- * Finish dragging the workspace and put everything back where it belongs.
86
- * @param {!Coordinate} currentDragDeltaXY How far the pointer has
87
- * moved from the position at the start of the drag, in pixel coordinates.
88
- * @package
89
- */
90
- WorkspaceDragger.prototype.endDrag = function(currentDragDeltaXY) {
91
- // Make sure everything is up to date.
92
- this.drag(currentDragDeltaXY);
93
- this.workspace_.resetDragSurface();
94
- };
95
-
96
- /**
97
- * Move the workspace based on the most recent mouse movements.
98
- * @param {!Coordinate} currentDragDeltaXY How far the pointer has
99
- * moved from the position at the start of the drag, in pixel coordinates.
100
- * @package
101
- */
102
- WorkspaceDragger.prototype.drag = function(currentDragDeltaXY) {
103
- const newXY = Coordinate.sum(this.startScrollXY_, currentDragDeltaXY);
94
+ /**
95
+ * Move the workspace based on the most recent mouse movements.
96
+ * @param {!Coordinate} currentDragDeltaXY How far the pointer has
97
+ * moved from the position at the start of the drag, in pixel coordinates.
98
+ * @package
99
+ */
100
+ drag(currentDragDeltaXY) {
101
+ const newXY = Coordinate.sum(this.startScrollXY_, currentDragDeltaXY);
104
102
 
105
- if (this.horizontalScrollEnabled_ && this.verticalScrollEnabled_) {
106
- this.workspace_.scroll(newXY.x, newXY.y);
107
- } else if (this.horizontalScrollEnabled_) {
108
- this.workspace_.scroll(newXY.x, this.workspace_.scrollY);
109
- } else if (this.verticalScrollEnabled_) {
110
- this.workspace_.scroll(this.workspace_.scrollX, newXY.y);
111
- } else {
112
- throw new TypeError('Invalid state.');
103
+ if (this.horizontalScrollEnabled_ && this.verticalScrollEnabled_) {
104
+ this.workspace_.scroll(newXY.x, newXY.y);
105
+ } else if (this.horizontalScrollEnabled_) {
106
+ this.workspace_.scroll(newXY.x, this.workspace_.scrollY);
107
+ } else if (this.verticalScrollEnabled_) {
108
+ this.workspace_.scroll(this.workspace_.scrollX, newXY.y);
109
+ } else {
110
+ throw new TypeError('Invalid state.');
111
+ }
113
112
  }
114
- };
113
+ }
115
114
 
116
115
  exports.WorkspaceDragger = WorkspaceDragger;