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
package/core/xml.js CHANGED
@@ -21,6 +21,8 @@ const utilsXml = goog.require('Blockly.utils.xml');
21
21
  /* eslint-disable-next-line no-unused-vars */
22
22
  const {Block} = goog.requireType('Blockly.Block');
23
23
  /* eslint-disable-next-line no-unused-vars */
24
+ const {BlockSvg} = goog.requireType('Blockly.BlockSvg');
25
+ /* eslint-disable-next-line no-unused-vars */
24
26
  const {Connection} = goog.requireType('Blockly.Connection');
25
27
  /* eslint-disable-next-line no-unused-vars */
26
28
  const {Field} = goog.requireType('Blockly.Field');
@@ -396,7 +398,7 @@ exports.textToDom = textToDom;
396
398
  * Clear the given workspace then decode an XML DOM and
397
399
  * create blocks on the workspace.
398
400
  * @param {!Element} xml XML DOM.
399
- * @param {!Workspace} workspace The workspace.
401
+ * @param {!WorkspaceSvg} workspace The workspace.
400
402
  * @return {!Array<string>} An array containing new block IDs.
401
403
  * @alias Blockly.Xml.clearWorkspaceAndLoadFromXml
402
404
  */
@@ -443,8 +445,9 @@ const domToWorkspace = function(xml, workspace) {
443
445
  }
444
446
 
445
447
  // Disable workspace resizes as an optimization.
446
- if (workspace.setResizesEnabled) {
447
- workspace.setResizesEnabled(false);
448
+ // Assume it is rendered so we can check.
449
+ if (/** @type {!WorkspaceSvg} */ (workspace).setResizesEnabled) {
450
+ /** @type {!WorkspaceSvg} */ (workspace).setResizesEnabled(false);
448
451
  }
449
452
  let variablesFirst = true;
450
453
  try {
@@ -479,7 +482,7 @@ const domToWorkspace = function(xml, workspace) {
479
482
  'Missing require for Blockly.WorkspaceCommentSvg, ' +
480
483
  'ignoring workspace comment.');
481
484
  } else {
482
- WorkspaceCommentSvg.fromXml(
485
+ WorkspaceCommentSvg.fromXmlRendered(
483
486
  xmlChildElement,
484
487
  /** @type {!WorkspaceSvg} */ (workspace), width);
485
488
  }
@@ -513,8 +516,8 @@ const domToWorkspace = function(xml, workspace) {
513
516
  dom.stopTextWidthCache();
514
517
  }
515
518
  // Re-enable workspace resizing.
516
- if (workspace.setResizesEnabled) {
517
- workspace.setResizesEnabled(true);
519
+ if (/** @type {!WorkspaceSvg} */ (workspace).setResizesEnabled) {
520
+ /** @type {!WorkspaceSvg} */ (workspace).setResizesEnabled(true);
518
521
  }
519
522
  eventUtils.fire(new (eventUtils.get(eventUtils.FINISHED_LOADING))(workspace));
520
523
  return newBlockIds;
@@ -530,12 +533,14 @@ exports.domToWorkspace = domToWorkspace;
530
533
  * @alias Blockly.Xml.appendDomToWorkspace
531
534
  */
532
535
  const appendDomToWorkspace = function(xml, workspace) {
533
- let bbox; // Bounding box of the current blocks.
534
- // First check if we have a workspaceSvg, otherwise the blocks have no shape
536
+ // First check if we have a WorkspaceSvg, otherwise the blocks have no shape
535
537
  // and the position does not matter.
536
- if (Object.prototype.hasOwnProperty.call(workspace, 'scale')) {
537
- bbox = workspace.getBlocksBoundingBox();
538
+ // Assume it is rendered so we can check.
539
+ if (!/** @type {!WorkspaceSvg} */ (workspace).getBlocksBoundingBox) {
540
+ return domToWorkspace(xml, workspace);
538
541
  }
542
+
543
+ const bbox = /** @type {!WorkspaceSvg} */ (workspace).getBlocksBoundingBox();
539
544
  // Load the new blocks into the workspace and get the IDs of the new blocks.
540
545
  const newBlockIds = domToWorkspace(xml, workspace);
541
546
  if (bbox && bbox.top !== bbox.bottom) { // check if any previous block
@@ -599,10 +604,10 @@ const domToBlock = function(xmlBlock, workspace) {
599
604
  try {
600
605
  topBlock = domToBlockHeadless(xmlBlock, workspace);
601
606
  // Generate list of all blocks.
602
- const blocks = topBlock.getDescendants(false);
603
607
  if (workspace.rendered) {
604
- // Wait to track connections to speed up assembly.
605
- topBlock.setConnectionTracking(false);
608
+ const topBlockSvg = /** @type {!BlockSvg} */ (topBlock);
609
+ const blocks = topBlock.getDescendants(false);
610
+ topBlockSvg.setConnectionTracking(false);
606
611
  // Render each block.
607
612
  for (let i = blocks.length - 1; i >= 0; i--) {
608
613
  blocks[i].initSvg();
@@ -613,15 +618,16 @@ const domToBlock = function(xmlBlock, workspace) {
613
618
  // Populating the connection database may be deferred until after the
614
619
  // blocks have rendered.
615
620
  setTimeout(function() {
616
- if (!topBlock.disposed) {
617
- topBlock.setConnectionTracking(true);
621
+ if (!topBlockSvg.disposed) {
622
+ topBlockSvg.setConnectionTracking(true);
618
623
  }
619
624
  }, 1);
620
- topBlock.updateDisabled();
625
+ topBlockSvg.updateDisabled();
621
626
  // Allow the scrollbars to resize and move based on the new contents.
622
627
  // TODO(@picklesrus): #387. Remove when domToBlock avoids resizing.
623
- workspace.resizeContents();
628
+ /** @type {!WorkspaceSvg} */ (workspace).resizeContents();
624
629
  } else {
630
+ const blocks = topBlock.getDescendants(false);
625
631
  for (let i = blocks.length - 1; i >= 0; i--) {
626
632
  blocks[i].initModel();
627
633
  }
@@ -778,8 +784,9 @@ const applyCommentTagNodes = function(xmlChildren, block) {
778
784
  }
779
785
 
780
786
  if (pinned && block.getCommentIcon && !block.isInFlyout) {
787
+ const blockSvg = /** @type {BlockSvg} */ (block);
781
788
  setTimeout(function() {
782
- block.getCommentIcon().setVisible(true);
789
+ blockSvg.getCommentIcon().setVisible(true);
783
790
  }, 1);
784
791
  }
785
792
  }
@@ -953,8 +960,11 @@ const domToBlockHeadless = function(
953
960
  applyNextTagNodes(xmlChildNameMap.next, workspace, block);
954
961
 
955
962
  if (shouldCallInitSvg) {
956
- // InitSvg needs to be called after variable fields are loaded.
957
- block.initSvg();
963
+ // This shouldn't even be called here
964
+ // (ref: https://github.com/google/blockly/pull/4296#issuecomment-884226021
965
+ // But the XML serializer/deserializer is iceboxed so I'm not going to fix
966
+ // it.
967
+ (/** @type {!BlockSvg} */ (block)).initSvg();
958
968
  }
959
969
 
960
970
  const inline = xmlBlock.getAttribute('inline');