blockly 9.0.0-beta.0 → 9.0.0-beta.2

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 (736) hide show
  1. package/blockly.min.js +830 -810
  2. package/blockly_compressed.js +821 -801
  3. package/blockly_compressed.js.map +1 -1
  4. package/blocks.d.ts +0 -5
  5. package/blocks_compressed.js +9 -9
  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 +156 -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 +92 -24
  16. package/core/blockly.d.ts +31 -10
  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 +51 -24
  42. package/core/events/events_abstract.d.ts +18 -7
  43. package/core/events/events_block_base.d.ts +13 -7
  44. package/core/events/events_block_change.d.ts +24 -11
  45. package/core/events/events_block_create.d.ts +18 -7
  46. package/core/events/events_block_delete.d.ts +20 -8
  47. package/core/events/events_block_drag.d.ts +14 -4
  48. package/core/events/events_block_move.d.ts +25 -12
  49. package/core/events/events_bubble_open.d.ts +21 -6
  50. package/core/events/events_click.d.ts +20 -6
  51. package/core/events/events_comment_base.d.ts +13 -6
  52. package/core/events/events_comment_change.d.ts +17 -7
  53. package/core/events/events_comment_create.d.ts +13 -5
  54. package/core/events/events_comment_delete.d.ts +4 -11
  55. package/core/events/events_comment_move.d.ts +19 -8
  56. package/core/events/events_marker_move.d.ts +16 -5
  57. package/core/events/events_selected.d.ts +14 -5
  58. package/core/events/events_theme_change.d.ts +11 -3
  59. package/core/events/events_toolbox_item_select.d.ts +14 -5
  60. package/core/events/events_trashcan_open.d.ts +11 -3
  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 +13 -7
  64. package/core/events/events_var_create.d.ts +15 -6
  65. package/core/events/events_var_delete.d.ts +15 -6
  66. package/core/events/events_var_rename.d.ts +15 -6
  67. package/core/events/events_viewport.d.ts +14 -3
  68. package/core/events/utils.d.ts +50 -7
  69. package/core/events/workspace_events.d.ts +11 -6
  70. package/core/extensions.d.ts +14 -4
  71. package/core/field.d.ts +93 -36
  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 +56 -22
  91. package/core/grid.d.ts +20 -16
  92. package/core/icon.d.ts +18 -5
  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 +3 -1
  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 +25 -6
  135. package/core/menuitem.d.ts +22 -7
  136. package/core/metrics_manager.d.ts +30 -15
  137. package/core/msg.d.ts +15 -0
  138. package/core/mutator.d.ts +20 -8
  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 +29 -7
  145. package/core/renderers/common/block_rendering.d.ts +9 -2
  146. package/core/renderers/common/constants.d.ts +57 -18
  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 +16 -3
  150. package/core/renderers/common/i_path_object.d.ts +37 -16
  151. package/core/renderers/common/info.d.ts +28 -11
  152. package/core/renderers/common/marker_svg.d.ts +42 -11
  153. package/core/renderers/common/path_object.d.ts +23 -3
  154. package/core/renderers/common/renderer.d.ts +33 -12
  155. package/core/renderers/geras/constants.d.ts +6 -2
  156. package/core/renderers/geras/drawer.d.ts +4 -1
  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 -1
  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 +4 -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 +30 -8
  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 -4
  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 +5 -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 +5 -4
  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 +31 -44
  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 -1
  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 +9 -2
  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 +41 -30
  221. package/core/theme_manager.d.ts +10 -1
  222. package/core/toolbox/category.d.ts +60 -32
  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 +71 -23
  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 +19 -4
  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 +19 -9
  235. package/core/utils/deprecation.d.ts +6 -4
  236. package/core/utils/dom.d.ts +37 -18
  237. package/core/utils/idgenerator.d.ts +14 -4
  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 +17 -7
  270. package/core-browser.js +0 -6
  271. package/core.d.ts +0 -5
  272. package/core.js +0 -6
  273. package/dart.d.ts +1 -7
  274. package/dart_compressed.js.map +1 -1
  275. package/index.d.ts +2 -6
  276. package/javascript.d.ts +1 -7
  277. package/javascript_compressed.js.map +1 -1
  278. package/lua.d.ts +1 -7
  279. package/lua_compressed.js.map +1 -1
  280. package/msg/ab.d.ts +8 -0
  281. package/msg/ace.d.ts +8 -0
  282. package/msg/af.d.ts +8 -0
  283. package/msg/am.d.ts +8 -0
  284. package/msg/ar.d.ts +8 -0
  285. package/msg/ast.d.ts +8 -0
  286. package/msg/az.d.ts +8 -0
  287. package/msg/ba.d.ts +8 -0
  288. package/msg/bcc.d.ts +8 -0
  289. package/msg/be-tarask.d.ts +8 -0
  290. package/msg/be.d.ts +8 -0
  291. package/msg/bg.d.ts +8 -0
  292. package/msg/bn.d.ts +8 -0
  293. package/msg/br.d.ts +8 -0
  294. package/msg/bs.d.ts +8 -0
  295. package/msg/ca.d.ts +8 -0
  296. package/msg/cdo.d.ts +8 -0
  297. package/msg/constants.d.ts +16 -0
  298. package/msg/cs.d.ts +8 -0
  299. package/msg/da.d.ts +8 -0
  300. package/msg/de.d.ts +8 -0
  301. package/msg/diq.d.ts +8 -0
  302. package/msg/dty.d.ts +8 -0
  303. package/msg/ee.d.ts +8 -0
  304. package/msg/el.d.ts +8 -0
  305. package/msg/en-gb.d.ts +8 -0
  306. package/msg/en.d.ts +8 -0
  307. package/msg/eo.d.ts +8 -0
  308. package/msg/es.d.ts +8 -0
  309. package/msg/et.d.ts +8 -0
  310. package/msg/eu.d.ts +8 -0
  311. package/msg/fa.d.ts +8 -0
  312. package/msg/fi.d.ts +8 -0
  313. package/msg/fo.d.ts +8 -0
  314. package/msg/fr.d.ts +8 -0
  315. package/msg/frr.d.ts +8 -0
  316. package/msg/gl.d.ts +8 -0
  317. package/msg/gn.d.ts +8 -0
  318. package/msg/gor.d.ts +8 -0
  319. package/msg/ha.d.ts +8 -0
  320. package/msg/hak.d.ts +8 -0
  321. package/msg/he.d.ts +8 -0
  322. package/msg/hi.d.ts +8 -0
  323. package/msg/hr.d.ts +8 -0
  324. package/msg/hrx.d.ts +8 -0
  325. package/msg/hu.d.ts +8 -0
  326. package/msg/hy.d.ts +8 -0
  327. package/msg/ia.d.ts +8 -0
  328. package/msg/id.d.ts +8 -0
  329. package/msg/ig.d.ts +8 -0
  330. package/msg/inh.d.ts +8 -0
  331. package/msg/is.d.ts +8 -0
  332. package/msg/it.d.ts +8 -0
  333. package/msg/ja.d.ts +8 -0
  334. package/msg/ka.d.ts +8 -0
  335. package/msg/kab.d.ts +8 -0
  336. package/msg/kbd-cyrl.d.ts +8 -0
  337. package/msg/km.d.ts +8 -0
  338. package/msg/kn.d.ts +8 -0
  339. package/msg/ko.d.ts +8 -0
  340. package/msg/ksh.d.ts +8 -0
  341. package/msg/ku-latn.d.ts +8 -0
  342. package/msg/ky.d.ts +8 -0
  343. package/msg/la.d.ts +8 -0
  344. package/msg/lb.d.ts +8 -0
  345. package/msg/lki.d.ts +8 -0
  346. package/msg/lo.d.ts +8 -0
  347. package/msg/lrc.d.ts +8 -0
  348. package/msg/lt.d.ts +8 -0
  349. package/msg/lv.d.ts +8 -0
  350. package/msg/mg.d.ts +8 -0
  351. package/msg/mk.d.ts +8 -0
  352. package/msg/ml.d.ts +8 -0
  353. package/msg/mnw.d.ts +8 -0
  354. package/msg/ms.d.ts +8 -0
  355. package/msg/msg.d.ts +429 -432
  356. package/msg/my.d.ts +8 -0
  357. package/msg/mzn.d.ts +8 -0
  358. package/msg/nb.d.ts +8 -0
  359. package/msg/ne.d.ts +8 -0
  360. package/msg/nl.d.ts +8 -0
  361. package/msg/oc.d.ts +8 -0
  362. package/msg/olo.d.ts +8 -0
  363. package/msg/pa.d.ts +8 -0
  364. package/msg/pl.d.ts +8 -0
  365. package/msg/pms.d.ts +8 -0
  366. package/msg/ps.d.ts +8 -0
  367. package/msg/pt-br.d.ts +8 -0
  368. package/msg/pt.d.ts +8 -0
  369. package/msg/qqq.d.ts +16 -0
  370. package/msg/ro.d.ts +8 -0
  371. package/msg/ru.d.ts +8 -0
  372. package/msg/sc.d.ts +8 -0
  373. package/msg/sco.d.ts +8 -0
  374. package/msg/sd.d.ts +8 -0
  375. package/msg/shn.d.ts +8 -0
  376. package/msg/si.d.ts +8 -0
  377. package/msg/sk.d.ts +8 -0
  378. package/msg/skr-arab.d.ts +8 -0
  379. package/msg/sl.d.ts +8 -0
  380. package/msg/smn.d.ts +8 -0
  381. package/msg/sq.d.ts +8 -0
  382. package/msg/sr-latn.d.ts +8 -0
  383. package/msg/sr.d.ts +8 -0
  384. package/msg/sv.d.ts +8 -0
  385. package/msg/sw.d.ts +8 -0
  386. package/msg/synonyms.d.ts +16 -0
  387. package/msg/ta.d.ts +8 -0
  388. package/msg/tcy.d.ts +8 -0
  389. package/msg/te.d.ts +8 -0
  390. package/msg/th.d.ts +8 -0
  391. package/msg/ti.d.ts +8 -0
  392. package/msg/tl.d.ts +8 -0
  393. package/msg/tlh.d.ts +8 -0
  394. package/msg/tr.d.ts +8 -0
  395. package/msg/ug-arab.d.ts +8 -0
  396. package/msg/uk.d.ts +8 -0
  397. package/msg/ur.d.ts +8 -0
  398. package/msg/uz.d.ts +8 -0
  399. package/msg/vi.d.ts +8 -0
  400. package/msg/xmf.d.ts +8 -0
  401. package/msg/yo.d.ts +8 -0
  402. package/msg/yue.d.ts +8 -0
  403. package/msg/zgh.d.ts +8 -0
  404. package/msg/zh-hans.d.ts +8 -0
  405. package/msg/zh-hant.d.ts +8 -0
  406. package/package.json +6 -3
  407. package/php.d.ts +1 -7
  408. package/php_compressed.js.map +1 -1
  409. package/python.d.ts +1 -7
  410. package/python_compressed.js.map +1 -1
  411. package/blocks/blocks.js +0 -48
  412. package/blocks/colour.js +0 -121
  413. package/blocks/lists.js +0 -996
  414. package/blocks/logic.js +0 -665
  415. package/blocks/loops.js +0 -375
  416. package/blocks/math.js +0 -594
  417. package/blocks/procedures.js +0 -1196
  418. package/blocks/text.js +0 -1000
  419. package/blocks/variables.js +0 -176
  420. package/blocks/variables_dynamic.js +0 -192
  421. package/core/any_aliases.ts +0 -1
  422. package/core/block.ts +0 -2102
  423. package/core/block_animations.ts +0 -202
  424. package/core/block_drag_surface.ts +0 -237
  425. package/core/block_dragger.ts +0 -447
  426. package/core/block_svg.ts +0 -1758
  427. package/core/blockly.js +0 -890
  428. package/core/blockly.ts +0 -749
  429. package/core/blockly_options.ts +0 -81
  430. package/core/blocks.ts +0 -29
  431. package/core/browser_events.ts +0 -289
  432. package/core/bubble.ts +0 -892
  433. package/core/bubble_dragger.ts +0 -229
  434. package/core/bump_objects.ts +0 -182
  435. package/core/clipboard.ts +0 -91
  436. package/core/comment.ts +0 -398
  437. package/core/common.ts +0 -288
  438. package/core/component_manager.ts +0 -211
  439. package/core/config.ts +0 -80
  440. package/core/connection.ts +0 -692
  441. package/core/connection_checker.ts +0 -301
  442. package/core/connection_db.ts +0 -289
  443. package/core/connection_type.ts +0 -32
  444. package/core/constants.ts +0 -29
  445. package/core/contextmenu.ts +0 -363
  446. package/core/contextmenu_items.ts +0 -576
  447. package/core/contextmenu_registry.ts +0 -179
  448. package/core/css.ts +0 -560
  449. package/core/delete_area.ts +0 -82
  450. package/core/dialog.ts +0 -127
  451. package/core/drag_target.ts +0 -94
  452. package/core/dropdowndiv.ts +0 -683
  453. package/core/events/events.ts +0 -123
  454. package/core/events/events_abstract.ts +0 -112
  455. package/core/events/events_block_base.ts +0 -65
  456. package/core/events/events_block_change.ts +0 -176
  457. package/core/events/events_block_create.ts +0 -114
  458. package/core/events/events_block_delete.ts +0 -126
  459. package/core/events/events_block_drag.ts +0 -82
  460. package/core/events/events_block_move.ts +0 -206
  461. package/core/events/events_bubble_open.ts +0 -82
  462. package/core/events/events_click.ts +0 -84
  463. package/core/events/events_comment_base.ts +0 -107
  464. package/core/events/events_comment_change.ts +0 -108
  465. package/core/events/events_comment_create.ts +0 -82
  466. package/core/events/events_comment_delete.ts +0 -77
  467. package/core/events/events_comment_move.ts +0 -154
  468. package/core/events/events_marker_move.ts +0 -99
  469. package/core/events/events_selected.ts +0 -78
  470. package/core/events/events_theme_change.ts +0 -67
  471. package/core/events/events_toolbox_item_select.ts +0 -79
  472. package/core/events/events_trashcan_open.ts +0 -68
  473. package/core/events/events_ui.ts +0 -89
  474. package/core/events/events_ui_base.ts +0 -54
  475. package/core/events/events_var_base.ts +0 -65
  476. package/core/events/events_var_create.ts +0 -88
  477. package/core/events/events_var_delete.ts +0 -88
  478. package/core/events/events_var_rename.ts +0 -89
  479. package/core/events/events_viewport.ts +0 -100
  480. package/core/events/utils.ts +0 -529
  481. package/core/events/workspace_events.ts +0 -86
  482. package/core/extensions.ts +0 -504
  483. package/core/field.ts +0 -1206
  484. package/core/field_angle.ts +0 -563
  485. package/core/field_checkbox.ts +0 -243
  486. package/core/field_colour.ts +0 -632
  487. package/core/field_dropdown.ts +0 -773
  488. package/core/field_image.ts +0 -282
  489. package/core/field_label.ts +0 -152
  490. package/core/field_label_serializable.ts +0 -76
  491. package/core/field_multilineinput.ts +0 -466
  492. package/core/field_number.ts +0 -327
  493. package/core/field_registry.ts +0 -87
  494. package/core/field_textinput.ts +0 -591
  495. package/core/field_variable.ts +0 -545
  496. package/core/flyout_base.ts +0 -1165
  497. package/core/flyout_button.ts +0 -292
  498. package/core/flyout_horizontal.ts +0 -381
  499. package/core/flyout_metrics_manager.ts +0 -94
  500. package/core/flyout_vertical.ts +0 -384
  501. package/core/generator.ts +0 -539
  502. package/core/gesture.ts +0 -946
  503. package/core/grid.ts +0 -192
  504. package/core/icon.ts +0 -189
  505. package/core/inject.ts +0 -390
  506. package/core/input.ts +0 -309
  507. package/core/input_types.ts +0 -32
  508. package/core/insertion_marker_manager.ts +0 -788
  509. package/core/interfaces/i_ast_node_location.ts +0 -23
  510. package/core/interfaces/i_ast_node_location_svg.ts +0 -37
  511. package/core/interfaces/i_ast_node_location_with_block.ts +0 -38
  512. package/core/interfaces/i_autohideable.ts +0 -34
  513. package/core/interfaces/i_block_dragger.ts +0 -67
  514. package/core/interfaces/i_bounded_element.ts +0 -42
  515. package/core/interfaces/i_bubble.ts +0 -88
  516. package/core/interfaces/i_collapsible_toolbox_item.ts +0 -47
  517. package/core/interfaces/i_component.ts +0 -32
  518. package/core/interfaces/i_connection_checker.ts +0 -102
  519. package/core/interfaces/i_contextmenu.ts +0 -26
  520. package/core/interfaces/i_copyable.ts +0 -40
  521. package/core/interfaces/i_deletable.ts +0 -29
  522. package/core/interfaces/i_delete_area.ts +0 -46
  523. package/core/interfaces/i_drag_target.ts +0 -84
  524. package/core/interfaces/i_draggable.ts +0 -25
  525. package/core/interfaces/i_flyout.ts +0 -186
  526. package/core/interfaces/i_keyboard_accessible.ts +0 -35
  527. package/core/interfaces/i_metrics_manager.ts +0 -151
  528. package/core/interfaces/i_movable.ts +0 -29
  529. package/core/interfaces/i_positionable.ts +0 -50
  530. package/core/interfaces/i_registrable.ts +0 -25
  531. package/core/interfaces/i_registrable_field.ts +0 -31
  532. package/core/interfaces/i_selectable.ts +0 -34
  533. package/core/interfaces/i_selectable_toolbox_item.ts +0 -64
  534. package/core/interfaces/i_serializer.ts +0 -65
  535. package/core/interfaces/i_styleable.ts +0 -35
  536. package/core/interfaces/i_toolbox.ts +0 -127
  537. package/core/interfaces/i_toolbox_item.ts +0 -84
  538. package/core/internal_constants.ts +0 -67
  539. package/core/keyboard_nav/ast_node.ts +0 -717
  540. package/core/keyboard_nav/basic_cursor.ts +0 -214
  541. package/core/keyboard_nav/cursor.ts +0 -134
  542. package/core/keyboard_nav/marker.ts +0 -115
  543. package/core/keyboard_nav/tab_navigate_cursor.ts +0 -48
  544. package/core/main.js +0 -303
  545. package/core/marker_manager.ts +0 -181
  546. package/core/menu.ts +0 -449
  547. package/core/menuitem.ts +0 -240
  548. package/core/metrics_manager.ts +0 -456
  549. package/core/msg.ts +0 -20
  550. package/core/mutator.ts +0 -560
  551. package/core/names.ts +0 -267
  552. package/core/options.ts +0 -365
  553. package/core/positionable_helpers.ts +0 -181
  554. package/core/procedures.ts +0 -443
  555. package/core/registry.ts +0 -339
  556. package/core/rendered_connection.ts +0 -568
  557. package/core/renderers/common/block_rendering.ts +0 -164
  558. package/core/renderers/common/constants.ts +0 -1124
  559. package/core/renderers/common/debug.ts +0 -61
  560. package/core/renderers/common/debugger.ts +0 -433
  561. package/core/renderers/common/drawer.ts +0 -450
  562. package/core/renderers/common/i_path_object.ts +0 -161
  563. package/core/renderers/common/info.ts +0 -718
  564. package/core/renderers/common/marker_svg.ts +0 -680
  565. package/core/renderers/common/path_object.ts +0 -272
  566. package/core/renderers/common/renderer.ts +0 -271
  567. package/core/renderers/geras/constants.ts +0 -61
  568. package/core/renderers/geras/drawer.ts +0 -176
  569. package/core/renderers/geras/geras.ts +0 -37
  570. package/core/renderers/geras/highlight_constants.ts +0 -337
  571. package/core/renderers/geras/highlighter.ts +0 -306
  572. package/core/renderers/geras/info.ts +0 -450
  573. package/core/renderers/geras/measurables/inline_input.ts +0 -51
  574. package/core/renderers/geras/measurables/statement_input.ts +0 -50
  575. package/core/renderers/geras/path_object.ts +0 -138
  576. package/core/renderers/geras/renderer.ts +0 -126
  577. package/core/renderers/measurables/base.ts +0 -53
  578. package/core/renderers/measurables/bottom_row.ts +0 -120
  579. package/core/renderers/measurables/connection.ts +0 -52
  580. package/core/renderers/measurables/external_value_input.ts +0 -65
  581. package/core/renderers/measurables/field.ts +0 -63
  582. package/core/renderers/measurables/hat.ts +0 -48
  583. package/core/renderers/measurables/icon.ts +0 -54
  584. package/core/renderers/measurables/in_row_spacer.ts +0 -44
  585. package/core/renderers/measurables/inline_input.ts +0 -76
  586. package/core/renderers/measurables/input_connection.ts +0 -66
  587. package/core/renderers/measurables/input_row.ts +0 -82
  588. package/core/renderers/measurables/jagged_edge.ts +0 -43
  589. package/core/renderers/measurables/next_connection.ts +0 -47
  590. package/core/renderers/measurables/output_connection.ts +0 -56
  591. package/core/renderers/measurables/previous_connection.ts +0 -47
  592. package/core/renderers/measurables/round_corner.ts +0 -49
  593. package/core/renderers/measurables/row.ts +0 -225
  594. package/core/renderers/measurables/spacer_row.ts +0 -55
  595. package/core/renderers/measurables/square_corner.ts +0 -47
  596. package/core/renderers/measurables/statement_input.ts +0 -55
  597. package/core/renderers/measurables/top_row.ts +0 -122
  598. package/core/renderers/measurables/types.ts +0 -332
  599. package/core/renderers/minimalist/constants.ts +0 -32
  600. package/core/renderers/minimalist/drawer.ts +0 -38
  601. package/core/renderers/minimalist/info.ts +0 -52
  602. package/core/renderers/minimalist/minimalist.ts +0 -22
  603. package/core/renderers/minimalist/renderer.ts +0 -71
  604. package/core/renderers/thrasos/info.ts +0 -338
  605. package/core/renderers/thrasos/renderer.ts +0 -48
  606. package/core/renderers/thrasos/thrasos.ts +0 -20
  607. package/core/renderers/zelos/constants.ts +0 -858
  608. package/core/renderers/zelos/drawer.ts +0 -228
  609. package/core/renderers/zelos/info.ts +0 -593
  610. package/core/renderers/zelos/marker_svg.ts +0 -151
  611. package/core/renderers/zelos/measurables/bottom_row.ts +0 -53
  612. package/core/renderers/zelos/measurables/inputs.ts +0 -56
  613. package/core/renderers/zelos/measurables/row_elements.ts +0 -45
  614. package/core/renderers/zelos/measurables/top_row.ts +0 -58
  615. package/core/renderers/zelos/path_object.ts +0 -215
  616. package/core/renderers/zelos/renderer.ts +0 -142
  617. package/core/renderers/zelos/zelos.ts +0 -39
  618. package/core/scrollbar.ts +0 -870
  619. package/core/scrollbar_pair.ts +0 -321
  620. package/core/serialization/blocks.ts +0 -706
  621. package/core/serialization/exceptions.ts +0 -98
  622. package/core/serialization/priorities.ts +0 -32
  623. package/core/serialization/registry.ts +0 -43
  624. package/core/serialization/variables.ts +0 -96
  625. package/core/serialization/workspaces.ts +0 -106
  626. package/core/shortcut_items.ts +0 -266
  627. package/core/shortcut_registry.ts +0 -355
  628. package/core/sprites.ts +0 -29
  629. package/core/theme/classic.ts +0 -54
  630. package/core/theme/themes.ts +0 -22
  631. package/core/theme/zelos.ts +0 -91
  632. package/core/theme.ts +0 -221
  633. package/core/theme_manager.ts +0 -186
  634. package/core/toolbox/category.ts +0 -679
  635. package/core/toolbox/collapsible_category.ts +0 -273
  636. package/core/toolbox/separator.ts +0 -105
  637. package/core/toolbox/toolbox.ts +0 -1044
  638. package/core/toolbox/toolbox_item.ts +0 -147
  639. package/core/tooltip.ts +0 -463
  640. package/core/touch.ts +0 -306
  641. package/core/touch_gesture.ts +0 -295
  642. package/core/trashcan.ts +0 -671
  643. package/core/utils/aria.ts +0 -160
  644. package/core/utils/array.ts +0 -32
  645. package/core/utils/colour.ts +0 -276
  646. package/core/utils/coordinate.ts +0 -124
  647. package/core/utils/deprecation.ts +0 -41
  648. package/core/utils/dom.ts +0 -408
  649. package/core/utils/idgenerator.ts +0 -80
  650. package/core/utils/keycodes.ts +0 -169
  651. package/core/utils/math.ts +0 -61
  652. package/core/utils/metrics.ts +0 -97
  653. package/core/utils/object.ts +0 -95
  654. package/core/utils/parsing.ts +0 -261
  655. package/core/utils/rect.ts +0 -62
  656. package/core/utils/sentinel.ts +0 -23
  657. package/core/utils/size.ts +0 -51
  658. package/core/utils/string.ts +0 -308
  659. package/core/utils/style.ts +0 -306
  660. package/core/utils/svg.ts +0 -88
  661. package/core/utils/svg_math.ts +0 -269
  662. package/core/utils/svg_paths.ts +0 -140
  663. package/core/utils/toolbox.ts +0 -433
  664. package/core/utils/useragent.ts +0 -135
  665. package/core/utils/xml.ts +0 -97
  666. package/core/utils.ts +0 -428
  667. package/core/variable_map.ts +0 -392
  668. package/core/variable_model.ts +0 -82
  669. package/core/variables.ts +0 -596
  670. package/core/variables_dynamic.ts +0 -133
  671. package/core/warning.ts +0 -161
  672. package/core/widgetdiv.ts +0 -257
  673. package/core/workspace.ts +0 -801
  674. package/core/workspace_audio.ts +0 -156
  675. package/core/workspace_comment.ts +0 -398
  676. package/core/workspace_comment_svg.ts +0 -1127
  677. package/core/workspace_drag_surface_svg.ts +0 -187
  678. package/core/workspace_dragger.ts +0 -104
  679. package/core/workspace_svg.ts +0 -2655
  680. package/core/xml.ts +0 -1023
  681. package/core/zoom_controls.ts +0 -441
  682. package/generators/dart/all.js +0 -27
  683. package/generators/dart/colour.js +0 -105
  684. package/generators/dart/lists.js +0 -431
  685. package/generators/dart/logic.js +0 -123
  686. package/generators/dart/loops.js +0 -161
  687. package/generators/dart/math.js +0 -446
  688. package/generators/dart/procedures.js +0 -105
  689. package/generators/dart/text.js +0 -338
  690. package/generators/dart/variables.js +0 -32
  691. package/generators/dart/variables_dynamic.js +0 -21
  692. package/generators/dart.js +0 -303
  693. package/generators/javascript/all.js +0 -27
  694. package/generators/javascript/colour.js +0 -85
  695. package/generators/javascript/lists.js +0 -405
  696. package/generators/javascript/logic.js +0 -127
  697. package/generators/javascript/loops.js +0 -180
  698. package/generators/javascript/math.js +0 -401
  699. package/generators/javascript/procedures.js +0 -110
  700. package/generators/javascript/text.js +0 -371
  701. package/generators/javascript/variables.js +0 -32
  702. package/generators/javascript/variables_dynamic.js +0 -21
  703. package/generators/javascript.js +0 -322
  704. package/generators/lua/all.js +0 -27
  705. package/generators/lua/colour.js +0 -71
  706. package/generators/lua/lists.js +0 -348
  707. package/generators/lua/logic.js +0 -112
  708. package/generators/lua/loops.js +0 -168
  709. package/generators/lua/math.js +0 -406
  710. package/generators/lua/procedures.js +0 -106
  711. package/generators/lua/text.js +0 -327
  712. package/generators/lua/variables.js +0 -31
  713. package/generators/lua/variables_dynamic.js +0 -21
  714. package/generators/lua.js +0 -206
  715. package/generators/php/all.js +0 -27
  716. package/generators/php/colour.js +0 -81
  717. package/generators/php/lists.js +0 -481
  718. package/generators/php/logic.js +0 -119
  719. package/generators/php/loops.js +0 -161
  720. package/generators/php/math.js +0 -349
  721. package/generators/php/procedures.js +0 -125
  722. package/generators/php/text.js +0 -255
  723. package/generators/php/variables.js +0 -32
  724. package/generators/php/variables_dynamic.js +0 -21
  725. package/generators/php.js +0 -303
  726. package/generators/python/all.js +0 -27
  727. package/generators/python/colour.js +0 -67
  728. package/generators/python/lists.js +0 -346
  729. package/generators/python/logic.js +0 -120
  730. package/generators/python/loops.js +0 -206
  731. package/generators/python/math.js +0 -373
  732. package/generators/python/procedures.js +0 -129
  733. package/generators/python/text.js +0 -291
  734. package/generators/python/variables.js +0 -32
  735. package/generators/python/variables_dynamic.js +0 -21
  736. package/generators/python.js +0 -333
package/core/bubble.ts DELETED
@@ -1,892 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2012 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
-
7
- /**
8
- * @fileoverview Object representing a UI bubble.
9
- */
10
-
11
- /**
12
- * Object representing a UI bubble.
13
- * @class
14
- */
15
- import * as goog from '../closure/goog/goog.js';
16
- goog.declareModuleId('Blockly.Bubble');
17
-
18
- /* eslint-disable-next-line no-unused-vars */
19
- // Unused import preserved for side-effects. Remove if unneeded.
20
- // import './metrics_manager.js';
21
- // Unused import preserved for side-effects. Remove if unneeded.
22
- // import './workspace.js';
23
-
24
- import type {BlockDragSurfaceSvg} from './block_drag_surface.js';
25
- import type {BlockSvg} from './block_svg.js';
26
- import * as browserEvents from './browser_events.js';
27
- import type {IBubble} from './interfaces/i_bubble.js';
28
- import type {ContainerRegion} from './metrics_manager.js';
29
- import {Scrollbar} from './scrollbar.js';
30
- import * as Touch from './touch.js';
31
- import {Coordinate} from './utils/coordinate.js';
32
- import * as dom from './utils/dom.js';
33
- import * as math from './utils/math.js';
34
- import {Size} from './utils/size.js';
35
- import {Svg} from './utils/svg.js';
36
- import * as userAgent from './utils/useragent.js';
37
- import type {WorkspaceSvg} from './workspace_svg.js';
38
-
39
-
40
- /**
41
- * Class for UI bubble.
42
- * @alias Blockly.Bubble
43
- */
44
- export class Bubble implements IBubble {
45
- /** Width of the border around the bubble. */
46
- static BORDER_WIDTH = 6;
47
-
48
- /**
49
- * Determines the thickness of the base of the arrow in relation to the size
50
- * of the bubble. Higher numbers result in thinner arrows.
51
- */
52
- static ARROW_THICKNESS = 5;
53
-
54
- /** The number of degrees that the arrow bends counter-clockwise. */
55
- static ARROW_ANGLE = 20;
56
-
57
- /**
58
- * The sharpness of the arrow's bend. Higher numbers result in smoother
59
- * arrows.
60
- */
61
- static ARROW_BEND = 4;
62
-
63
- /** Distance between arrow point and anchor point. */
64
- static ANCHOR_RADIUS = 8;
65
-
66
- /** Mouse up event data. */
67
- private static onMouseUpWrapper_: browserEvents.Data|null = null;
68
-
69
- /** Mouse move event data. */
70
- private static onMouseMoveWrapper_: browserEvents.Data|null = null;
71
- workspace_: WorkspaceSvg;
72
- content_: SVGElement;
73
- shape_: SVGElement;
74
-
75
- /** Flag to stop incremental rendering during construction. */
76
- private readonly rendered_: boolean;
77
-
78
- /** The SVG group containing all parts of the bubble. */
79
- private bubbleGroup_: SVGGElement|null = null;
80
-
81
- /**
82
- * The SVG path for the arrow from the bubble to the icon on the block.
83
- */
84
- private bubbleArrow_: SVGPathElement|null = null;
85
-
86
- /** The SVG rect for the main body of the bubble. */
87
- private bubbleBack_: SVGRectElement|null = null;
88
-
89
- /** The SVG group for the resize hash marks on some bubbles. */
90
- private resizeGroup_: SVGGElement|null = null;
91
-
92
- /** Absolute coordinate of anchor point, in workspace coordinates. */
93
- private anchorXY_!: Coordinate;
94
-
95
- /**
96
- * Relative X coordinate of bubble with respect to the anchor's centre,
97
- * in workspace units.
98
- * In RTL mode the initial value is negated.
99
- */
100
- private relativeLeft_ = 0;
101
-
102
- /**
103
- * Relative Y coordinate of bubble with respect to the anchor's centre, in
104
- * workspace units.
105
- */
106
- private relativeTop_ = 0;
107
-
108
- /** Width of bubble, in workspace units. */
109
- private width_ = 0;
110
-
111
- /** Height of bubble, in workspace units. */
112
- private height_ = 0;
113
-
114
- /** Automatically position and reposition the bubble. */
115
- private autoLayout_ = true;
116
-
117
- /** Method to call on resize of bubble. */
118
- private resizeCallback_: (() => void)|null = null;
119
-
120
- /** Method to call on move of bubble. */
121
- private moveCallback_: (() => void)|null = null;
122
-
123
- /** Mouse down on bubbleBack_ event data. */
124
- private onMouseDownBubbleWrapper_: browserEvents.Data|null = null;
125
-
126
- /** Mouse down on resizeGroup_ event data. */
127
- private onMouseDownResizeWrapper_: browserEvents.Data|null = null;
128
-
129
- /**
130
- * Describes whether this bubble has been disposed of (nodes and event
131
- * listeners removed from the page) or not.
132
- * @internal
133
- */
134
- disposed = false;
135
- private arrow_radians_: number;
136
-
137
- /**
138
- * @param workspace The workspace on which to draw the bubble.
139
- * @param content SVG content for the bubble.
140
- * @param shape SVG element to avoid eclipsing.
141
- * @param anchorXY Absolute position of bubble's anchor point.
142
- * @param bubbleWidth Width of bubble, or null if not resizable.
143
- * @param bubbleHeight Height of bubble, or null if not resizable.
144
- * @struct
145
- */
146
- constructor(
147
- workspace: WorkspaceSvg, content: SVGElement, shape: SVGElement,
148
- anchorXY: Coordinate, bubbleWidth: number|null,
149
- bubbleHeight: number|null) {
150
- this.rendered_ = false;
151
- this.workspace_ = workspace;
152
- this.content_ = content;
153
- this.shape_ = shape;
154
-
155
- let angle = Bubble.ARROW_ANGLE;
156
- if (this.workspace_.RTL) {
157
- angle = -angle;
158
- }
159
- this.arrow_radians_ = math.toRadians(angle);
160
-
161
- const canvas = workspace.getBubbleCanvas();
162
- canvas.appendChild(
163
- this.createDom_(content, !!(bubbleWidth && bubbleHeight)));
164
-
165
- this.setAnchorLocation(anchorXY);
166
- if (!bubbleWidth || !bubbleHeight) {
167
- const bBox = (this.content_ as SVGGraphicsElement).getBBox();
168
- bubbleWidth = bBox.width + 2 * Bubble.BORDER_WIDTH;
169
- bubbleHeight = bBox.height + 2 * Bubble.BORDER_WIDTH;
170
- }
171
- this.setBubbleSize(bubbleWidth, bubbleHeight);
172
-
173
- // Render the bubble.
174
- this.positionBubble_();
175
- this.renderArrow_();
176
- this.rendered_ = true;
177
- }
178
-
179
- /**
180
- * Create the bubble's DOM.
181
- * @param content SVG content for the bubble.
182
- * @param hasResize Add diagonal resize gripper if true.
183
- * @return The bubble's SVG group.
184
- */
185
- private createDom_(content: Element, hasResize: boolean): SVGElement {
186
- /* Create the bubble. Here's the markup that will be generated:
187
- <g>
188
- <g filter="url(#blocklyEmbossFilter837493)">
189
- <path d="... Z" />
190
- <rect class="blocklyDraggable" rx="8" ry="8" width="180"
191
- height="180"/>
192
- </g>
193
- <g transform="translate(165, 165)" class="blocklyResizeSE">
194
- <polygon points="0,15 15,15 15,0"/>
195
- <line class="blocklyResizeLine" x1="5" y1="14" x2="14" y2="5"/>
196
- <line class="blocklyResizeLine" x1="10" y1="14" x2="14" y2="10"/>
197
- </g>
198
- [...content goes here...]
199
- </g>
200
- */
201
- this.bubbleGroup_ = dom.createSvgElement(Svg.G, {});
202
- let filter: {filter?: string} = {
203
- 'filter': 'url(#' +
204
- this.workspace_.getRenderer().getConstants().embossFilterId + ')',
205
- };
206
- if (userAgent.JavaFx) {
207
- // Multiple reports that JavaFX can't handle filters.
208
- // https://github.com/google/blockly/issues/99
209
- filter = {};
210
- }
211
- const bubbleEmboss = dom.createSvgElement(Svg.G, filter, this.bubbleGroup_);
212
- this.bubbleArrow_ = dom.createSvgElement(Svg.PATH, {}, bubbleEmboss);
213
- this.bubbleBack_ = dom.createSvgElement(
214
- Svg.RECT, {
215
- 'class': 'blocklyDraggable',
216
- 'x': 0,
217
- 'y': 0,
218
- 'rx': Bubble.BORDER_WIDTH,
219
- 'ry': Bubble.BORDER_WIDTH,
220
- },
221
- bubbleEmboss);
222
- if (hasResize) {
223
- this.resizeGroup_ = dom.createSvgElement(
224
- Svg.G, {
225
- 'class': this.workspace_.RTL ? 'blocklyResizeSW' :
226
- 'blocklyResizeSE',
227
- },
228
- this.bubbleGroup_);
229
- const resizeSize = 2 * Bubble.BORDER_WIDTH;
230
- dom.createSvgElement(
231
- Svg.POLYGON,
232
- {'points': '0,x x,x x,0'.replace(/x/g, resizeSize.toString())},
233
- this.resizeGroup_);
234
- dom.createSvgElement(
235
- Svg.LINE, {
236
- 'class': 'blocklyResizeLine',
237
- 'x1': resizeSize / 3,
238
- 'y1': resizeSize - 1,
239
- 'x2': resizeSize - 1,
240
- 'y2': resizeSize / 3,
241
- },
242
- this.resizeGroup_);
243
- dom.createSvgElement(
244
- Svg.LINE, {
245
- 'class': 'blocklyResizeLine',
246
- 'x1': resizeSize * 2 / 3,
247
- 'y1': resizeSize - 1,
248
- 'x2': resizeSize - 1,
249
- 'y2': resizeSize * 2 / 3,
250
- },
251
- this.resizeGroup_);
252
- } else {
253
- this.resizeGroup_ = null;
254
- }
255
-
256
- if (!this.workspace_.options.readOnly) {
257
- this.onMouseDownBubbleWrapper_ = browserEvents.conditionalBind(
258
- this.bubbleBack_, 'mousedown', this, this.bubbleMouseDown_);
259
- if (this.resizeGroup_) {
260
- this.onMouseDownResizeWrapper_ = browserEvents.conditionalBind(
261
- this.resizeGroup_, 'mousedown', this, this.resizeMouseDown_);
262
- }
263
- }
264
- this.bubbleGroup_.appendChild(content);
265
- return this.bubbleGroup_;
266
- }
267
-
268
- /**
269
- * Return the root node of the bubble's SVG group.
270
- * @return The root SVG node of the bubble's group.
271
- */
272
- getSvgRoot(): SVGElement {
273
- return this.bubbleGroup_ as SVGElement;
274
- }
275
-
276
- /**
277
- * Expose the block's ID on the bubble's top-level SVG group.
278
- * @param id ID of block.
279
- */
280
- setSvgId(id: string) {
281
- this.bubbleGroup_?.setAttribute('data-block-id', id);
282
- }
283
-
284
- /**
285
- * Handle a mouse-down on bubble's border.
286
- * @param e Mouse down event.
287
- */
288
- private bubbleMouseDown_(e: Event) {
289
- const gesture = this.workspace_.getGesture(e);
290
- if (gesture) {
291
- gesture.handleBubbleStart(e, this);
292
- }
293
- }
294
-
295
- /**
296
- * Show the context menu for this bubble.
297
- * @param _e Mouse event.
298
- * @internal
299
- */
300
- showContextMenu(_e: Event) {}
301
- // NOP on bubbles, but used by the bubble dragger to pass events to
302
- // workspace comments.
303
-
304
- /**
305
- * Get whether this bubble is deletable or not.
306
- * @return True if deletable.
307
- * @internal
308
- */
309
- isDeletable(): boolean {
310
- return false;
311
- }
312
-
313
- /**
314
- * Update the style of this bubble when it is dragged over a delete area.
315
- * @param _enable True if the bubble is about to be deleted, false otherwise.
316
- */
317
- setDeleteStyle(_enable: boolean) {}
318
- // NOP if bubble is not deletable.
319
-
320
- /**
321
- * Handle a mouse-down on bubble's resize corner.
322
- * @param e Mouse down event.
323
- */
324
- private resizeMouseDown_(e: MouseEvent) {
325
- this.promote();
326
- Bubble.unbindDragEvents_();
327
- if (browserEvents.isRightButton(e)) {
328
- // No right-click.
329
- e.stopPropagation();
330
- return;
331
- }
332
- // Left-click (or middle click)
333
- this.workspace_.startDrag(
334
- e,
335
- new Coordinate(
336
- this.workspace_.RTL ? -this.width_ : this.width_, this.height_));
337
-
338
- Bubble.onMouseUpWrapper_ = browserEvents.conditionalBind(
339
- document, 'mouseup', this, Bubble.bubbleMouseUp_);
340
- Bubble.onMouseMoveWrapper_ = browserEvents.conditionalBind(
341
- document, 'mousemove', this, this.resizeMouseMove_);
342
- this.workspace_.hideChaff();
343
- // This event has been handled. No need to bubble up to the document.
344
- e.stopPropagation();
345
- }
346
-
347
- /**
348
- * Resize this bubble to follow the mouse.
349
- * @param e Mouse move event.
350
- */
351
- private resizeMouseMove_(e: MouseEvent) {
352
- this.autoLayout_ = false;
353
- const newXY = this.workspace_.moveDrag(e);
354
- this.setBubbleSize(this.workspace_.RTL ? -newXY.x : newXY.x, newXY.y);
355
- if (this.workspace_.RTL) {
356
- // RTL requires the bubble to move its left edge.
357
- this.positionBubble_();
358
- }
359
- }
360
-
361
- /**
362
- * Register a function as a callback event for when the bubble is resized.
363
- * @param callback The function to call on resize.
364
- */
365
- registerResizeEvent(callback: () => void) {
366
- this.resizeCallback_ = callback;
367
- }
368
-
369
- /**
370
- * Register a function as a callback event for when the bubble is moved.
371
- * @param callback The function to call on move.
372
- */
373
- registerMoveEvent(callback: () => void) {
374
- this.moveCallback_ = callback;
375
- }
376
-
377
- /**
378
- * Move this bubble to the top of the stack.
379
- * @return Whether or not the bubble has been moved.
380
- * @internal
381
- */
382
- promote(): boolean {
383
- const svgGroup = this.bubbleGroup_?.parentNode;
384
- if (svgGroup?.lastChild !== this.bubbleGroup_ && this.bubbleGroup_) {
385
- svgGroup?.appendChild(this.bubbleGroup_);
386
- return true;
387
- }
388
- return false;
389
- }
390
-
391
- /**
392
- * Notification that the anchor has moved.
393
- * Update the arrow and bubble accordingly.
394
- * @param xy Absolute location.
395
- */
396
- setAnchorLocation(xy: Coordinate) {
397
- this.anchorXY_ = xy;
398
- if (this.rendered_) {
399
- this.positionBubble_();
400
- }
401
- }
402
-
403
- /** Position the bubble so that it does not fall off-screen. */
404
- private layoutBubble_() {
405
- // Get the metrics in workspace units.
406
- const viewMetrics =
407
- this.workspace_.getMetricsManager().getViewMetrics(true);
408
-
409
- const optimalLeft = this.getOptimalRelativeLeft_(viewMetrics);
410
- const optimalTop = this.getOptimalRelativeTop_(viewMetrics);
411
- const bbox = (this.shape_ as SVGGraphicsElement).getBBox();
412
-
413
- const topPosition = {
414
- x: optimalLeft,
415
- y: -this.height_ -
416
- this.workspace_.getRenderer().getConstants().MIN_BLOCK_HEIGHT as
417
- number,
418
- };
419
- const startPosition = {x: -this.width_ - 30, y: optimalTop};
420
- const endPosition = {x: bbox.width, y: optimalTop};
421
- const bottomPosition = {x: optimalLeft, y: bbox.height};
422
-
423
- const closerPosition =
424
- bbox.width < bbox.height ? endPosition : bottomPosition;
425
- const fartherPosition =
426
- bbox.width < bbox.height ? bottomPosition : endPosition;
427
-
428
- const topPositionOverlap = this.getOverlap_(topPosition, viewMetrics);
429
- const startPositionOverlap = this.getOverlap_(startPosition, viewMetrics);
430
- const closerPositionOverlap = this.getOverlap_(closerPosition, viewMetrics);
431
- const fartherPositionOverlap =
432
- this.getOverlap_(fartherPosition, viewMetrics);
433
-
434
- // Set the position to whichever position shows the most of the bubble,
435
- // with tiebreaks going in the order: top > start > close > far.
436
- const mostOverlap = Math.max(
437
- topPositionOverlap, startPositionOverlap, closerPositionOverlap,
438
- fartherPositionOverlap);
439
- if (topPositionOverlap === mostOverlap) {
440
- this.relativeLeft_ = topPosition.x;
441
- this.relativeTop_ = topPosition.y;
442
- return;
443
- }
444
- if (startPositionOverlap === mostOverlap) {
445
- this.relativeLeft_ = startPosition.x;
446
- this.relativeTop_ = startPosition.y;
447
- return;
448
- }
449
- if (closerPositionOverlap === mostOverlap) {
450
- this.relativeLeft_ = closerPosition.x;
451
- this.relativeTop_ = closerPosition.y;
452
- return;
453
- }
454
- // TODO: I believe relativeLeft_ should actually be called relativeStart_
455
- // and then the math should be fixed to reflect this. (hopefully it'll
456
- // make it look simpler)
457
- this.relativeLeft_ = fartherPosition.x;
458
- this.relativeTop_ = fartherPosition.y;
459
- }
460
-
461
- /**
462
- * Calculate the what percentage of the bubble overlaps with the visible
463
- * workspace (what percentage of the bubble is visible).
464
- * @param relativeMin The position of the top-left corner of the bubble
465
- * relative to the anchor point.
466
- * @param viewMetrics The view metrics of the workspace the bubble will appear
467
- * in.
468
- * @return The percentage of the bubble that is visible.
469
- */
470
- private getOverlap_(
471
- relativeMin: {x: number, y: number},
472
- viewMetrics: ContainerRegion): number {
473
- // The position of the top-left corner of the bubble in workspace units.
474
- const bubbleMin = {
475
- x: this.workspace_.RTL ? this.anchorXY_.x - relativeMin.x - this.width_ :
476
- relativeMin.x + this.anchorXY_.x,
477
- y: relativeMin.y + this.anchorXY_.y,
478
- };
479
- // The position of the bottom-right corner of the bubble in workspace units.
480
- const bubbleMax = {
481
- x: bubbleMin.x + this.width_,
482
- y: bubbleMin.y + this.height_,
483
- };
484
-
485
- // We could adjust these values to account for the scrollbars, but the
486
- // bubbles should have been adjusted to not collide with them anyway, so
487
- // giving the workspace a slightly larger "bounding box" shouldn't affect
488
- // the calculation.
489
-
490
- // The position of the top-left corner of the workspace.
491
- const workspaceMin = {x: viewMetrics.left, y: viewMetrics.top};
492
- // The position of the bottom-right corner of the workspace.
493
- const workspaceMax = {
494
- x: viewMetrics.left + viewMetrics.width,
495
- y: viewMetrics.top + viewMetrics.height,
496
- };
497
-
498
- const overlapWidth = Math.min(bubbleMax.x, workspaceMax.x) -
499
- Math.max(bubbleMin.x, workspaceMin.x);
500
- const overlapHeight = Math.min(bubbleMax.y, workspaceMax.y) -
501
- Math.max(bubbleMin.y, workspaceMin.y);
502
- return Math.max(
503
- 0,
504
- Math.min(
505
- 1, overlapWidth * overlapHeight / (this.width_ * this.height_)));
506
- }
507
-
508
- /**
509
- * Calculate what the optimal horizontal position of the top-left corner of
510
- * the bubble is (relative to the anchor point) so that the most area of the
511
- * bubble is shown.
512
- * @param viewMetrics The view metrics of the workspace the bubble will appear
513
- * in.
514
- * @return The optimal horizontal position of the top-left corner of the
515
- * bubble.
516
- */
517
- private getOptimalRelativeLeft_(viewMetrics: ContainerRegion): number {
518
- let relativeLeft = -this.width_ / 4;
519
-
520
- // No amount of sliding left or right will give us a better overlap.
521
- if (this.width_ > viewMetrics.width) {
522
- return relativeLeft;
523
- }
524
-
525
- if (this.workspace_.RTL) {
526
- // Bubble coordinates are flipped in RTL.
527
- const bubbleRight = this.anchorXY_.x - relativeLeft;
528
- const bubbleLeft = bubbleRight - this.width_;
529
-
530
- const workspaceRight = viewMetrics.left + viewMetrics.width;
531
- const workspaceLeft = viewMetrics.left +
532
- // Thickness in workspace units.
533
- Scrollbar.scrollbarThickness / this.workspace_.scale;
534
-
535
- if (bubbleLeft < workspaceLeft) {
536
- // Slide the bubble right until it is onscreen.
537
- relativeLeft = -(workspaceLeft - this.anchorXY_.x + this.width_);
538
- } else if (bubbleRight > workspaceRight) {
539
- // Slide the bubble left until it is onscreen.
540
- relativeLeft = -(workspaceRight - this.anchorXY_.x);
541
- }
542
- } else {
543
- const bubbleLeft = relativeLeft + this.anchorXY_.x;
544
- const bubbleRight = bubbleLeft + this.width_;
545
-
546
- const workspaceLeft = viewMetrics.left;
547
- const workspaceRight = viewMetrics.left + viewMetrics.width -
548
- // Thickness in workspace units.
549
- Scrollbar.scrollbarThickness / this.workspace_.scale;
550
-
551
- if (bubbleLeft < workspaceLeft) {
552
- // Slide the bubble right until it is onscreen.
553
- relativeLeft = workspaceLeft - this.anchorXY_.x;
554
- } else if (bubbleRight > workspaceRight) {
555
- // Slide the bubble left until it is onscreen.
556
- relativeLeft = workspaceRight - this.anchorXY_.x - this.width_;
557
- }
558
- }
559
-
560
- return relativeLeft;
561
- }
562
-
563
- /**
564
- * Calculate what the optimal vertical position of the top-left corner of
565
- * the bubble is (relative to the anchor point) so that the most area of the
566
- * bubble is shown.
567
- * @param viewMetrics The view metrics of the workspace the bubble will appear
568
- * in.
569
- * @return The optimal vertical position of the top-left corner of the bubble.
570
- */
571
- private getOptimalRelativeTop_(viewMetrics: ContainerRegion): number {
572
- let relativeTop = -this.height_ / 4;
573
-
574
- // No amount of sliding up or down will give us a better overlap.
575
- if (this.height_ > viewMetrics.height) {
576
- return relativeTop;
577
- }
578
-
579
- const bubbleTop = this.anchorXY_.y + relativeTop;
580
- const bubbleBottom = bubbleTop + this.height_;
581
- const workspaceTop = viewMetrics.top;
582
- const workspaceBottom = viewMetrics.top +
583
- viewMetrics.height - // Thickness in workspace units.
584
- Scrollbar.scrollbarThickness / this.workspace_.scale;
585
-
586
- const anchorY = this.anchorXY_.y;
587
- if (bubbleTop < workspaceTop) {
588
- // Slide the bubble down until it is onscreen.
589
- relativeTop = workspaceTop - anchorY;
590
- } else if (bubbleBottom > workspaceBottom) {
591
- // Slide the bubble up until it is onscreen.
592
- relativeTop = workspaceBottom - anchorY - this.height_;
593
- }
594
-
595
- return relativeTop;
596
- }
597
-
598
- /** Move the bubble to a location relative to the anchor's centre. */
599
- private positionBubble_() {
600
- let left = this.anchorXY_.x;
601
- if (this.workspace_.RTL) {
602
- left -= this.relativeLeft_ + this.width_;
603
- } else {
604
- left += this.relativeLeft_;
605
- }
606
- const top = this.relativeTop_ + this.anchorXY_.y;
607
- this.moveTo(left, top);
608
- }
609
-
610
- /**
611
- * Move the bubble group to the specified location in workspace coordinates.
612
- * @param x The x position to move to.
613
- * @param y The y position to move to.
614
- * @internal
615
- */
616
- moveTo(x: number, y: number) {
617
- this.bubbleGroup_?.setAttribute(
618
- 'transform', 'translate(' + x + ',' + y + ')');
619
- }
620
-
621
- /**
622
- * Triggers a move callback if one exists at the end of a drag.
623
- * @param adding True if adding, false if removing.
624
- * @internal
625
- */
626
- setDragging(adding: boolean) {
627
- if (!adding && this.moveCallback_) {
628
- this.moveCallback_();
629
- }
630
- }
631
-
632
- /**
633
- * Get the dimensions of this bubble.
634
- * @return The height and width of the bubble.
635
- */
636
- getBubbleSize(): Size {
637
- return new Size(this.width_, this.height_);
638
- }
639
-
640
- /**
641
- * Size this bubble.
642
- * @param width Width of the bubble.
643
- * @param height Height of the bubble.
644
- */
645
- setBubbleSize(width: number, height: number) {
646
- const doubleBorderWidth = 2 * Bubble.BORDER_WIDTH;
647
- // Minimum size of a bubble.
648
- width = Math.max(width, doubleBorderWidth + 45);
649
- height = Math.max(height, doubleBorderWidth + 20);
650
- this.width_ = width;
651
- this.height_ = height;
652
- this.bubbleBack_?.setAttribute('width', width.toString());
653
- this.bubbleBack_?.setAttribute('height', height.toString());
654
- if (this.resizeGroup_) {
655
- if (this.workspace_.RTL) {
656
- // Mirror the resize group.
657
- const resizeSize = 2 * Bubble.BORDER_WIDTH;
658
- this.resizeGroup_.setAttribute(
659
- 'transform',
660
- 'translate(' + resizeSize + ',' + (height - doubleBorderWidth) +
661
- ') scale(-1 1)');
662
- } else {
663
- this.resizeGroup_.setAttribute(
664
- 'transform',
665
- 'translate(' + (width - doubleBorderWidth) + ',' +
666
- (height - doubleBorderWidth) + ')');
667
- }
668
- }
669
- if (this.autoLayout_) {
670
- this.layoutBubble_();
671
- }
672
- this.positionBubble_();
673
- this.renderArrow_();
674
-
675
- // Allow the contents to resize.
676
- if (this.resizeCallback_) {
677
- this.resizeCallback_();
678
- }
679
- }
680
-
681
- /** Draw the arrow between the bubble and the origin. */
682
- private renderArrow_() {
683
- const steps = [];
684
- // Find the relative coordinates of the center of the bubble.
685
- const relBubbleX = this.width_ / 2;
686
- const relBubbleY = this.height_ / 2;
687
- // Find the relative coordinates of the center of the anchor.
688
- let relAnchorX = -this.relativeLeft_;
689
- let relAnchorY = -this.relativeTop_;
690
- if (relBubbleX === relAnchorX && relBubbleY === relAnchorY) {
691
- // Null case. Bubble is directly on top of the anchor.
692
- // Short circuit this rather than wade through divide by zeros.
693
- steps.push('M ' + relBubbleX + ',' + relBubbleY);
694
- } else {
695
- // Compute the angle of the arrow's line.
696
- const rise = relAnchorY - relBubbleY;
697
- let run = relAnchorX - relBubbleX;
698
- if (this.workspace_.RTL) {
699
- run *= -1;
700
- }
701
- const hypotenuse = Math.sqrt(rise * rise + run * run);
702
- let angle = Math.acos(run / hypotenuse);
703
- if (rise < 0) {
704
- angle = 2 * Math.PI - angle;
705
- }
706
- // Compute a line perpendicular to the arrow.
707
- let rightAngle = angle + Math.PI / 2;
708
- if (rightAngle > Math.PI * 2) {
709
- rightAngle -= Math.PI * 2;
710
- }
711
- const rightRise = Math.sin(rightAngle);
712
- const rightRun = Math.cos(rightAngle);
713
-
714
- // Calculate the thickness of the base of the arrow.
715
- const bubbleSize = this.getBubbleSize();
716
- let thickness =
717
- (bubbleSize.width + bubbleSize.height) / Bubble.ARROW_THICKNESS;
718
- thickness = Math.min(thickness, bubbleSize.width, bubbleSize.height) / 4;
719
-
720
- // Back the tip of the arrow off of the anchor.
721
- const backoffRatio = 1 - Bubble.ANCHOR_RADIUS / hypotenuse;
722
- relAnchorX = relBubbleX + backoffRatio * run;
723
- relAnchorY = relBubbleY + backoffRatio * rise;
724
-
725
- // Coordinates for the base of the arrow.
726
- const baseX1 = relBubbleX + thickness * rightRun;
727
- const baseY1 = relBubbleY + thickness * rightRise;
728
- const baseX2 = relBubbleX - thickness * rightRun;
729
- const baseY2 = relBubbleY - thickness * rightRise;
730
-
731
- // Distortion to curve the arrow.
732
- let swirlAngle = angle + this.arrow_radians_;
733
- if (swirlAngle > Math.PI * 2) {
734
- swirlAngle -= Math.PI * 2;
735
- }
736
- const swirlRise = Math.sin(swirlAngle) * hypotenuse / Bubble.ARROW_BEND;
737
- const swirlRun = Math.cos(swirlAngle) * hypotenuse / Bubble.ARROW_BEND;
738
-
739
- steps.push('M' + baseX1 + ',' + baseY1);
740
- steps.push(
741
- 'C' + (baseX1 + swirlRun) + ',' + (baseY1 + swirlRise) + ' ' +
742
- relAnchorX + ',' + relAnchorY + ' ' + relAnchorX + ',' + relAnchorY);
743
- steps.push(
744
- 'C' + relAnchorX + ',' + relAnchorY + ' ' + (baseX2 + swirlRun) +
745
- ',' + (baseY2 + swirlRise) + ' ' + baseX2 + ',' + baseY2);
746
- }
747
- steps.push('z');
748
- this.bubbleArrow_?.setAttribute('d', steps.join(' '));
749
- }
750
-
751
- /**
752
- * Change the colour of a bubble.
753
- * @param hexColour Hex code of colour.
754
- */
755
- setColour(hexColour: string) {
756
- this.bubbleBack_?.setAttribute('fill', hexColour);
757
- this.bubbleArrow_?.setAttribute('fill', hexColour);
758
- }
759
-
760
- /** Dispose of this bubble. */
761
- dispose() {
762
- if (this.onMouseDownBubbleWrapper_) {
763
- browserEvents.unbind(this.onMouseDownBubbleWrapper_);
764
- }
765
- if (this.onMouseDownResizeWrapper_) {
766
- browserEvents.unbind(this.onMouseDownResizeWrapper_);
767
- }
768
- Bubble.unbindDragEvents_();
769
- dom.removeNode(this.bubbleGroup_);
770
- this.disposed = true;
771
- }
772
-
773
- /**
774
- * Move this bubble during a drag, taking into account whether or not there is
775
- * a drag surface.
776
- * @param dragSurface The surface that carries rendered items during a drag,
777
- * or null if no drag surface is in use.
778
- * @param newLoc The location to translate to, in workspace coordinates.
779
- * @internal
780
- */
781
- moveDuringDrag(dragSurface: BlockDragSurfaceSvg, newLoc: Coordinate) {
782
- if (dragSurface) {
783
- dragSurface.translateSurface(newLoc.x, newLoc.y);
784
- } else {
785
- this.moveTo(newLoc.x, newLoc.y);
786
- }
787
- if (this.workspace_.RTL) {
788
- this.relativeLeft_ = this.anchorXY_.x - newLoc.x - this.width_;
789
- } else {
790
- this.relativeLeft_ = newLoc.x - this.anchorXY_.x;
791
- }
792
- this.relativeTop_ = newLoc.y - this.anchorXY_.y;
793
- this.renderArrow_();
794
- }
795
-
796
- /**
797
- * Return the coordinates of the top-left corner of this bubble's body
798
- * relative to the drawing surface's origin (0,0), in workspace units.
799
- * @return Object with .x and .y properties.
800
- */
801
- getRelativeToSurfaceXY(): Coordinate {
802
- return new Coordinate(
803
- this.workspace_.RTL ?
804
- -this.relativeLeft_ + this.anchorXY_.x - this.width_ :
805
- this.anchorXY_.x + this.relativeLeft_,
806
- this.anchorXY_.y + this.relativeTop_);
807
- }
808
-
809
- /**
810
- * Set whether auto-layout of this bubble is enabled. The first time a bubble
811
- * is shown it positions itself to not cover any blocks. Once a user has
812
- * dragged it to reposition, it renders where the user put it.
813
- * @param enable True if auto-layout should be enabled, false otherwise.
814
- * @internal
815
- */
816
- setAutoLayout(enable: boolean) {
817
- this.autoLayout_ = enable;
818
- }
819
-
820
- /** Stop binding to the global mouseup and mousemove events. */
821
- private static unbindDragEvents_() {
822
- if (Bubble.onMouseUpWrapper_) {
823
- browserEvents.unbind(Bubble.onMouseUpWrapper_);
824
- Bubble.onMouseUpWrapper_ = null;
825
- }
826
- if (Bubble.onMouseMoveWrapper_) {
827
- browserEvents.unbind(Bubble.onMouseMoveWrapper_);
828
- Bubble.onMouseMoveWrapper_ = null;
829
- }
830
- }
831
-
832
- /**
833
- * Handle a mouse-up event while dragging a bubble's border or resize handle.
834
- * @param _e Mouse up event.
835
- */
836
- private static bubbleMouseUp_(_e: MouseEvent) {
837
- Touch.clearTouchIdentifier();
838
- Bubble.unbindDragEvents_();
839
- }
840
-
841
- /**
842
- * Create the text for a non editable bubble.
843
- * @param text The text to display.
844
- * @return The top-level node of the text.
845
- * @internal
846
- */
847
- static textToDom(text: string): SVGTextElement {
848
- const paragraph = dom.createSvgElement(Svg.TEXT, {
849
- 'class': 'blocklyText blocklyBubbleText blocklyNoPointerEvents',
850
- 'y': Bubble.BORDER_WIDTH,
851
- });
852
- const lines = text.split('\n');
853
- for (let i = 0; i < lines.length; i++) {
854
- const tspanElement = dom.createSvgElement(
855
- Svg.TSPAN, {'dy': '1em', 'x': Bubble.BORDER_WIDTH}, paragraph);
856
- const textNode = document.createTextNode(lines[i]);
857
- tspanElement.appendChild(textNode);
858
- }
859
- return paragraph;
860
- }
861
-
862
- /**
863
- * Creates a bubble that can not be edited.
864
- * @param paragraphElement The text element for the non editable bubble.
865
- * @param block The block that the bubble is attached to.
866
- * @param iconXY The coordinate of the icon.
867
- * @return The non editable bubble.
868
- * @internal
869
- */
870
- static createNonEditableBubble(
871
- paragraphElement: SVGTextElement, block: BlockSvg,
872
- iconXY: Coordinate): Bubble {
873
- const bubble = new Bubble(
874
- block.workspace!, paragraphElement, block.pathObject.svgPath, (iconXY),
875
- null, null);
876
- // Expose this bubble's block's ID on its top-level SVG group.
877
- bubble.setSvgId(block.id);
878
- if (block.RTL) {
879
- // Right-align the paragraph.
880
- // This cannot be done until the bubble is rendered on screen.
881
- const maxWidth = paragraphElement.getBBox().width;
882
- for (let i = 0, textElement;
883
- textElement = paragraphElement.childNodes[i] as SVGTSpanElement;
884
- i++) {
885
- textElement.setAttribute('text-anchor', 'end');
886
- textElement.setAttribute(
887
- 'x', (maxWidth + Bubble.BORDER_WIDTH).toString());
888
- }
889
- }
890
- return bubble;
891
- }
892
- }