blockly 9.0.0-beta.0 → 9.0.0-beta.1

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 (608) hide show
  1. package/blockly.min.js +401 -405
  2. package/blockly_compressed.js +398 -402
  3. package/blockly_compressed.js.map +1 -1
  4. package/blocks.d.ts +0 -5
  5. package/blocks_compressed.js +3 -3
  6. package/blocks_compressed.js.map +1 -1
  7. package/closure/goog/base.d.ts +1 -0
  8. package/closure/goog/base_minimal.d.ts +1 -0
  9. package/closure/goog/goog.d.ts +1 -0
  10. package/core/any_aliases.d.ts +1 -0
  11. package/core/block.d.ts +145 -53
  12. package/core/block_animations.d.ts +5 -0
  13. package/core/block_drag_surface.d.ts +18 -5
  14. package/core/block_dragger.d.ts +20 -5
  15. package/core/block_svg.d.ts +89 -21
  16. package/core/blockly.d.ts +29 -8
  17. package/core/blockly_options.d.ts +2 -0
  18. package/core/blocks.d.ts +2 -0
  19. package/core/browser_events.d.ts +16 -7
  20. package/core/bubble.d.ts +42 -12
  21. package/core/bubble_dragger.d.ts +9 -2
  22. package/core/bump_objects.d.ts +6 -2
  23. package/core/clipboard.d.ts +6 -2
  24. package/core/comment.d.ts +13 -3
  25. package/core/common.d.ts +35 -9
  26. package/core/component_manager.d.ts +16 -6
  27. package/core/config.d.ts +1 -0
  28. package/core/connection.d.ts +48 -18
  29. package/core/connection_checker.d.ts +16 -7
  30. package/core/connection_db.d.ts +17 -6
  31. package/core/connection_type.d.ts +2 -0
  32. package/core/constants.d.ts +3 -0
  33. package/core/contextmenu.d.ts +15 -5
  34. package/core/contextmenu_items.d.ts +15 -0
  35. package/core/contextmenu_registry.d.ts +12 -7
  36. package/core/css.d.ts +3 -0
  37. package/core/delete_area.d.ts +5 -1
  38. package/core/dialog.d.ts +14 -7
  39. package/core/drag_target.d.ts +10 -2
  40. package/core/dropdowndiv.d.ts +42 -10
  41. package/core/events/events.d.ts +1 -0
  42. package/core/events/events_abstract.d.ts +10 -3
  43. package/core/events/events_block_base.d.ts +5 -1
  44. package/core/events/events_block_change.d.ts +10 -3
  45. package/core/events/events_block_create.d.ts +6 -1
  46. package/core/events/events_block_delete.d.ts +6 -1
  47. package/core/events/events_block_drag.d.ts +5 -1
  48. package/core/events/events_block_move.d.ts +10 -3
  49. package/core/events/events_bubble_open.d.ts +6 -2
  50. package/core/events/events_click.d.ts +5 -1
  51. package/core/events/events_comment_base.d.ts +6 -1
  52. package/core/events/events_comment_change.d.ts +8 -2
  53. package/core/events/events_comment_create.d.ts +6 -1
  54. package/core/events/events_comment_delete.d.ts +6 -1
  55. package/core/events/events_comment_move.d.ts +9 -2
  56. package/core/events/events_marker_move.d.ts +5 -1
  57. package/core/events/events_selected.d.ts +5 -1
  58. package/core/events/events_theme_change.d.ts +5 -1
  59. package/core/events/events_toolbox_item_select.d.ts +5 -1
  60. package/core/events/events_trashcan_open.d.ts +5 -1
  61. package/core/events/events_ui.d.ts +5 -1
  62. package/core/events/events_ui_base.d.ts +2 -0
  63. package/core/events/events_var_base.d.ts +5 -1
  64. package/core/events/events_var_create.d.ts +6 -1
  65. package/core/events/events_var_delete.d.ts +6 -1
  66. package/core/events/events_var_rename.d.ts +6 -1
  67. package/core/events/events_viewport.d.ts +5 -1
  68. package/core/events/utils.d.ts +50 -7
  69. package/core/events/workspace_events.d.ts +5 -1
  70. package/core/extensions.d.ts +14 -4
  71. package/core/field.d.ts +93 -34
  72. package/core/field_angle.d.ts +14 -3
  73. package/core/field_checkbox.d.ts +20 -7
  74. package/core/field_colour.d.ts +22 -6
  75. package/core/field_dropdown.d.ts +28 -8
  76. package/core/field_image.d.ts +15 -4
  77. package/core/field_label.d.ts +8 -2
  78. package/core/field_label_serializable.d.ts +4 -1
  79. package/core/field_multilineinput.d.ts +21 -6
  80. package/core/field_number.d.ts +22 -6
  81. package/core/field_registry.d.ts +8 -2
  82. package/core/field_textinput.d.ts +28 -8
  83. package/core/field_variable.d.ts +36 -13
  84. package/core/flyout_base.d.ts +70 -24
  85. package/core/flyout_button.d.ts +12 -5
  86. package/core/flyout_horizontal.d.ts +14 -6
  87. package/core/flyout_metrics_manager.d.ts +6 -3
  88. package/core/flyout_vertical.d.ts +14 -6
  89. package/core/generator.d.ts +39 -20
  90. package/core/gesture.d.ts +48 -13
  91. package/core/grid.d.ts +19 -15
  92. package/core/icon.d.ts +12 -3
  93. package/core/inject.d.ts +3 -1
  94. package/core/input.d.ts +25 -10
  95. package/core/input_types.d.ts +2 -0
  96. package/core/insertion_marker_manager.d.ts +27 -9
  97. package/core/interfaces/i_ast_node_location.d.ts +2 -0
  98. package/core/interfaces/i_ast_node_location_svg.d.ts +4 -0
  99. package/core/interfaces/i_ast_node_location_with_block.d.ts +4 -1
  100. package/core/interfaces/i_autohideable.d.ts +3 -0
  101. package/core/interfaces/i_block_dragger.d.ts +7 -1
  102. package/core/interfaces/i_bounded_element.d.ts +5 -1
  103. package/core/interfaces/i_bubble.d.ts +11 -2
  104. package/core/interfaces/i_collapsible_toolbox_item.d.ts +6 -2
  105. package/core/interfaces/i_component.d.ts +2 -0
  106. package/core/interfaces/i_connection_checker.d.ts +14 -6
  107. package/core/interfaces/i_contextmenu.d.ts +2 -0
  108. package/core/interfaces/i_copyable.d.ts +3 -1
  109. package/core/interfaces/i_deletable.d.ts +4 -1
  110. package/core/interfaces/i_delete_area.d.ts +4 -1
  111. package/core/interfaces/i_drag_target.d.ts +10 -2
  112. package/core/interfaces/i_draggable.d.ts +2 -0
  113. package/core/interfaces/i_flyout.d.ts +27 -11
  114. package/core/interfaces/i_keyboard_accessible.d.ts +4 -1
  115. package/core/interfaces/i_metrics_manager.d.ts +24 -12
  116. package/core/interfaces/i_movable.d.ts +4 -1
  117. package/core/interfaces/i_positionable.d.ts +5 -1
  118. package/core/interfaces/i_registrable.d.ts +2 -0
  119. package/core/interfaces/i_registrable_field.d.ts +2 -0
  120. package/core/interfaces/i_selectable.d.ts +2 -0
  121. package/core/interfaces/i_selectable_toolbox_item.d.ts +10 -3
  122. package/core/interfaces/i_serializer.d.ts +6 -1
  123. package/core/interfaces/i_styleable.d.ts +4 -0
  124. package/core/interfaces/i_toolbox.d.ts +17 -6
  125. package/core/interfaces/i_toolbox_item.d.ts +17 -7
  126. package/core/internal_constants.d.ts +6 -0
  127. package/core/keyboard_nav/ast_node.d.ts +55 -28
  128. package/core/keyboard_nav/basic_cursor.d.ts +20 -9
  129. package/core/keyboard_nav/cursor.d.ts +11 -5
  130. package/core/keyboard_nav/marker.d.ts +9 -2
  131. package/core/keyboard_nav/tab_navigate_cursor.d.ts +4 -1
  132. package/core/main.d.ts +1 -0
  133. package/core/marker_manager.d.ts +13 -2
  134. package/core/menu.d.ts +23 -5
  135. package/core/menuitem.d.ts +22 -7
  136. package/core/metrics_manager.d.ts +30 -15
  137. package/core/msg.d.ts +1 -0
  138. package/core/mutator.d.ts +19 -7
  139. package/core/names.d.ts +20 -8
  140. package/core/options.d.ts +12 -6
  141. package/core/positionable_helpers.d.ts +11 -3
  142. package/core/procedures.d.ts +27 -10
  143. package/core/registry.d.ts +19 -8
  144. package/core/rendered_connection.d.ts +28 -7
  145. package/core/renderers/common/block_rendering.d.ts +9 -2
  146. package/core/renderers/common/constants.d.ts +49 -17
  147. package/core/renderers/common/debug.d.ts +5 -1
  148. package/core/renderers/common/debugger.d.ts +12 -1
  149. package/core/renderers/common/drawer.d.ts +12 -0
  150. package/core/renderers/common/i_path_object.d.ts +15 -0
  151. package/core/renderers/common/info.d.ts +25 -8
  152. package/core/renderers/common/marker_svg.d.ts +35 -6
  153. package/core/renderers/common/path_object.d.ts +20 -0
  154. package/core/renderers/common/renderer.d.ts +33 -12
  155. package/core/renderers/geras/constants.d.ts +2 -0
  156. package/core/renderers/geras/drawer.d.ts +2 -0
  157. package/core/renderers/geras/geras.d.ts +3 -2
  158. package/core/renderers/geras/highlight_constants.d.ts +9 -6
  159. package/core/renderers/geras/highlighter.d.ts +12 -1
  160. package/core/renderers/geras/info.d.ts +4 -1
  161. package/core/renderers/geras/measurables/inline_input.d.ts +2 -0
  162. package/core/renderers/geras/measurables/statement_input.d.ts +2 -0
  163. package/core/renderers/geras/path_object.d.ts +4 -0
  164. package/core/renderers/geras/renderer.d.ts +16 -6
  165. package/core/renderers/measurables/base.d.ts +2 -0
  166. package/core/renderers/measurables/bottom_row.d.ts +9 -3
  167. package/core/renderers/measurables/connection.d.ts +2 -0
  168. package/core/renderers/measurables/external_value_input.d.ts +2 -1
  169. package/core/renderers/measurables/field.d.ts +2 -1
  170. package/core/renderers/measurables/hat.d.ts +2 -1
  171. package/core/renderers/measurables/icon.d.ts +3 -1
  172. package/core/renderers/measurables/in_row_spacer.d.ts +2 -1
  173. package/core/renderers/measurables/inline_input.d.ts +2 -1
  174. package/core/renderers/measurables/input_connection.d.ts +2 -0
  175. package/core/renderers/measurables/input_row.d.ts +4 -1
  176. package/core/renderers/measurables/jagged_edge.d.ts +2 -1
  177. package/core/renderers/measurables/next_connection.d.ts +2 -1
  178. package/core/renderers/measurables/output_connection.d.ts +2 -1
  179. package/core/renderers/measurables/previous_connection.d.ts +2 -1
  180. package/core/renderers/measurables/round_corner.d.ts +2 -1
  181. package/core/renderers/measurables/row.d.ts +27 -5
  182. package/core/renderers/measurables/spacer_row.d.ts +2 -1
  183. package/core/renderers/measurables/square_corner.d.ts +2 -1
  184. package/core/renderers/measurables/statement_input.d.ts +2 -1
  185. package/core/renderers/measurables/top_row.d.ts +7 -3
  186. package/core/renderers/measurables/types.d.ts +54 -25
  187. package/core/renderers/minimalist/constants.d.ts +2 -0
  188. package/core/renderers/minimalist/drawer.d.ts +2 -0
  189. package/core/renderers/minimalist/info.d.ts +4 -1
  190. package/core/renderers/minimalist/minimalist.d.ts +2 -1
  191. package/core/renderers/minimalist/renderer.d.ts +8 -3
  192. package/core/renderers/thrasos/info.d.ts +4 -1
  193. package/core/renderers/thrasos/renderer.d.ts +4 -1
  194. package/core/renderers/thrasos/thrasos.d.ts +2 -1
  195. package/core/renderers/zelos/constants.d.ts +11 -3
  196. package/core/renderers/zelos/drawer.d.ts +3 -0
  197. package/core/renderers/zelos/info.d.ts +10 -5
  198. package/core/renderers/zelos/marker_svg.d.ts +5 -0
  199. package/core/renderers/zelos/measurables/bottom_row.d.ts +2 -0
  200. package/core/renderers/zelos/measurables/inputs.d.ts +2 -0
  201. package/core/renderers/zelos/measurables/row_elements.d.ts +2 -0
  202. package/core/renderers/zelos/measurables/top_row.d.ts +2 -0
  203. package/core/renderers/zelos/path_object.d.ts +8 -1
  204. package/core/renderers/zelos/renderer.d.ts +14 -6
  205. package/core/renderers/zelos/zelos.d.ts +3 -2
  206. package/core/scrollbar.d.ts +41 -9
  207. package/core/scrollbar_pair.d.ts +20 -6
  208. package/core/serialization/blocks.d.ts +10 -4
  209. package/core/serialization/exceptions.d.ts +5 -0
  210. package/core/serialization/priorities.d.ts +3 -0
  211. package/core/serialization/registry.d.ts +3 -0
  212. package/core/serialization/variables.d.ts +2 -0
  213. package/core/serialization/workspaces.d.ts +4 -1
  214. package/core/shortcut_items.d.ts +10 -0
  215. package/core/shortcut_registry.d.ts +25 -9
  216. package/core/sprites.d.ts +2 -4
  217. package/core/theme/classic.d.ts +2 -0
  218. package/core/theme/themes.d.ts +1 -0
  219. package/core/theme/zelos.d.ts +2 -0
  220. package/core/theme.d.ts +14 -3
  221. package/core/theme_manager.d.ts +10 -1
  222. package/core/toolbox/category.d.ts +42 -15
  223. package/core/toolbox/collapsible_category.d.ts +10 -3
  224. package/core/toolbox/separator.d.ts +4 -1
  225. package/core/toolbox/toolbox.d.ts +70 -22
  226. package/core/toolbox/toolbox_item.d.ts +17 -7
  227. package/core/tooltip.d.ts +22 -1
  228. package/core/touch.d.ts +18 -6
  229. package/core/touch_gesture.d.ts +16 -2
  230. package/core/trashcan.d.ts +27 -6
  231. package/core/utils/aria.d.ts +4 -0
  232. package/core/utils/array.d.ts +4 -2
  233. package/core/utils/colour.d.ts +24 -13
  234. package/core/utils/coordinate.d.ts +18 -8
  235. package/core/utils/deprecation.d.ts +6 -4
  236. package/core/utils/dom.d.ts +32 -12
  237. package/core/utils/idgenerator.d.ts +13 -3
  238. package/core/utils/keycodes.d.ts +1 -0
  239. package/core/utils/math.d.ts +7 -3
  240. package/core/utils/metrics.d.ts +1 -0
  241. package/core/utils/object.d.ts +7 -2
  242. package/core/utils/parsing.d.ts +9 -4
  243. package/core/utils/rect.d.ts +5 -3
  244. package/core/utils/sentinel.d.ts +2 -0
  245. package/core/utils/size.d.ts +4 -2
  246. package/core/utils/string.d.ts +13 -6
  247. package/core/utils/style.d.ts +14 -33
  248. package/core/utils/svg.d.ts +5 -2
  249. package/core/utils/svg_math.d.ts +15 -7
  250. package/core/utils/svg_paths.d.ts +20 -10
  251. package/core/utils/toolbox.d.ts +26 -5
  252. package/core/utils/useragent.d.ts +1 -12
  253. package/core/utils/xml.d.ts +13 -5
  254. package/core/utils.d.ts +43 -21
  255. package/core/variable_map.d.ts +26 -9
  256. package/core/variable_model.d.ts +5 -2
  257. package/core/variables.d.ts +33 -18
  258. package/core/variables_dynamic.d.ts +25 -5
  259. package/core/warning.d.ts +8 -3
  260. package/core/widgetdiv.d.ts +15 -6
  261. package/core/workspace.d.ts +80 -30
  262. package/core/workspace_audio.d.ts +6 -0
  263. package/core/workspace_comment.d.ts +33 -11
  264. package/core/workspace_comment_svg.d.ts +52 -9
  265. package/core/workspace_drag_surface_svg.d.ts +20 -14
  266. package/core/workspace_dragger.d.ts +6 -0
  267. package/core/workspace_svg.d.ts +174 -62
  268. package/core/xml.d.ts +26 -11
  269. package/core/zoom_controls.d.ts +16 -6
  270. package/core.d.ts +0 -5
  271. package/dart.d.ts +0 -5
  272. package/dart_compressed.js.map +1 -1
  273. package/index.d.ts +2 -6
  274. package/javascript.d.ts +0 -5
  275. package/javascript_compressed.js.map +1 -1
  276. package/lua.d.ts +0 -5
  277. package/lua_compressed.js.map +1 -1
  278. package/package.json +6 -3
  279. package/php.d.ts +0 -5
  280. package/php_compressed.js.map +1 -1
  281. package/python.d.ts +0 -5
  282. package/python_compressed.js.map +1 -1
  283. package/blocks/blocks.js +0 -48
  284. package/blocks/colour.js +0 -121
  285. package/blocks/lists.js +0 -996
  286. package/blocks/logic.js +0 -665
  287. package/blocks/loops.js +0 -375
  288. package/blocks/math.js +0 -594
  289. package/blocks/procedures.js +0 -1196
  290. package/blocks/text.js +0 -1000
  291. package/blocks/variables.js +0 -176
  292. package/blocks/variables_dynamic.js +0 -192
  293. package/core/any_aliases.ts +0 -1
  294. package/core/block.ts +0 -2102
  295. package/core/block_animations.ts +0 -202
  296. package/core/block_drag_surface.ts +0 -237
  297. package/core/block_dragger.ts +0 -447
  298. package/core/block_svg.ts +0 -1758
  299. package/core/blockly.js +0 -890
  300. package/core/blockly.ts +0 -749
  301. package/core/blockly_options.ts +0 -81
  302. package/core/blocks.ts +0 -29
  303. package/core/browser_events.ts +0 -289
  304. package/core/bubble.ts +0 -892
  305. package/core/bubble_dragger.ts +0 -229
  306. package/core/bump_objects.ts +0 -182
  307. package/core/clipboard.ts +0 -91
  308. package/core/comment.ts +0 -398
  309. package/core/common.ts +0 -288
  310. package/core/component_manager.ts +0 -211
  311. package/core/config.ts +0 -80
  312. package/core/connection.ts +0 -692
  313. package/core/connection_checker.ts +0 -301
  314. package/core/connection_db.ts +0 -289
  315. package/core/connection_type.ts +0 -32
  316. package/core/constants.ts +0 -29
  317. package/core/contextmenu.ts +0 -363
  318. package/core/contextmenu_items.ts +0 -576
  319. package/core/contextmenu_registry.ts +0 -179
  320. package/core/css.ts +0 -560
  321. package/core/delete_area.ts +0 -82
  322. package/core/dialog.ts +0 -127
  323. package/core/drag_target.ts +0 -94
  324. package/core/dropdowndiv.ts +0 -683
  325. package/core/events/events.ts +0 -123
  326. package/core/events/events_abstract.ts +0 -112
  327. package/core/events/events_block_base.ts +0 -65
  328. package/core/events/events_block_change.ts +0 -176
  329. package/core/events/events_block_create.ts +0 -114
  330. package/core/events/events_block_delete.ts +0 -126
  331. package/core/events/events_block_drag.ts +0 -82
  332. package/core/events/events_block_move.ts +0 -206
  333. package/core/events/events_bubble_open.ts +0 -82
  334. package/core/events/events_click.ts +0 -84
  335. package/core/events/events_comment_base.ts +0 -107
  336. package/core/events/events_comment_change.ts +0 -108
  337. package/core/events/events_comment_create.ts +0 -82
  338. package/core/events/events_comment_delete.ts +0 -77
  339. package/core/events/events_comment_move.ts +0 -154
  340. package/core/events/events_marker_move.ts +0 -99
  341. package/core/events/events_selected.ts +0 -78
  342. package/core/events/events_theme_change.ts +0 -67
  343. package/core/events/events_toolbox_item_select.ts +0 -79
  344. package/core/events/events_trashcan_open.ts +0 -68
  345. package/core/events/events_ui.ts +0 -89
  346. package/core/events/events_ui_base.ts +0 -54
  347. package/core/events/events_var_base.ts +0 -65
  348. package/core/events/events_var_create.ts +0 -88
  349. package/core/events/events_var_delete.ts +0 -88
  350. package/core/events/events_var_rename.ts +0 -89
  351. package/core/events/events_viewport.ts +0 -100
  352. package/core/events/utils.ts +0 -529
  353. package/core/events/workspace_events.ts +0 -86
  354. package/core/extensions.ts +0 -504
  355. package/core/field.ts +0 -1206
  356. package/core/field_angle.ts +0 -563
  357. package/core/field_checkbox.ts +0 -243
  358. package/core/field_colour.ts +0 -632
  359. package/core/field_dropdown.ts +0 -773
  360. package/core/field_image.ts +0 -282
  361. package/core/field_label.ts +0 -152
  362. package/core/field_label_serializable.ts +0 -76
  363. package/core/field_multilineinput.ts +0 -466
  364. package/core/field_number.ts +0 -327
  365. package/core/field_registry.ts +0 -87
  366. package/core/field_textinput.ts +0 -591
  367. package/core/field_variable.ts +0 -545
  368. package/core/flyout_base.ts +0 -1165
  369. package/core/flyout_button.ts +0 -292
  370. package/core/flyout_horizontal.ts +0 -381
  371. package/core/flyout_metrics_manager.ts +0 -94
  372. package/core/flyout_vertical.ts +0 -384
  373. package/core/generator.ts +0 -539
  374. package/core/gesture.ts +0 -946
  375. package/core/grid.ts +0 -192
  376. package/core/icon.ts +0 -189
  377. package/core/inject.ts +0 -390
  378. package/core/input.ts +0 -309
  379. package/core/input_types.ts +0 -32
  380. package/core/insertion_marker_manager.ts +0 -788
  381. package/core/interfaces/i_ast_node_location.ts +0 -23
  382. package/core/interfaces/i_ast_node_location_svg.ts +0 -37
  383. package/core/interfaces/i_ast_node_location_with_block.ts +0 -38
  384. package/core/interfaces/i_autohideable.ts +0 -34
  385. package/core/interfaces/i_block_dragger.ts +0 -67
  386. package/core/interfaces/i_bounded_element.ts +0 -42
  387. package/core/interfaces/i_bubble.ts +0 -88
  388. package/core/interfaces/i_collapsible_toolbox_item.ts +0 -47
  389. package/core/interfaces/i_component.ts +0 -32
  390. package/core/interfaces/i_connection_checker.ts +0 -102
  391. package/core/interfaces/i_contextmenu.ts +0 -26
  392. package/core/interfaces/i_copyable.ts +0 -40
  393. package/core/interfaces/i_deletable.ts +0 -29
  394. package/core/interfaces/i_delete_area.ts +0 -46
  395. package/core/interfaces/i_drag_target.ts +0 -84
  396. package/core/interfaces/i_draggable.ts +0 -25
  397. package/core/interfaces/i_flyout.ts +0 -186
  398. package/core/interfaces/i_keyboard_accessible.ts +0 -35
  399. package/core/interfaces/i_metrics_manager.ts +0 -151
  400. package/core/interfaces/i_movable.ts +0 -29
  401. package/core/interfaces/i_positionable.ts +0 -50
  402. package/core/interfaces/i_registrable.ts +0 -25
  403. package/core/interfaces/i_registrable_field.ts +0 -31
  404. package/core/interfaces/i_selectable.ts +0 -34
  405. package/core/interfaces/i_selectable_toolbox_item.ts +0 -64
  406. package/core/interfaces/i_serializer.ts +0 -65
  407. package/core/interfaces/i_styleable.ts +0 -35
  408. package/core/interfaces/i_toolbox.ts +0 -127
  409. package/core/interfaces/i_toolbox_item.ts +0 -84
  410. package/core/internal_constants.ts +0 -67
  411. package/core/keyboard_nav/ast_node.ts +0 -717
  412. package/core/keyboard_nav/basic_cursor.ts +0 -214
  413. package/core/keyboard_nav/cursor.ts +0 -134
  414. package/core/keyboard_nav/marker.ts +0 -115
  415. package/core/keyboard_nav/tab_navigate_cursor.ts +0 -48
  416. package/core/main.js +0 -303
  417. package/core/marker_manager.ts +0 -181
  418. package/core/menu.ts +0 -449
  419. package/core/menuitem.ts +0 -240
  420. package/core/metrics_manager.ts +0 -456
  421. package/core/msg.ts +0 -20
  422. package/core/mutator.ts +0 -560
  423. package/core/names.ts +0 -267
  424. package/core/options.ts +0 -365
  425. package/core/positionable_helpers.ts +0 -181
  426. package/core/procedures.ts +0 -443
  427. package/core/registry.ts +0 -339
  428. package/core/rendered_connection.ts +0 -568
  429. package/core/renderers/common/block_rendering.ts +0 -164
  430. package/core/renderers/common/constants.ts +0 -1124
  431. package/core/renderers/common/debug.ts +0 -61
  432. package/core/renderers/common/debugger.ts +0 -433
  433. package/core/renderers/common/drawer.ts +0 -450
  434. package/core/renderers/common/i_path_object.ts +0 -161
  435. package/core/renderers/common/info.ts +0 -718
  436. package/core/renderers/common/marker_svg.ts +0 -680
  437. package/core/renderers/common/path_object.ts +0 -272
  438. package/core/renderers/common/renderer.ts +0 -271
  439. package/core/renderers/geras/constants.ts +0 -61
  440. package/core/renderers/geras/drawer.ts +0 -176
  441. package/core/renderers/geras/geras.ts +0 -37
  442. package/core/renderers/geras/highlight_constants.ts +0 -337
  443. package/core/renderers/geras/highlighter.ts +0 -306
  444. package/core/renderers/geras/info.ts +0 -450
  445. package/core/renderers/geras/measurables/inline_input.ts +0 -51
  446. package/core/renderers/geras/measurables/statement_input.ts +0 -50
  447. package/core/renderers/geras/path_object.ts +0 -138
  448. package/core/renderers/geras/renderer.ts +0 -126
  449. package/core/renderers/measurables/base.ts +0 -53
  450. package/core/renderers/measurables/bottom_row.ts +0 -120
  451. package/core/renderers/measurables/connection.ts +0 -52
  452. package/core/renderers/measurables/external_value_input.ts +0 -65
  453. package/core/renderers/measurables/field.ts +0 -63
  454. package/core/renderers/measurables/hat.ts +0 -48
  455. package/core/renderers/measurables/icon.ts +0 -54
  456. package/core/renderers/measurables/in_row_spacer.ts +0 -44
  457. package/core/renderers/measurables/inline_input.ts +0 -76
  458. package/core/renderers/measurables/input_connection.ts +0 -66
  459. package/core/renderers/measurables/input_row.ts +0 -82
  460. package/core/renderers/measurables/jagged_edge.ts +0 -43
  461. package/core/renderers/measurables/next_connection.ts +0 -47
  462. package/core/renderers/measurables/output_connection.ts +0 -56
  463. package/core/renderers/measurables/previous_connection.ts +0 -47
  464. package/core/renderers/measurables/round_corner.ts +0 -49
  465. package/core/renderers/measurables/row.ts +0 -225
  466. package/core/renderers/measurables/spacer_row.ts +0 -55
  467. package/core/renderers/measurables/square_corner.ts +0 -47
  468. package/core/renderers/measurables/statement_input.ts +0 -55
  469. package/core/renderers/measurables/top_row.ts +0 -122
  470. package/core/renderers/measurables/types.ts +0 -332
  471. package/core/renderers/minimalist/constants.ts +0 -32
  472. package/core/renderers/minimalist/drawer.ts +0 -38
  473. package/core/renderers/minimalist/info.ts +0 -52
  474. package/core/renderers/minimalist/minimalist.ts +0 -22
  475. package/core/renderers/minimalist/renderer.ts +0 -71
  476. package/core/renderers/thrasos/info.ts +0 -338
  477. package/core/renderers/thrasos/renderer.ts +0 -48
  478. package/core/renderers/thrasos/thrasos.ts +0 -20
  479. package/core/renderers/zelos/constants.ts +0 -858
  480. package/core/renderers/zelos/drawer.ts +0 -228
  481. package/core/renderers/zelos/info.ts +0 -593
  482. package/core/renderers/zelos/marker_svg.ts +0 -151
  483. package/core/renderers/zelos/measurables/bottom_row.ts +0 -53
  484. package/core/renderers/zelos/measurables/inputs.ts +0 -56
  485. package/core/renderers/zelos/measurables/row_elements.ts +0 -45
  486. package/core/renderers/zelos/measurables/top_row.ts +0 -58
  487. package/core/renderers/zelos/path_object.ts +0 -215
  488. package/core/renderers/zelos/renderer.ts +0 -142
  489. package/core/renderers/zelos/zelos.ts +0 -39
  490. package/core/scrollbar.ts +0 -870
  491. package/core/scrollbar_pair.ts +0 -321
  492. package/core/serialization/blocks.ts +0 -706
  493. package/core/serialization/exceptions.ts +0 -98
  494. package/core/serialization/priorities.ts +0 -32
  495. package/core/serialization/registry.ts +0 -43
  496. package/core/serialization/variables.ts +0 -96
  497. package/core/serialization/workspaces.ts +0 -106
  498. package/core/shortcut_items.ts +0 -266
  499. package/core/shortcut_registry.ts +0 -355
  500. package/core/sprites.ts +0 -29
  501. package/core/theme/classic.ts +0 -54
  502. package/core/theme/themes.ts +0 -22
  503. package/core/theme/zelos.ts +0 -91
  504. package/core/theme.ts +0 -221
  505. package/core/theme_manager.ts +0 -186
  506. package/core/toolbox/category.ts +0 -679
  507. package/core/toolbox/collapsible_category.ts +0 -273
  508. package/core/toolbox/separator.ts +0 -105
  509. package/core/toolbox/toolbox.ts +0 -1044
  510. package/core/toolbox/toolbox_item.ts +0 -147
  511. package/core/tooltip.ts +0 -463
  512. package/core/touch.ts +0 -306
  513. package/core/touch_gesture.ts +0 -295
  514. package/core/trashcan.ts +0 -671
  515. package/core/utils/aria.ts +0 -160
  516. package/core/utils/array.ts +0 -32
  517. package/core/utils/colour.ts +0 -276
  518. package/core/utils/coordinate.ts +0 -124
  519. package/core/utils/deprecation.ts +0 -41
  520. package/core/utils/dom.ts +0 -408
  521. package/core/utils/idgenerator.ts +0 -80
  522. package/core/utils/keycodes.ts +0 -169
  523. package/core/utils/math.ts +0 -61
  524. package/core/utils/metrics.ts +0 -97
  525. package/core/utils/object.ts +0 -95
  526. package/core/utils/parsing.ts +0 -261
  527. package/core/utils/rect.ts +0 -62
  528. package/core/utils/sentinel.ts +0 -23
  529. package/core/utils/size.ts +0 -51
  530. package/core/utils/string.ts +0 -308
  531. package/core/utils/style.ts +0 -306
  532. package/core/utils/svg.ts +0 -88
  533. package/core/utils/svg_math.ts +0 -269
  534. package/core/utils/svg_paths.ts +0 -140
  535. package/core/utils/toolbox.ts +0 -433
  536. package/core/utils/useragent.ts +0 -135
  537. package/core/utils/xml.ts +0 -97
  538. package/core/utils.ts +0 -428
  539. package/core/variable_map.ts +0 -392
  540. package/core/variable_model.ts +0 -82
  541. package/core/variables.ts +0 -596
  542. package/core/variables_dynamic.ts +0 -133
  543. package/core/warning.ts +0 -161
  544. package/core/widgetdiv.ts +0 -257
  545. package/core/workspace.ts +0 -801
  546. package/core/workspace_audio.ts +0 -156
  547. package/core/workspace_comment.ts +0 -398
  548. package/core/workspace_comment_svg.ts +0 -1127
  549. package/core/workspace_drag_surface_svg.ts +0 -187
  550. package/core/workspace_dragger.ts +0 -104
  551. package/core/workspace_svg.ts +0 -2655
  552. package/core/xml.ts +0 -1023
  553. package/core/zoom_controls.ts +0 -441
  554. package/generators/dart/all.js +0 -27
  555. package/generators/dart/colour.js +0 -105
  556. package/generators/dart/lists.js +0 -431
  557. package/generators/dart/logic.js +0 -123
  558. package/generators/dart/loops.js +0 -161
  559. package/generators/dart/math.js +0 -446
  560. package/generators/dart/procedures.js +0 -105
  561. package/generators/dart/text.js +0 -338
  562. package/generators/dart/variables.js +0 -32
  563. package/generators/dart/variables_dynamic.js +0 -21
  564. package/generators/dart.js +0 -303
  565. package/generators/javascript/all.js +0 -27
  566. package/generators/javascript/colour.js +0 -85
  567. package/generators/javascript/lists.js +0 -405
  568. package/generators/javascript/logic.js +0 -127
  569. package/generators/javascript/loops.js +0 -180
  570. package/generators/javascript/math.js +0 -401
  571. package/generators/javascript/procedures.js +0 -110
  572. package/generators/javascript/text.js +0 -371
  573. package/generators/javascript/variables.js +0 -32
  574. package/generators/javascript/variables_dynamic.js +0 -21
  575. package/generators/javascript.js +0 -322
  576. package/generators/lua/all.js +0 -27
  577. package/generators/lua/colour.js +0 -71
  578. package/generators/lua/lists.js +0 -348
  579. package/generators/lua/logic.js +0 -112
  580. package/generators/lua/loops.js +0 -168
  581. package/generators/lua/math.js +0 -406
  582. package/generators/lua/procedures.js +0 -106
  583. package/generators/lua/text.js +0 -327
  584. package/generators/lua/variables.js +0 -31
  585. package/generators/lua/variables_dynamic.js +0 -21
  586. package/generators/lua.js +0 -206
  587. package/generators/php/all.js +0 -27
  588. package/generators/php/colour.js +0 -81
  589. package/generators/php/lists.js +0 -481
  590. package/generators/php/logic.js +0 -119
  591. package/generators/php/loops.js +0 -161
  592. package/generators/php/math.js +0 -349
  593. package/generators/php/procedures.js +0 -125
  594. package/generators/php/text.js +0 -255
  595. package/generators/php/variables.js +0 -32
  596. package/generators/php/variables_dynamic.js +0 -21
  597. package/generators/php.js +0 -303
  598. package/generators/python/all.js +0 -27
  599. package/generators/python/colour.js +0 -67
  600. package/generators/python/lists.js +0 -346
  601. package/generators/python/logic.js +0 -120
  602. package/generators/python/loops.js +0 -206
  603. package/generators/python/math.js +0 -373
  604. package/generators/python/procedures.js +0 -129
  605. package/generators/python/text.js +0 -291
  606. package/generators/python/variables.js +0 -32
  607. package/generators/python/variables_dynamic.js +0 -21
  608. package/generators/python.js +0 -333
@@ -1,706 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2021 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- /**
8
- * @fileoverview Handles serializing blocks to plain JavaScript objects only
9
- * containing state.
10
- */
11
-
12
- /**
13
- * Handles serializing blocks to plain JavaScript objects only containing state.
14
- * @namespace Blockly.serialization.blocks
15
- */
16
- import * as goog from '../../closure/goog/goog.js';
17
- goog.declareModuleId('Blockly.serialization.blocks');
18
-
19
- import type {Block} from '../block.js';
20
- import type {BlockSvg} from '../block_svg.js';
21
- import type {Connection} from '../connection.js';
22
- import * as eventUtils from '../events/utils.js';
23
- import {inputTypes} from '../input_types.js';
24
- import type {ISerializer} from '../interfaces/i_serializer.js';
25
- import {Size} from '../utils/size.js';
26
- import type {Workspace} from '../workspace.js';
27
- import * as Xml from '../xml.js';
28
-
29
- import {BadConnectionCheck, MissingBlockType, MissingConnection, RealChildOfShadow} from './exceptions.js';
30
- import * as priorities from './priorities.js';
31
- import * as serializationRegistry from './registry.js';
32
-
33
-
34
- // TODO(#5160): Remove this once lint is fixed.
35
- /* eslint-disable no-use-before-define */
36
-
37
- /**
38
- * Represents the state of a connection.
39
- * @alias Blockly.serialization.blocks.ConnectionState
40
- */
41
- export interface ConnectionState {
42
- shadow: State|undefined;
43
- block: State|undefined;
44
- }
45
-
46
- /**
47
- * Represents the state of a given block.
48
- * @alias Blockly.serialization.blocks.State
49
- */
50
- export interface State {
51
- type: string;
52
- id?: string;
53
- x?: number;
54
- y?: number;
55
- collapsed?: boolean;
56
- enabled?: boolean;
57
- inline?: boolean;
58
- data?: string;
59
- extraState?: AnyDuringMigration;
60
- icons?: {[key: string]: AnyDuringMigration};
61
- fields?: {[key: string]: AnyDuringMigration};
62
- inputs?: {[key: string]: ConnectionState};
63
- next?: ConnectionState;
64
- }
65
-
66
- /**
67
- * Returns the state of the given block as a plain JavaScript object.
68
- * @param block The block to serialize.
69
- * @param param1 addCoordinates: If true, the coordinates of the block are added
70
- * to the serialized state. False by default. addinputBlocks: If true,
71
- * children of the block which are connected to inputs will be serialized.
72
- * True by default. addNextBlocks: If true, children of the block which are
73
- * connected to the block's next connection (if it exists) will be
74
- * serialized. True by default. doFullSerialization: If true, fields that
75
- * normally just save a reference to some external state (eg variables) will
76
- * instead serialize all of the info about that state. This supports
77
- * deserializing the block into a workspace where that state doesn't yet
78
- * exist. True by default.
79
- * @return The serialized state of the block, or null if the block could not be
80
- * serialied (eg it was an insertion marker).
81
- * @alias Blockly.serialization.blocks.save
82
- */
83
- export function save(block: Block, {
84
- addCoordinates = false,
85
- addInputBlocks = true,
86
- addNextBlocks = true,
87
- doFullSerialization = true
88
- }: {
89
- addCoordinates?: boolean,
90
- addInputBlocks?: boolean,
91
- addNextBlocks?: boolean,
92
- doFullSerialization?: boolean
93
- } = {}): State|null {
94
- if (block.isInsertionMarker()) {
95
- return null;
96
- }
97
-
98
- const state = {
99
- 'type': block.type,
100
- 'id': block.id,
101
- };
102
-
103
- if (addCoordinates) {
104
- // AnyDuringMigration because: Argument of type '{ type: string; id:
105
- // string; }' is not assignable to parameter of type 'State'.
106
- saveCoords(block, state as AnyDuringMigration);
107
- }
108
- // AnyDuringMigration because: Argument of type '{ type: string; id: string;
109
- // }' is not assignable to parameter of type 'State'.
110
- saveAttributes(block, state as AnyDuringMigration);
111
- // AnyDuringMigration because: Argument of type '{ type: string; id: string;
112
- // }' is not assignable to parameter of type 'State'.
113
- saveExtraState(block, state as AnyDuringMigration);
114
- // AnyDuringMigration because: Argument of type '{ type: string; id: string;
115
- // }' is not assignable to parameter of type 'State'.
116
- saveIcons(block, state as AnyDuringMigration);
117
- // AnyDuringMigration because: Argument of type '{ type: string; id: string;
118
- // }' is not assignable to parameter of type 'State'.
119
- saveFields(block, state as AnyDuringMigration, doFullSerialization);
120
- if (addInputBlocks) {
121
- // AnyDuringMigration because: Argument of type '{ type: string; id:
122
- // string; }' is not assignable to parameter of type 'State'.
123
- saveInputBlocks(block, state as AnyDuringMigration, doFullSerialization);
124
- }
125
- if (addNextBlocks) {
126
- // AnyDuringMigration because: Argument of type '{ type: string; id:
127
- // string; }' is not assignable to parameter of type 'State'.
128
- saveNextBlocks(block, state as AnyDuringMigration, doFullSerialization);
129
- }
130
-
131
- // AnyDuringMigration because: Type '{ type: string; id: string; }' is not
132
- // assignable to type 'State'.
133
- return state as AnyDuringMigration;
134
- }
135
-
136
- /**
137
- * Adds attributes to the given state object based on the state of the block.
138
- * Eg collapsed, disabled, inline, etc.
139
- * @param block The block to base the attributes on.
140
- * @param state The state object to append to.
141
- */
142
- function saveAttributes(block: Block, state: State) {
143
- if (block.isCollapsed()) {
144
- state['collapsed'] = true;
145
- }
146
- if (!block.isEnabled()) {
147
- state['enabled'] = false;
148
- }
149
- if (block.inputsInline !== undefined &&
150
- block.inputsInline !== block.inputsInlineDefault) {
151
- state['inline'] = block.inputsInline;
152
- }
153
- // Data is a nullable string, so we don't need to worry about falsy values.
154
- if (block.data) {
155
- state['data'] = block.data;
156
- }
157
- }
158
-
159
- /**
160
- * Adds the coordinates of the given block to the given state object.
161
- * @param block The block to base the coordinates on.
162
- * @param state The state object to append to.
163
- */
164
- function saveCoords(block: Block, state: State) {
165
- const workspace = block.workspace;
166
- const xy = block.getRelativeToSurfaceXY();
167
- state['x'] = Math.round(workspace.RTL ? workspace.getWidth() - xy.x : xy.x);
168
- state['y'] = Math.round(xy.y);
169
- }
170
- /**
171
- * Adds any extra state the block may provide to the given state object.
172
- * @param block The block to serialize the extra state of.
173
- * @param state The state object to append to.
174
- */
175
- function saveExtraState(block: Block, state: State) {
176
- if (block.saveExtraState) {
177
- const extraState = block.saveExtraState();
178
- if (extraState !== null) {
179
- state['extraState'] = extraState;
180
- }
181
- } else if (block.mutationToDom) {
182
- const extraState = block.mutationToDom();
183
- if (extraState !== null) {
184
- state['extraState'] =
185
- Xml.domToText(extraState)
186
- .replace(
187
- ' xmlns="https://developers.google.com/blockly/xml"', '');
188
- }
189
- }
190
- }
191
-
192
- /**
193
- * Adds the state of all of the icons on the block to the given state object.
194
- * @param block The block to serialize the icon state of.
195
- * @param state The state object to append to.
196
- */
197
- function saveIcons(block: Block, state: State) {
198
- // TODO(#2105): Remove this logic and put it in the icon.
199
- if (block.getCommentText()) {
200
- state['icons'] = {
201
- 'comment': {
202
- 'text': block.getCommentText(),
203
- 'pinned': block.commentModel.pinned,
204
- 'height': Math.round(block.commentModel.size.height),
205
- 'width': Math.round(block.commentModel.size.width),
206
- },
207
- };
208
- }
209
- }
210
-
211
- /**
212
- * Adds the state of all of the fields on the block to the given state object.
213
- * @param block The block to serialize the field state of.
214
- * @param state The state object to append to.
215
- * @param doFullSerialization Whether or not to serialize the full state of the
216
- * field (rather than possibly saving a reference to some state).
217
- */
218
- function saveFields(block: Block, state: State, doFullSerialization: boolean) {
219
- const fields = Object.create(null);
220
- for (let i = 0; i < block.inputList.length; i++) {
221
- const input = block.inputList[i];
222
- for (let j = 0; j < input.fieldRow.length; j++) {
223
- const field = input.fieldRow[j];
224
- if (field.isSerializable()) {
225
- fields[field.name!] = field.saveState(doFullSerialization);
226
- }
227
- }
228
- }
229
- if (Object.keys(fields).length) {
230
- state['fields'] = fields;
231
- }
232
- }
233
-
234
- /**
235
- * Adds the state of all of the child blocks of the given block (which are
236
- * connected to inputs) to the given state object.
237
- * @param block The block to serialize the input blocks of.
238
- * @param state The state object to append to.
239
- * @param doFullSerialization Whether or not to do full serialization.
240
- */
241
- function saveInputBlocks(
242
- block: Block, state: State, doFullSerialization: boolean) {
243
- const inputs = Object.create(null);
244
- for (let i = 0; i < block.inputList.length; i++) {
245
- const input = block.inputList[i];
246
- if (input.type === inputTypes.DUMMY) {
247
- continue;
248
- }
249
- const connectionState =
250
- saveConnection(input.connection as Connection, doFullSerialization);
251
- if (connectionState) {
252
- inputs[input.name] = connectionState;
253
- }
254
- }
255
-
256
- if (Object.keys(inputs).length) {
257
- state['inputs'] = inputs;
258
- }
259
- }
260
-
261
- /**
262
- * Adds the state of all of the next blocks of the given block to the given
263
- * state object.
264
- * @param block The block to serialize the next blocks of.
265
- * @param state The state object to append to.
266
- * @param doFullSerialization Whether or not to do full serialization.
267
- */
268
- function saveNextBlocks(
269
- block: Block, state: State, doFullSerialization: boolean) {
270
- if (!block.nextConnection) {
271
- return;
272
- }
273
- const connectionState =
274
- saveConnection(block.nextConnection, doFullSerialization);
275
- if (connectionState) {
276
- state['next'] = connectionState;
277
- }
278
- }
279
-
280
- /**
281
- * Returns the state of the given connection (ie the state of any connected
282
- * shadow or real blocks).
283
- * @param connection The connection to serialize the connected blocks of.
284
- * @return An object containing the state of any connected shadow block, or any
285
- * connected real block.
286
- * @param doFullSerialization Whether or not to do full serialization.
287
- */
288
- function saveConnection(connection: Connection, doFullSerialization: boolean):
289
- ConnectionState|null {
290
- const shadow = connection.getShadowState(true);
291
- const child = connection.targetBlock();
292
- if (!shadow && !child) {
293
- return null;
294
- }
295
- const state = Object.create(null);
296
- if (shadow) {
297
- state['shadow'] = shadow;
298
- }
299
- if (child && !child.isShadow()) {
300
- state['block'] = save(child, {doFullSerialization});
301
- }
302
- return state;
303
- }
304
-
305
- /**
306
- * Loads the block represented by the given state into the given workspace.
307
- * @param state The state of a block to deserialize into the workspace.
308
- * @param workspace The workspace to add the block to.
309
- * @param param1 recordUndo: If true, events triggered by this function will be
310
- * undo-able by the user. False by default.
311
- * @return The block that was just loaded.
312
- * @alias Blockly.serialization.blocks.append
313
- */
314
- export function append(
315
- state: State, workspace: Workspace,
316
- {recordUndo = false}: {recordUndo?: boolean} = {}): Block {
317
- return appendInternal(state, workspace, {recordUndo});
318
- }
319
-
320
- /**
321
- * Loads the block represented by the given state into the given workspace.
322
- * This is defined internally so that the extra parameters don't clutter our
323
- * external API.
324
- * But it is exported so that other places within Blockly can call it directly
325
- * with the extra parameters.
326
- * @param state The state of a block to deserialize into the workspace.
327
- * @param workspace The workspace to add the block to.
328
- * @param param1 parentConnection: If provided, the system will attempt to
329
- * connect the block to this connection after it is created. Undefined by
330
- * default. isShadow: If true, the block will be set to a shadow block after
331
- * it is created. False by default. recordUndo: If true, events triggered by
332
- * this function will be undo-able by the user. False by default.
333
- * @return The block that was just appended.
334
- * @alias Blockly.serialization.blocks.appendInternal
335
- * @internal
336
- */
337
- export function appendInternal(
338
- state: State, workspace: Workspace,
339
- {parentConnection = undefined, isShadow = false, recordUndo = false}: {
340
- parentConnection?: Connection,
341
- isShadow?: boolean,
342
- recordUndo?: boolean
343
- } = {}): Block {
344
- const prevRecordUndo = eventUtils.getRecordUndo();
345
- eventUtils.setRecordUndo(recordUndo);
346
- const existingGroup = eventUtils.getGroup();
347
- if (!existingGroup) {
348
- eventUtils.setGroup(true);
349
- }
350
- eventUtils.disable();
351
-
352
- const block = appendPrivate(state, workspace, {parentConnection, isShadow});
353
-
354
- eventUtils.enable();
355
- eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))!(block));
356
- eventUtils.setGroup(existingGroup);
357
- eventUtils.setRecordUndo(prevRecordUndo);
358
-
359
- // Adding connections to the connection db is expensive. This defers that
360
- // operation to decrease load time.
361
- if (workspace.rendered) {
362
- const blockSvg = block as BlockSvg;
363
- setTimeout(() => {
364
- if (!blockSvg.disposed) {
365
- blockSvg.setConnectionTracking(true);
366
- }
367
- }, 1);
368
- }
369
-
370
- return block;
371
- }
372
-
373
- /**
374
- * Loads the block represented by the given state into the given workspace.
375
- * This is defined privately so that it can be called recursively without firing
376
- * eroneous events. Events (and other things we only want to occur on the top
377
- * block) are handled by appendInternal.
378
- * @param state The state of a block to deserialize into the workspace.
379
- * @param workspace The workspace to add the block to.
380
- * @param param1 parentConnection: If provided, the system will attempt to
381
- * connect the block to this connection after it is created. Undefined by
382
- * default. isShadow: The block will be set to a shadow block after it is
383
- * created. False by default.
384
- * @return The block that was just appended.
385
- */
386
- function appendPrivate(
387
- state: State, workspace: Workspace,
388
- {parentConnection = undefined, isShadow = false}:
389
- {parentConnection?: Connection, isShadow?: boolean} = {}): Block {
390
- if (!state['type']) {
391
- throw new MissingBlockType(state);
392
- }
393
-
394
- const block = workspace.newBlock(state['type'], state['id']);
395
- block.setShadow(isShadow);
396
- loadCoords(block, state);
397
- loadAttributes(block, state);
398
- loadExtraState(block, state);
399
- tryToConnectParent(parentConnection, block, state);
400
- loadIcons(block, state);
401
- loadFields(block, state);
402
- loadInputBlocks(block, state);
403
- loadNextBlocks(block, state);
404
- initBlock(block, workspace.rendered);
405
-
406
- return block;
407
- }
408
-
409
- /**
410
- * Applies any coordinate information available on the state object to the
411
- * block.
412
- * @param block The block to set the position of.
413
- * @param state The state object to reference.
414
- */
415
- function loadCoords(block: Block, state: State) {
416
- let x = state['x'] === undefined ? 0 : state['x'];
417
- const y = state['y'] === undefined ? 0 : state['y'];
418
-
419
- const workspace = block.workspace;
420
- x = workspace.RTL ? workspace.getWidth() - x : x;
421
-
422
- block.moveBy(x, y);
423
- }
424
-
425
- /**
426
- * Applies any attribute information available on the state object to the block.
427
- * @param block The block to set the attributes of.
428
- * @param state The state object to reference.
429
- */
430
- function loadAttributes(block: Block, state: State) {
431
- if (state['collapsed']) {
432
- block.setCollapsed(true);
433
- }
434
- if (state['enabled'] === false) {
435
- block.setEnabled(false);
436
- }
437
- if (state['inline'] !== undefined) {
438
- block.setInputsInline(state['inline']);
439
- }
440
- if (state['data'] !== undefined) {
441
- block.data = state['data'];
442
- }
443
- }
444
-
445
- /**
446
- * Applies any extra state information available on the state object to the
447
- * block.
448
- * @param block The block to set the extra state of.
449
- * @param state The state object to reference.
450
- */
451
- function loadExtraState(block: Block, state: State) {
452
- if (!state['extraState']) {
453
- return;
454
- }
455
- if (block.loadExtraState) {
456
- block.loadExtraState(state['extraState']);
457
- } else if (block.domToMutation) {
458
- block.domToMutation(Xml.textToDom(state['extraState']));
459
- }
460
- }
461
-
462
- /**
463
- * Attempts to connect the block to the parent connection, if it exists.
464
- * @param parentConnection The parent connection to try to connect the block to.
465
- * @param child The block to try to connect to the parent.
466
- * @param state The state which defines the given block
467
- */
468
- function tryToConnectParent(
469
- parentConnection: Connection|undefined, child: Block, state: State) {
470
- if (!parentConnection) {
471
- return;
472
- }
473
-
474
- if (parentConnection.getSourceBlock().isShadow() && !child.isShadow()) {
475
- throw new RealChildOfShadow(state);
476
- }
477
-
478
- let connected = false;
479
- let childConnection;
480
- if (parentConnection.type === inputTypes.VALUE) {
481
- childConnection = child.outputConnection;
482
- if (!childConnection) {
483
- throw new MissingConnection('output', child, state);
484
- }
485
- connected = parentConnection.connect(childConnection);
486
- } else { // Statement type.
487
- childConnection = child.previousConnection;
488
- if (!childConnection) {
489
- throw new MissingConnection('previous', child, state);
490
- }
491
- connected = parentConnection.connect(childConnection);
492
- }
493
-
494
- if (!connected) {
495
- const checker = child.workspace.connectionChecker;
496
- throw new BadConnectionCheck(
497
- checker.getErrorMessage(
498
- checker.canConnectWithReason(
499
- childConnection, parentConnection, false),
500
- childConnection, parentConnection),
501
- parentConnection.type === inputTypes.VALUE ? 'output connection' :
502
- 'previous connection',
503
- child, state);
504
- }
505
- }
506
-
507
- /**
508
- * Applies icon state to the icons on the block, based on the given state
509
- * object.
510
- * @param block The block to set the icon state of.
511
- * @param state The state object to reference.
512
- */
513
- function loadIcons(block: Block, state: State) {
514
- if (!state['icons']) {
515
- return;
516
- }
517
- // TODO(#2105): Remove this logic and put it in the icon.
518
- const comment = state['icons']['comment'];
519
- if (comment) {
520
- block.setCommentText(comment['text']);
521
- // Load if saved. (Cleaned unnecessary attributes when in the trashcan.)
522
- if ('pinned' in comment) {
523
- block.commentModel.pinned = comment['pinned'];
524
- }
525
- if ('width' in comment && 'height' in comment) {
526
- block.commentModel.size = new Size(comment['width'], comment['height']);
527
- }
528
- if (comment['pinned'] && block.rendered && !block.isInFlyout) {
529
- // Give the block a chance to be positioned and rendered before showing.
530
- const blockSvg = block as BlockSvg;
531
- setTimeout(() => blockSvg.getCommentIcon()!.setVisible(true), 1);
532
- }
533
- }
534
- }
535
-
536
- /**
537
- * Applies any field information available on the state object to the block.
538
- * @param block The block to set the field state of.
539
- * @param state The state object to reference.
540
- */
541
- function loadFields(block: Block, state: State) {
542
- if (!state['fields']) {
543
- return;
544
- }
545
- const keys = Object.keys(state['fields']);
546
- for (let i = 0; i < keys.length; i++) {
547
- const fieldName = keys[i];
548
- const fieldState = state['fields'][fieldName];
549
- const field = block.getField(fieldName);
550
- if (!field) {
551
- console.warn(
552
- `Ignoring non-existant field ${fieldName} in block ${block.type}`);
553
- continue;
554
- }
555
- field.loadState(fieldState);
556
- }
557
- }
558
-
559
- /**
560
- * Creates any child blocks (attached to inputs) defined by the given state
561
- * and attaches them to the given block.
562
- * @param block The block to attach input blocks to.
563
- * @param state The state object to reference.
564
- */
565
- function loadInputBlocks(block: Block, state: State) {
566
- if (!state['inputs']) {
567
- return;
568
- }
569
- const keys = Object.keys(state['inputs']);
570
- for (let i = 0; i < keys.length; i++) {
571
- const inputName = keys[i];
572
- const input = block.getInput(inputName);
573
- if (!input || !input.connection) {
574
- throw new MissingConnection(inputName, block, state);
575
- }
576
- loadConnection(input.connection, state['inputs'][inputName]);
577
- }
578
- }
579
-
580
- /**
581
- * Creates any next blocks defined by the given state and attaches them to the
582
- * given block.
583
- * @param block The block to attach next blocks to.
584
- * @param state The state object to reference.
585
- */
586
- function loadNextBlocks(block: Block, state: State) {
587
- if (!state['next']) {
588
- return;
589
- }
590
- if (!block.nextConnection) {
591
- throw new MissingConnection('next', block, state);
592
- }
593
- loadConnection(block.nextConnection, state['next']);
594
- }
595
- /**
596
- * Applies the state defined by connectionState to the given connection, ie
597
- * assigns shadows and attaches child blocks.
598
- * @param connection The connection to deserialize the connected blocks of.
599
- * @param connectionState The object containing the state of any connected
600
- * shadow block, or any connected real block.
601
- */
602
- function loadConnection(
603
- connection: Connection, connectionState: ConnectionState) {
604
- if (connectionState['shadow']) {
605
- connection.setShadowState(connectionState['shadow']);
606
- }
607
- if (connectionState['block']) {
608
- appendPrivate(
609
- connectionState['block'], connection.getSourceBlock().workspace,
610
- {parentConnection: connection});
611
- }
612
- }
613
-
614
- // TODO(#5146): Remove this from the serialization system.
615
- /**
616
- * Initializes the give block, eg init the model, inits the svg, renders, etc.
617
- * @param block The block to initialize.
618
- * @param rendered Whether the block is a rendered or headless block.
619
- */
620
- function initBlock(block: Block, rendered: boolean) {
621
- if (rendered) {
622
- const blockSvg = block as BlockSvg;
623
- // Adding connections to the connection db is expensive. This defers that
624
- // operation to decrease load time.
625
- blockSvg.setConnectionTracking(false);
626
-
627
- blockSvg.initSvg();
628
- blockSvg.render(false);
629
- // fixes #6076 JSO deserialization doesn't
630
- // set .iconXY_ property so here it will be set
631
- const icons = blockSvg.getIcons();
632
- for (let i = 0; i < icons.length; i++) {
633
- icons[i].computeIconLocation();
634
- }
635
- } else {
636
- block.initModel();
637
- }
638
- }
639
-
640
- // Alias to disambiguate saving within the serializer.
641
- const saveBlock = save;
642
-
643
- /**
644
- * Serializer for saving and loading block state.
645
- * @alias Blockly.serialization.blocks.BlockSerializer
646
- */
647
- class BlockSerializer implements ISerializer {
648
- priority: number;
649
-
650
- /* eslint-disable-next-line require-jsdoc */
651
- constructor() {
652
- /** The priority for deserializing blocks. */
653
- this.priority = priorities.BLOCKS;
654
- }
655
-
656
- /**
657
- * Serializes the blocks of the given workspace.
658
- * @param workspace The workspace to save the blocks of.
659
- * @return The state of the workspace's blocks, or null if there are no
660
- * blocks.
661
- */
662
- save(workspace: Workspace): {languageVersion: number, blocks: State[]}|null {
663
- const blockStates = [];
664
- for (const block of workspace.getTopBlocks(false)) {
665
- const state =
666
- saveBlock(block, {addCoordinates: true, doFullSerialization: false});
667
- if (state) {
668
- blockStates.push(state);
669
- }
670
- }
671
- if (blockStates.length) {
672
- return {
673
- 'languageVersion': 0, // Currently unused.
674
- 'blocks': blockStates,
675
- };
676
- }
677
- return null;
678
- }
679
-
680
- /**
681
- * Deserializes the blocks defined by the given state into the given
682
- * workspace.
683
- * @param state The state of the blocks to deserialize.
684
- * @param workspace The workspace to deserialize into.
685
- */
686
- load(
687
- state: {languageVersion: number, blocks: State[]}, workspace: Workspace) {
688
- const blockStates = state['blocks'];
689
- for (const state of blockStates) {
690
- append(state, workspace, {recordUndo: eventUtils.getRecordUndo()});
691
- }
692
- }
693
-
694
- /**
695
- * Disposes of any blocks that exist on the workspace.
696
- * @param workspace The workspace to clear the blocks of.
697
- */
698
- clear(workspace: Workspace) {
699
- // Cannot use workspace.clear() because that also removes variables.
700
- for (const block of workspace.getTopBlocks(false)) {
701
- block.dispose(false);
702
- }
703
- }
704
- }
705
-
706
- serializationRegistry.register('blocks', new BlockSerializer());