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.
- package/blockly.min.js +401 -405
- package/blockly_compressed.js +398 -402
- package/blockly_compressed.js.map +1 -1
- package/blocks.d.ts +0 -5
- package/blocks_compressed.js +3 -3
- package/blocks_compressed.js.map +1 -1
- package/closure/goog/base.d.ts +1 -0
- package/closure/goog/base_minimal.d.ts +1 -0
- package/closure/goog/goog.d.ts +1 -0
- package/core/any_aliases.d.ts +1 -0
- package/core/block.d.ts +145 -53
- package/core/block_animations.d.ts +5 -0
- package/core/block_drag_surface.d.ts +18 -5
- package/core/block_dragger.d.ts +20 -5
- package/core/block_svg.d.ts +89 -21
- package/core/blockly.d.ts +29 -8
- package/core/blockly_options.d.ts +2 -0
- package/core/blocks.d.ts +2 -0
- package/core/browser_events.d.ts +16 -7
- package/core/bubble.d.ts +42 -12
- package/core/bubble_dragger.d.ts +9 -2
- package/core/bump_objects.d.ts +6 -2
- package/core/clipboard.d.ts +6 -2
- package/core/comment.d.ts +13 -3
- package/core/common.d.ts +35 -9
- package/core/component_manager.d.ts +16 -6
- package/core/config.d.ts +1 -0
- package/core/connection.d.ts +48 -18
- package/core/connection_checker.d.ts +16 -7
- package/core/connection_db.d.ts +17 -6
- package/core/connection_type.d.ts +2 -0
- package/core/constants.d.ts +3 -0
- package/core/contextmenu.d.ts +15 -5
- package/core/contextmenu_items.d.ts +15 -0
- package/core/contextmenu_registry.d.ts +12 -7
- package/core/css.d.ts +3 -0
- package/core/delete_area.d.ts +5 -1
- package/core/dialog.d.ts +14 -7
- package/core/drag_target.d.ts +10 -2
- package/core/dropdowndiv.d.ts +42 -10
- package/core/events/events.d.ts +1 -0
- package/core/events/events_abstract.d.ts +10 -3
- package/core/events/events_block_base.d.ts +5 -1
- package/core/events/events_block_change.d.ts +10 -3
- package/core/events/events_block_create.d.ts +6 -1
- package/core/events/events_block_delete.d.ts +6 -1
- package/core/events/events_block_drag.d.ts +5 -1
- package/core/events/events_block_move.d.ts +10 -3
- package/core/events/events_bubble_open.d.ts +6 -2
- package/core/events/events_click.d.ts +5 -1
- package/core/events/events_comment_base.d.ts +6 -1
- package/core/events/events_comment_change.d.ts +8 -2
- package/core/events/events_comment_create.d.ts +6 -1
- package/core/events/events_comment_delete.d.ts +6 -1
- package/core/events/events_comment_move.d.ts +9 -2
- package/core/events/events_marker_move.d.ts +5 -1
- package/core/events/events_selected.d.ts +5 -1
- package/core/events/events_theme_change.d.ts +5 -1
- package/core/events/events_toolbox_item_select.d.ts +5 -1
- package/core/events/events_trashcan_open.d.ts +5 -1
- package/core/events/events_ui.d.ts +5 -1
- package/core/events/events_ui_base.d.ts +2 -0
- package/core/events/events_var_base.d.ts +5 -1
- package/core/events/events_var_create.d.ts +6 -1
- package/core/events/events_var_delete.d.ts +6 -1
- package/core/events/events_var_rename.d.ts +6 -1
- package/core/events/events_viewport.d.ts +5 -1
- package/core/events/utils.d.ts +50 -7
- package/core/events/workspace_events.d.ts +5 -1
- package/core/extensions.d.ts +14 -4
- package/core/field.d.ts +93 -34
- package/core/field_angle.d.ts +14 -3
- package/core/field_checkbox.d.ts +20 -7
- package/core/field_colour.d.ts +22 -6
- package/core/field_dropdown.d.ts +28 -8
- package/core/field_image.d.ts +15 -4
- package/core/field_label.d.ts +8 -2
- package/core/field_label_serializable.d.ts +4 -1
- package/core/field_multilineinput.d.ts +21 -6
- package/core/field_number.d.ts +22 -6
- package/core/field_registry.d.ts +8 -2
- package/core/field_textinput.d.ts +28 -8
- package/core/field_variable.d.ts +36 -13
- package/core/flyout_base.d.ts +70 -24
- package/core/flyout_button.d.ts +12 -5
- package/core/flyout_horizontal.d.ts +14 -6
- package/core/flyout_metrics_manager.d.ts +6 -3
- package/core/flyout_vertical.d.ts +14 -6
- package/core/generator.d.ts +39 -20
- package/core/gesture.d.ts +48 -13
- package/core/grid.d.ts +19 -15
- package/core/icon.d.ts +12 -3
- package/core/inject.d.ts +3 -1
- package/core/input.d.ts +25 -10
- package/core/input_types.d.ts +2 -0
- package/core/insertion_marker_manager.d.ts +27 -9
- package/core/interfaces/i_ast_node_location.d.ts +2 -0
- package/core/interfaces/i_ast_node_location_svg.d.ts +4 -0
- package/core/interfaces/i_ast_node_location_with_block.d.ts +4 -1
- package/core/interfaces/i_autohideable.d.ts +3 -0
- package/core/interfaces/i_block_dragger.d.ts +7 -1
- package/core/interfaces/i_bounded_element.d.ts +5 -1
- package/core/interfaces/i_bubble.d.ts +11 -2
- package/core/interfaces/i_collapsible_toolbox_item.d.ts +6 -2
- package/core/interfaces/i_component.d.ts +2 -0
- package/core/interfaces/i_connection_checker.d.ts +14 -6
- package/core/interfaces/i_contextmenu.d.ts +2 -0
- package/core/interfaces/i_copyable.d.ts +3 -1
- package/core/interfaces/i_deletable.d.ts +4 -1
- package/core/interfaces/i_delete_area.d.ts +4 -1
- package/core/interfaces/i_drag_target.d.ts +10 -2
- package/core/interfaces/i_draggable.d.ts +2 -0
- package/core/interfaces/i_flyout.d.ts +27 -11
- package/core/interfaces/i_keyboard_accessible.d.ts +4 -1
- package/core/interfaces/i_metrics_manager.d.ts +24 -12
- package/core/interfaces/i_movable.d.ts +4 -1
- package/core/interfaces/i_positionable.d.ts +5 -1
- package/core/interfaces/i_registrable.d.ts +2 -0
- package/core/interfaces/i_registrable_field.d.ts +2 -0
- package/core/interfaces/i_selectable.d.ts +2 -0
- package/core/interfaces/i_selectable_toolbox_item.d.ts +10 -3
- package/core/interfaces/i_serializer.d.ts +6 -1
- package/core/interfaces/i_styleable.d.ts +4 -0
- package/core/interfaces/i_toolbox.d.ts +17 -6
- package/core/interfaces/i_toolbox_item.d.ts +17 -7
- package/core/internal_constants.d.ts +6 -0
- package/core/keyboard_nav/ast_node.d.ts +55 -28
- package/core/keyboard_nav/basic_cursor.d.ts +20 -9
- package/core/keyboard_nav/cursor.d.ts +11 -5
- package/core/keyboard_nav/marker.d.ts +9 -2
- package/core/keyboard_nav/tab_navigate_cursor.d.ts +4 -1
- package/core/main.d.ts +1 -0
- package/core/marker_manager.d.ts +13 -2
- package/core/menu.d.ts +23 -5
- package/core/menuitem.d.ts +22 -7
- package/core/metrics_manager.d.ts +30 -15
- package/core/msg.d.ts +1 -0
- package/core/mutator.d.ts +19 -7
- package/core/names.d.ts +20 -8
- package/core/options.d.ts +12 -6
- package/core/positionable_helpers.d.ts +11 -3
- package/core/procedures.d.ts +27 -10
- package/core/registry.d.ts +19 -8
- package/core/rendered_connection.d.ts +28 -7
- package/core/renderers/common/block_rendering.d.ts +9 -2
- package/core/renderers/common/constants.d.ts +49 -17
- package/core/renderers/common/debug.d.ts +5 -1
- package/core/renderers/common/debugger.d.ts +12 -1
- package/core/renderers/common/drawer.d.ts +12 -0
- package/core/renderers/common/i_path_object.d.ts +15 -0
- package/core/renderers/common/info.d.ts +25 -8
- package/core/renderers/common/marker_svg.d.ts +35 -6
- package/core/renderers/common/path_object.d.ts +20 -0
- package/core/renderers/common/renderer.d.ts +33 -12
- package/core/renderers/geras/constants.d.ts +2 -0
- package/core/renderers/geras/drawer.d.ts +2 -0
- package/core/renderers/geras/geras.d.ts +3 -2
- package/core/renderers/geras/highlight_constants.d.ts +9 -6
- package/core/renderers/geras/highlighter.d.ts +12 -1
- package/core/renderers/geras/info.d.ts +4 -1
- package/core/renderers/geras/measurables/inline_input.d.ts +2 -0
- package/core/renderers/geras/measurables/statement_input.d.ts +2 -0
- package/core/renderers/geras/path_object.d.ts +4 -0
- package/core/renderers/geras/renderer.d.ts +16 -6
- package/core/renderers/measurables/base.d.ts +2 -0
- package/core/renderers/measurables/bottom_row.d.ts +9 -3
- package/core/renderers/measurables/connection.d.ts +2 -0
- package/core/renderers/measurables/external_value_input.d.ts +2 -1
- package/core/renderers/measurables/field.d.ts +2 -1
- package/core/renderers/measurables/hat.d.ts +2 -1
- package/core/renderers/measurables/icon.d.ts +3 -1
- package/core/renderers/measurables/in_row_spacer.d.ts +2 -1
- package/core/renderers/measurables/inline_input.d.ts +2 -1
- package/core/renderers/measurables/input_connection.d.ts +2 -0
- package/core/renderers/measurables/input_row.d.ts +4 -1
- package/core/renderers/measurables/jagged_edge.d.ts +2 -1
- package/core/renderers/measurables/next_connection.d.ts +2 -1
- package/core/renderers/measurables/output_connection.d.ts +2 -1
- package/core/renderers/measurables/previous_connection.d.ts +2 -1
- package/core/renderers/measurables/round_corner.d.ts +2 -1
- package/core/renderers/measurables/row.d.ts +27 -5
- package/core/renderers/measurables/spacer_row.d.ts +2 -1
- package/core/renderers/measurables/square_corner.d.ts +2 -1
- package/core/renderers/measurables/statement_input.d.ts +2 -1
- package/core/renderers/measurables/top_row.d.ts +7 -3
- package/core/renderers/measurables/types.d.ts +54 -25
- package/core/renderers/minimalist/constants.d.ts +2 -0
- package/core/renderers/minimalist/drawer.d.ts +2 -0
- package/core/renderers/minimalist/info.d.ts +4 -1
- package/core/renderers/minimalist/minimalist.d.ts +2 -1
- package/core/renderers/minimalist/renderer.d.ts +8 -3
- package/core/renderers/thrasos/info.d.ts +4 -1
- package/core/renderers/thrasos/renderer.d.ts +4 -1
- package/core/renderers/thrasos/thrasos.d.ts +2 -1
- package/core/renderers/zelos/constants.d.ts +11 -3
- package/core/renderers/zelos/drawer.d.ts +3 -0
- package/core/renderers/zelos/info.d.ts +10 -5
- package/core/renderers/zelos/marker_svg.d.ts +5 -0
- package/core/renderers/zelos/measurables/bottom_row.d.ts +2 -0
- package/core/renderers/zelos/measurables/inputs.d.ts +2 -0
- package/core/renderers/zelos/measurables/row_elements.d.ts +2 -0
- package/core/renderers/zelos/measurables/top_row.d.ts +2 -0
- package/core/renderers/zelos/path_object.d.ts +8 -1
- package/core/renderers/zelos/renderer.d.ts +14 -6
- package/core/renderers/zelos/zelos.d.ts +3 -2
- package/core/scrollbar.d.ts +41 -9
- package/core/scrollbar_pair.d.ts +20 -6
- package/core/serialization/blocks.d.ts +10 -4
- package/core/serialization/exceptions.d.ts +5 -0
- package/core/serialization/priorities.d.ts +3 -0
- package/core/serialization/registry.d.ts +3 -0
- package/core/serialization/variables.d.ts +2 -0
- package/core/serialization/workspaces.d.ts +4 -1
- package/core/shortcut_items.d.ts +10 -0
- package/core/shortcut_registry.d.ts +25 -9
- package/core/sprites.d.ts +2 -4
- package/core/theme/classic.d.ts +2 -0
- package/core/theme/themes.d.ts +1 -0
- package/core/theme/zelos.d.ts +2 -0
- package/core/theme.d.ts +14 -3
- package/core/theme_manager.d.ts +10 -1
- package/core/toolbox/category.d.ts +42 -15
- package/core/toolbox/collapsible_category.d.ts +10 -3
- package/core/toolbox/separator.d.ts +4 -1
- package/core/toolbox/toolbox.d.ts +70 -22
- package/core/toolbox/toolbox_item.d.ts +17 -7
- package/core/tooltip.d.ts +22 -1
- package/core/touch.d.ts +18 -6
- package/core/touch_gesture.d.ts +16 -2
- package/core/trashcan.d.ts +27 -6
- package/core/utils/aria.d.ts +4 -0
- package/core/utils/array.d.ts +4 -2
- package/core/utils/colour.d.ts +24 -13
- package/core/utils/coordinate.d.ts +18 -8
- package/core/utils/deprecation.d.ts +6 -4
- package/core/utils/dom.d.ts +32 -12
- package/core/utils/idgenerator.d.ts +13 -3
- package/core/utils/keycodes.d.ts +1 -0
- package/core/utils/math.d.ts +7 -3
- package/core/utils/metrics.d.ts +1 -0
- package/core/utils/object.d.ts +7 -2
- package/core/utils/parsing.d.ts +9 -4
- package/core/utils/rect.d.ts +5 -3
- package/core/utils/sentinel.d.ts +2 -0
- package/core/utils/size.d.ts +4 -2
- package/core/utils/string.d.ts +13 -6
- package/core/utils/style.d.ts +14 -33
- package/core/utils/svg.d.ts +5 -2
- package/core/utils/svg_math.d.ts +15 -7
- package/core/utils/svg_paths.d.ts +20 -10
- package/core/utils/toolbox.d.ts +26 -5
- package/core/utils/useragent.d.ts +1 -12
- package/core/utils/xml.d.ts +13 -5
- package/core/utils.d.ts +43 -21
- package/core/variable_map.d.ts +26 -9
- package/core/variable_model.d.ts +5 -2
- package/core/variables.d.ts +33 -18
- package/core/variables_dynamic.d.ts +25 -5
- package/core/warning.d.ts +8 -3
- package/core/widgetdiv.d.ts +15 -6
- package/core/workspace.d.ts +80 -30
- package/core/workspace_audio.d.ts +6 -0
- package/core/workspace_comment.d.ts +33 -11
- package/core/workspace_comment_svg.d.ts +52 -9
- package/core/workspace_drag_surface_svg.d.ts +20 -14
- package/core/workspace_dragger.d.ts +6 -0
- package/core/workspace_svg.d.ts +174 -62
- package/core/xml.d.ts +26 -11
- package/core/zoom_controls.d.ts +16 -6
- package/core.d.ts +0 -5
- package/dart.d.ts +0 -5
- package/dart_compressed.js.map +1 -1
- package/index.d.ts +2 -6
- package/javascript.d.ts +0 -5
- package/javascript_compressed.js.map +1 -1
- package/lua.d.ts +0 -5
- package/lua_compressed.js.map +1 -1
- package/package.json +6 -3
- package/php.d.ts +0 -5
- package/php_compressed.js.map +1 -1
- package/python.d.ts +0 -5
- package/python_compressed.js.map +1 -1
- package/blocks/blocks.js +0 -48
- package/blocks/colour.js +0 -121
- package/blocks/lists.js +0 -996
- package/blocks/logic.js +0 -665
- package/blocks/loops.js +0 -375
- package/blocks/math.js +0 -594
- package/blocks/procedures.js +0 -1196
- package/blocks/text.js +0 -1000
- package/blocks/variables.js +0 -176
- package/blocks/variables_dynamic.js +0 -192
- package/core/any_aliases.ts +0 -1
- package/core/block.ts +0 -2102
- package/core/block_animations.ts +0 -202
- package/core/block_drag_surface.ts +0 -237
- package/core/block_dragger.ts +0 -447
- package/core/block_svg.ts +0 -1758
- package/core/blockly.js +0 -890
- package/core/blockly.ts +0 -749
- package/core/blockly_options.ts +0 -81
- package/core/blocks.ts +0 -29
- package/core/browser_events.ts +0 -289
- package/core/bubble.ts +0 -892
- package/core/bubble_dragger.ts +0 -229
- package/core/bump_objects.ts +0 -182
- package/core/clipboard.ts +0 -91
- package/core/comment.ts +0 -398
- package/core/common.ts +0 -288
- package/core/component_manager.ts +0 -211
- package/core/config.ts +0 -80
- package/core/connection.ts +0 -692
- package/core/connection_checker.ts +0 -301
- package/core/connection_db.ts +0 -289
- package/core/connection_type.ts +0 -32
- package/core/constants.ts +0 -29
- package/core/contextmenu.ts +0 -363
- package/core/contextmenu_items.ts +0 -576
- package/core/contextmenu_registry.ts +0 -179
- package/core/css.ts +0 -560
- package/core/delete_area.ts +0 -82
- package/core/dialog.ts +0 -127
- package/core/drag_target.ts +0 -94
- package/core/dropdowndiv.ts +0 -683
- package/core/events/events.ts +0 -123
- package/core/events/events_abstract.ts +0 -112
- package/core/events/events_block_base.ts +0 -65
- package/core/events/events_block_change.ts +0 -176
- package/core/events/events_block_create.ts +0 -114
- package/core/events/events_block_delete.ts +0 -126
- package/core/events/events_block_drag.ts +0 -82
- package/core/events/events_block_move.ts +0 -206
- package/core/events/events_bubble_open.ts +0 -82
- package/core/events/events_click.ts +0 -84
- package/core/events/events_comment_base.ts +0 -107
- package/core/events/events_comment_change.ts +0 -108
- package/core/events/events_comment_create.ts +0 -82
- package/core/events/events_comment_delete.ts +0 -77
- package/core/events/events_comment_move.ts +0 -154
- package/core/events/events_marker_move.ts +0 -99
- package/core/events/events_selected.ts +0 -78
- package/core/events/events_theme_change.ts +0 -67
- package/core/events/events_toolbox_item_select.ts +0 -79
- package/core/events/events_trashcan_open.ts +0 -68
- package/core/events/events_ui.ts +0 -89
- package/core/events/events_ui_base.ts +0 -54
- package/core/events/events_var_base.ts +0 -65
- package/core/events/events_var_create.ts +0 -88
- package/core/events/events_var_delete.ts +0 -88
- package/core/events/events_var_rename.ts +0 -89
- package/core/events/events_viewport.ts +0 -100
- package/core/events/utils.ts +0 -529
- package/core/events/workspace_events.ts +0 -86
- package/core/extensions.ts +0 -504
- package/core/field.ts +0 -1206
- package/core/field_angle.ts +0 -563
- package/core/field_checkbox.ts +0 -243
- package/core/field_colour.ts +0 -632
- package/core/field_dropdown.ts +0 -773
- package/core/field_image.ts +0 -282
- package/core/field_label.ts +0 -152
- package/core/field_label_serializable.ts +0 -76
- package/core/field_multilineinput.ts +0 -466
- package/core/field_number.ts +0 -327
- package/core/field_registry.ts +0 -87
- package/core/field_textinput.ts +0 -591
- package/core/field_variable.ts +0 -545
- package/core/flyout_base.ts +0 -1165
- package/core/flyout_button.ts +0 -292
- package/core/flyout_horizontal.ts +0 -381
- package/core/flyout_metrics_manager.ts +0 -94
- package/core/flyout_vertical.ts +0 -384
- package/core/generator.ts +0 -539
- package/core/gesture.ts +0 -946
- package/core/grid.ts +0 -192
- package/core/icon.ts +0 -189
- package/core/inject.ts +0 -390
- package/core/input.ts +0 -309
- package/core/input_types.ts +0 -32
- package/core/insertion_marker_manager.ts +0 -788
- package/core/interfaces/i_ast_node_location.ts +0 -23
- package/core/interfaces/i_ast_node_location_svg.ts +0 -37
- package/core/interfaces/i_ast_node_location_with_block.ts +0 -38
- package/core/interfaces/i_autohideable.ts +0 -34
- package/core/interfaces/i_block_dragger.ts +0 -67
- package/core/interfaces/i_bounded_element.ts +0 -42
- package/core/interfaces/i_bubble.ts +0 -88
- package/core/interfaces/i_collapsible_toolbox_item.ts +0 -47
- package/core/interfaces/i_component.ts +0 -32
- package/core/interfaces/i_connection_checker.ts +0 -102
- package/core/interfaces/i_contextmenu.ts +0 -26
- package/core/interfaces/i_copyable.ts +0 -40
- package/core/interfaces/i_deletable.ts +0 -29
- package/core/interfaces/i_delete_area.ts +0 -46
- package/core/interfaces/i_drag_target.ts +0 -84
- package/core/interfaces/i_draggable.ts +0 -25
- package/core/interfaces/i_flyout.ts +0 -186
- package/core/interfaces/i_keyboard_accessible.ts +0 -35
- package/core/interfaces/i_metrics_manager.ts +0 -151
- package/core/interfaces/i_movable.ts +0 -29
- package/core/interfaces/i_positionable.ts +0 -50
- package/core/interfaces/i_registrable.ts +0 -25
- package/core/interfaces/i_registrable_field.ts +0 -31
- package/core/interfaces/i_selectable.ts +0 -34
- package/core/interfaces/i_selectable_toolbox_item.ts +0 -64
- package/core/interfaces/i_serializer.ts +0 -65
- package/core/interfaces/i_styleable.ts +0 -35
- package/core/interfaces/i_toolbox.ts +0 -127
- package/core/interfaces/i_toolbox_item.ts +0 -84
- package/core/internal_constants.ts +0 -67
- package/core/keyboard_nav/ast_node.ts +0 -717
- package/core/keyboard_nav/basic_cursor.ts +0 -214
- package/core/keyboard_nav/cursor.ts +0 -134
- package/core/keyboard_nav/marker.ts +0 -115
- package/core/keyboard_nav/tab_navigate_cursor.ts +0 -48
- package/core/main.js +0 -303
- package/core/marker_manager.ts +0 -181
- package/core/menu.ts +0 -449
- package/core/menuitem.ts +0 -240
- package/core/metrics_manager.ts +0 -456
- package/core/msg.ts +0 -20
- package/core/mutator.ts +0 -560
- package/core/names.ts +0 -267
- package/core/options.ts +0 -365
- package/core/positionable_helpers.ts +0 -181
- package/core/procedures.ts +0 -443
- package/core/registry.ts +0 -339
- package/core/rendered_connection.ts +0 -568
- package/core/renderers/common/block_rendering.ts +0 -164
- package/core/renderers/common/constants.ts +0 -1124
- package/core/renderers/common/debug.ts +0 -61
- package/core/renderers/common/debugger.ts +0 -433
- package/core/renderers/common/drawer.ts +0 -450
- package/core/renderers/common/i_path_object.ts +0 -161
- package/core/renderers/common/info.ts +0 -718
- package/core/renderers/common/marker_svg.ts +0 -680
- package/core/renderers/common/path_object.ts +0 -272
- package/core/renderers/common/renderer.ts +0 -271
- package/core/renderers/geras/constants.ts +0 -61
- package/core/renderers/geras/drawer.ts +0 -176
- package/core/renderers/geras/geras.ts +0 -37
- package/core/renderers/geras/highlight_constants.ts +0 -337
- package/core/renderers/geras/highlighter.ts +0 -306
- package/core/renderers/geras/info.ts +0 -450
- package/core/renderers/geras/measurables/inline_input.ts +0 -51
- package/core/renderers/geras/measurables/statement_input.ts +0 -50
- package/core/renderers/geras/path_object.ts +0 -138
- package/core/renderers/geras/renderer.ts +0 -126
- package/core/renderers/measurables/base.ts +0 -53
- package/core/renderers/measurables/bottom_row.ts +0 -120
- package/core/renderers/measurables/connection.ts +0 -52
- package/core/renderers/measurables/external_value_input.ts +0 -65
- package/core/renderers/measurables/field.ts +0 -63
- package/core/renderers/measurables/hat.ts +0 -48
- package/core/renderers/measurables/icon.ts +0 -54
- package/core/renderers/measurables/in_row_spacer.ts +0 -44
- package/core/renderers/measurables/inline_input.ts +0 -76
- package/core/renderers/measurables/input_connection.ts +0 -66
- package/core/renderers/measurables/input_row.ts +0 -82
- package/core/renderers/measurables/jagged_edge.ts +0 -43
- package/core/renderers/measurables/next_connection.ts +0 -47
- package/core/renderers/measurables/output_connection.ts +0 -56
- package/core/renderers/measurables/previous_connection.ts +0 -47
- package/core/renderers/measurables/round_corner.ts +0 -49
- package/core/renderers/measurables/row.ts +0 -225
- package/core/renderers/measurables/spacer_row.ts +0 -55
- package/core/renderers/measurables/square_corner.ts +0 -47
- package/core/renderers/measurables/statement_input.ts +0 -55
- package/core/renderers/measurables/top_row.ts +0 -122
- package/core/renderers/measurables/types.ts +0 -332
- package/core/renderers/minimalist/constants.ts +0 -32
- package/core/renderers/minimalist/drawer.ts +0 -38
- package/core/renderers/minimalist/info.ts +0 -52
- package/core/renderers/minimalist/minimalist.ts +0 -22
- package/core/renderers/minimalist/renderer.ts +0 -71
- package/core/renderers/thrasos/info.ts +0 -338
- package/core/renderers/thrasos/renderer.ts +0 -48
- package/core/renderers/thrasos/thrasos.ts +0 -20
- package/core/renderers/zelos/constants.ts +0 -858
- package/core/renderers/zelos/drawer.ts +0 -228
- package/core/renderers/zelos/info.ts +0 -593
- package/core/renderers/zelos/marker_svg.ts +0 -151
- package/core/renderers/zelos/measurables/bottom_row.ts +0 -53
- package/core/renderers/zelos/measurables/inputs.ts +0 -56
- package/core/renderers/zelos/measurables/row_elements.ts +0 -45
- package/core/renderers/zelos/measurables/top_row.ts +0 -58
- package/core/renderers/zelos/path_object.ts +0 -215
- package/core/renderers/zelos/renderer.ts +0 -142
- package/core/renderers/zelos/zelos.ts +0 -39
- package/core/scrollbar.ts +0 -870
- package/core/scrollbar_pair.ts +0 -321
- package/core/serialization/blocks.ts +0 -706
- package/core/serialization/exceptions.ts +0 -98
- package/core/serialization/priorities.ts +0 -32
- package/core/serialization/registry.ts +0 -43
- package/core/serialization/variables.ts +0 -96
- package/core/serialization/workspaces.ts +0 -106
- package/core/shortcut_items.ts +0 -266
- package/core/shortcut_registry.ts +0 -355
- package/core/sprites.ts +0 -29
- package/core/theme/classic.ts +0 -54
- package/core/theme/themes.ts +0 -22
- package/core/theme/zelos.ts +0 -91
- package/core/theme.ts +0 -221
- package/core/theme_manager.ts +0 -186
- package/core/toolbox/category.ts +0 -679
- package/core/toolbox/collapsible_category.ts +0 -273
- package/core/toolbox/separator.ts +0 -105
- package/core/toolbox/toolbox.ts +0 -1044
- package/core/toolbox/toolbox_item.ts +0 -147
- package/core/tooltip.ts +0 -463
- package/core/touch.ts +0 -306
- package/core/touch_gesture.ts +0 -295
- package/core/trashcan.ts +0 -671
- package/core/utils/aria.ts +0 -160
- package/core/utils/array.ts +0 -32
- package/core/utils/colour.ts +0 -276
- package/core/utils/coordinate.ts +0 -124
- package/core/utils/deprecation.ts +0 -41
- package/core/utils/dom.ts +0 -408
- package/core/utils/idgenerator.ts +0 -80
- package/core/utils/keycodes.ts +0 -169
- package/core/utils/math.ts +0 -61
- package/core/utils/metrics.ts +0 -97
- package/core/utils/object.ts +0 -95
- package/core/utils/parsing.ts +0 -261
- package/core/utils/rect.ts +0 -62
- package/core/utils/sentinel.ts +0 -23
- package/core/utils/size.ts +0 -51
- package/core/utils/string.ts +0 -308
- package/core/utils/style.ts +0 -306
- package/core/utils/svg.ts +0 -88
- package/core/utils/svg_math.ts +0 -269
- package/core/utils/svg_paths.ts +0 -140
- package/core/utils/toolbox.ts +0 -433
- package/core/utils/useragent.ts +0 -135
- package/core/utils/xml.ts +0 -97
- package/core/utils.ts +0 -428
- package/core/variable_map.ts +0 -392
- package/core/variable_model.ts +0 -82
- package/core/variables.ts +0 -596
- package/core/variables_dynamic.ts +0 -133
- package/core/warning.ts +0 -161
- package/core/widgetdiv.ts +0 -257
- package/core/workspace.ts +0 -801
- package/core/workspace_audio.ts +0 -156
- package/core/workspace_comment.ts +0 -398
- package/core/workspace_comment_svg.ts +0 -1127
- package/core/workspace_drag_surface_svg.ts +0 -187
- package/core/workspace_dragger.ts +0 -104
- package/core/workspace_svg.ts +0 -2655
- package/core/xml.ts +0 -1023
- package/core/zoom_controls.ts +0 -441
- package/generators/dart/all.js +0 -27
- package/generators/dart/colour.js +0 -105
- package/generators/dart/lists.js +0 -431
- package/generators/dart/logic.js +0 -123
- package/generators/dart/loops.js +0 -161
- package/generators/dart/math.js +0 -446
- package/generators/dart/procedures.js +0 -105
- package/generators/dart/text.js +0 -338
- package/generators/dart/variables.js +0 -32
- package/generators/dart/variables_dynamic.js +0 -21
- package/generators/dart.js +0 -303
- package/generators/javascript/all.js +0 -27
- package/generators/javascript/colour.js +0 -85
- package/generators/javascript/lists.js +0 -405
- package/generators/javascript/logic.js +0 -127
- package/generators/javascript/loops.js +0 -180
- package/generators/javascript/math.js +0 -401
- package/generators/javascript/procedures.js +0 -110
- package/generators/javascript/text.js +0 -371
- package/generators/javascript/variables.js +0 -32
- package/generators/javascript/variables_dynamic.js +0 -21
- package/generators/javascript.js +0 -322
- package/generators/lua/all.js +0 -27
- package/generators/lua/colour.js +0 -71
- package/generators/lua/lists.js +0 -348
- package/generators/lua/logic.js +0 -112
- package/generators/lua/loops.js +0 -168
- package/generators/lua/math.js +0 -406
- package/generators/lua/procedures.js +0 -106
- package/generators/lua/text.js +0 -327
- package/generators/lua/variables.js +0 -31
- package/generators/lua/variables_dynamic.js +0 -21
- package/generators/lua.js +0 -206
- package/generators/php/all.js +0 -27
- package/generators/php/colour.js +0 -81
- package/generators/php/lists.js +0 -481
- package/generators/php/logic.js +0 -119
- package/generators/php/loops.js +0 -161
- package/generators/php/math.js +0 -349
- package/generators/php/procedures.js +0 -125
- package/generators/php/text.js +0 -255
- package/generators/php/variables.js +0 -32
- package/generators/php/variables_dynamic.js +0 -21
- package/generators/php.js +0 -303
- package/generators/python/all.js +0 -27
- package/generators/python/colour.js +0 -67
- package/generators/python/lists.js +0 -346
- package/generators/python/logic.js +0 -120
- package/generators/python/loops.js +0 -206
- package/generators/python/math.js +0 -373
- package/generators/python/procedures.js +0 -129
- package/generators/python/text.js +0 -291
- package/generators/python/variables.js +0 -32
- package/generators/python/variables_dynamic.js +0 -21
- package/generators/python.js +0 -333
|
@@ -1,717 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2019 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @fileoverview The class representing an AST node.
|
|
9
|
-
* Used to traverse the Blockly AST.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* The class representing an AST node.
|
|
14
|
-
* Used to traverse the Blockly AST.
|
|
15
|
-
* @class
|
|
16
|
-
*/
|
|
17
|
-
import * as goog from '../../closure/goog/goog.js';
|
|
18
|
-
goog.declareModuleId('Blockly.ASTNode');
|
|
19
|
-
|
|
20
|
-
import type {Block} from '../block.js';
|
|
21
|
-
import type {Connection} from '../connection.js';
|
|
22
|
-
import {ConnectionType} from '../connection_type.js';
|
|
23
|
-
import type {Field} from '../field.js';
|
|
24
|
-
import type {Input} from '../input.js';
|
|
25
|
-
import type {IASTNodeLocation} from '../interfaces/i_ast_node_location.js';
|
|
26
|
-
import type {IASTNodeLocationWithBlock} from '../interfaces/i_ast_node_location_with_block.js';
|
|
27
|
-
import {Coordinate} from '../utils/coordinate.js';
|
|
28
|
-
import type {Workspace} from '../workspace.js';
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Class for an AST node.
|
|
33
|
-
* It is recommended that you use one of the createNode methods instead of
|
|
34
|
-
* creating a node directly.
|
|
35
|
-
* @alias Blockly.ASTNode
|
|
36
|
-
*/
|
|
37
|
-
export class ASTNode {
|
|
38
|
-
/**
|
|
39
|
-
* True to navigate to all fields. False to only navigate to clickable fields.
|
|
40
|
-
*/
|
|
41
|
-
static NAVIGATE_ALL_FIELDS = false;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* The default y offset to use when moving the cursor from a stack to the
|
|
45
|
-
* workspace.
|
|
46
|
-
*/
|
|
47
|
-
private static readonly DEFAULT_OFFSET_Y: number = -20;
|
|
48
|
-
private readonly type_: string;
|
|
49
|
-
private readonly isConnection_: boolean;
|
|
50
|
-
private readonly location_: IASTNodeLocation;
|
|
51
|
-
|
|
52
|
-
/** The coordinate on the workspace. */
|
|
53
|
-
// AnyDuringMigration because: Type 'null' is not assignable to type
|
|
54
|
-
// 'Coordinate'.
|
|
55
|
-
private wsCoordinate_: Coordinate = null as AnyDuringMigration;
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* @param type The type of the location.
|
|
59
|
-
* Must be in ASTNode.types.
|
|
60
|
-
* @param location The position in the AST.
|
|
61
|
-
* @param opt_params Optional dictionary of options.
|
|
62
|
-
* @alias Blockly.ASTNode
|
|
63
|
-
*/
|
|
64
|
-
constructor(type: string, location: IASTNodeLocation, opt_params?: Params) {
|
|
65
|
-
if (!location) {
|
|
66
|
-
throw Error('Cannot create a node without a location.');
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* The type of the location.
|
|
71
|
-
* One of ASTNode.types
|
|
72
|
-
*/
|
|
73
|
-
this.type_ = type;
|
|
74
|
-
|
|
75
|
-
/** Whether the location points to a connection. */
|
|
76
|
-
this.isConnection_ = ASTNode.isConnectionType_(type);
|
|
77
|
-
|
|
78
|
-
/** The location of the AST node. */
|
|
79
|
-
this.location_ = location;
|
|
80
|
-
|
|
81
|
-
this.processParams_(opt_params || null);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Parse the optional parameters.
|
|
86
|
-
* @param params The user specified parameters.
|
|
87
|
-
*/
|
|
88
|
-
private processParams_(params: Params|null) {
|
|
89
|
-
if (!params) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
if (params.wsCoordinate) {
|
|
93
|
-
this.wsCoordinate_ = params.wsCoordinate;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Gets the value pointed to by this node.
|
|
99
|
-
* It is the callers responsibility to check the node type to figure out what
|
|
100
|
-
* type of object they get back from this.
|
|
101
|
-
* @return The current field, connection, workspace, or block the cursor is
|
|
102
|
-
* on.
|
|
103
|
-
*/
|
|
104
|
-
getLocation(): IASTNodeLocation {
|
|
105
|
-
return this.location_;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* The type of the current location.
|
|
110
|
-
* One of ASTNode.types
|
|
111
|
-
* @return The type of the location.
|
|
112
|
-
*/
|
|
113
|
-
getType(): string {
|
|
114
|
-
return this.type_;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* The coordinate on the workspace.
|
|
119
|
-
* @return The workspace coordinate or null if the location is not a
|
|
120
|
-
* workspace.
|
|
121
|
-
*/
|
|
122
|
-
getWsCoordinate(): Coordinate {
|
|
123
|
-
return this.wsCoordinate_;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Whether the node points to a connection.
|
|
128
|
-
* @return [description]
|
|
129
|
-
* @internal
|
|
130
|
-
*/
|
|
131
|
-
isConnection(): boolean {
|
|
132
|
-
return this.isConnection_;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Given an input find the next editable field or an input with a non null
|
|
137
|
-
* connection in the same block. The current location must be an input
|
|
138
|
-
* connection.
|
|
139
|
-
* @return The AST node holding the next field or connection or null if there
|
|
140
|
-
* is no editable field or input connection after the given input.
|
|
141
|
-
*/
|
|
142
|
-
private findNextForInput_(): ASTNode|null {
|
|
143
|
-
const location = this.location_ as Connection;
|
|
144
|
-
const parentInput = location.getParentInput();
|
|
145
|
-
const block = parentInput!.getSourceBlock();
|
|
146
|
-
// AnyDuringMigration because: Argument of type 'Input | null' is not
|
|
147
|
-
// assignable to parameter of type 'Input'.
|
|
148
|
-
const curIdx = block!.inputList.indexOf(parentInput as AnyDuringMigration);
|
|
149
|
-
for (let i = curIdx + 1; i < block!.inputList.length; i++) {
|
|
150
|
-
const input = block!.inputList[i];
|
|
151
|
-
const fieldRow = input.fieldRow;
|
|
152
|
-
for (let j = 0; j < fieldRow.length; j++) {
|
|
153
|
-
const field = fieldRow[j];
|
|
154
|
-
if (field.isClickable() || ASTNode.NAVIGATE_ALL_FIELDS) {
|
|
155
|
-
return ASTNode.createFieldNode(field);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
if (input.connection) {
|
|
159
|
-
return ASTNode.createInputNode(input);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
return null;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Given a field find the next editable field or an input with a non null
|
|
167
|
-
* connection in the same block. The current location must be a field.
|
|
168
|
-
* @return The AST node pointing to the next field or connection or null if
|
|
169
|
-
* there is no editable field or input connection after the given input.
|
|
170
|
-
*/
|
|
171
|
-
private findNextForField_(): ASTNode|null {
|
|
172
|
-
const location = this.location_ as Field;
|
|
173
|
-
const input = location.getParentInput();
|
|
174
|
-
const block = location.getSourceBlock();
|
|
175
|
-
const curIdx = block.inputList.indexOf((input));
|
|
176
|
-
let fieldIdx = input.fieldRow.indexOf(location) + 1;
|
|
177
|
-
for (let i = curIdx; i < block.inputList.length; i++) {
|
|
178
|
-
const newInput = block.inputList[i];
|
|
179
|
-
const fieldRow = newInput.fieldRow;
|
|
180
|
-
while (fieldIdx < fieldRow.length) {
|
|
181
|
-
if (fieldRow[fieldIdx].isClickable() || ASTNode.NAVIGATE_ALL_FIELDS) {
|
|
182
|
-
return ASTNode.createFieldNode(fieldRow[fieldIdx]);
|
|
183
|
-
}
|
|
184
|
-
fieldIdx++;
|
|
185
|
-
}
|
|
186
|
-
fieldIdx = 0;
|
|
187
|
-
if (newInput.connection) {
|
|
188
|
-
return ASTNode.createInputNode(newInput);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
return null;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Given an input find the previous editable field or an input with a non null
|
|
196
|
-
* connection in the same block. The current location must be an input
|
|
197
|
-
* connection.
|
|
198
|
-
* @return The AST node holding the previous field or connection.
|
|
199
|
-
*/
|
|
200
|
-
private findPrevForInput_(): ASTNode|null {
|
|
201
|
-
const location = this.location_ as Connection;
|
|
202
|
-
const parentInput = location.getParentInput();
|
|
203
|
-
const block = parentInput!.getSourceBlock();
|
|
204
|
-
// AnyDuringMigration because: Argument of type 'Input | null' is not
|
|
205
|
-
// assignable to parameter of type 'Input'.
|
|
206
|
-
const curIdx = block!.inputList.indexOf(parentInput as AnyDuringMigration);
|
|
207
|
-
for (let i = curIdx; i >= 0; i--) {
|
|
208
|
-
const input = block!.inputList[i];
|
|
209
|
-
if (input.connection && input !== parentInput) {
|
|
210
|
-
return ASTNode.createInputNode(input);
|
|
211
|
-
}
|
|
212
|
-
const fieldRow = input.fieldRow;
|
|
213
|
-
for (let j = fieldRow.length - 1; j >= 0; j--) {
|
|
214
|
-
const field = fieldRow[j];
|
|
215
|
-
if (field.isClickable() || ASTNode.NAVIGATE_ALL_FIELDS) {
|
|
216
|
-
return ASTNode.createFieldNode(field);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
return null;
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Given a field find the previous editable field or an input with a non null
|
|
225
|
-
* connection in the same block. The current location must be a field.
|
|
226
|
-
* @return The AST node holding the previous input or field.
|
|
227
|
-
*/
|
|
228
|
-
private findPrevForField_(): ASTNode|null {
|
|
229
|
-
const location = this.location_ as Field;
|
|
230
|
-
const parentInput = location.getParentInput();
|
|
231
|
-
const block = location.getSourceBlock();
|
|
232
|
-
const curIdx = block.inputList.indexOf((parentInput));
|
|
233
|
-
let fieldIdx = parentInput.fieldRow.indexOf(location) - 1;
|
|
234
|
-
for (let i = curIdx; i >= 0; i--) {
|
|
235
|
-
const input = block.inputList[i];
|
|
236
|
-
if (input.connection && input !== parentInput) {
|
|
237
|
-
return ASTNode.createInputNode(input);
|
|
238
|
-
}
|
|
239
|
-
const fieldRow = input.fieldRow;
|
|
240
|
-
while (fieldIdx > -1) {
|
|
241
|
-
if (fieldRow[fieldIdx].isClickable() || ASTNode.NAVIGATE_ALL_FIELDS) {
|
|
242
|
-
return ASTNode.createFieldNode(fieldRow[fieldIdx]);
|
|
243
|
-
}
|
|
244
|
-
fieldIdx--;
|
|
245
|
-
}
|
|
246
|
-
// Reset the fieldIdx to the length of the field row of the previous
|
|
247
|
-
// input.
|
|
248
|
-
if (i - 1 >= 0) {
|
|
249
|
-
fieldIdx = block.inputList[i - 1].fieldRow.length - 1;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
return null;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
/**
|
|
256
|
-
* Navigate between stacks of blocks on the workspace.
|
|
257
|
-
* @param forward True to go forward. False to go backwards.
|
|
258
|
-
* @return The first block of the next stack or null if there are no blocks on
|
|
259
|
-
* the workspace.
|
|
260
|
-
*/
|
|
261
|
-
private navigateBetweenStacks_(forward: boolean): ASTNode|null {
|
|
262
|
-
let curLocation = this.getLocation();
|
|
263
|
-
// TODO(#6097): Use instanceof checks to exit early for values of
|
|
264
|
-
// curLocation that don't make sense.
|
|
265
|
-
if ((curLocation as IASTNodeLocationWithBlock).getSourceBlock) {
|
|
266
|
-
curLocation = (curLocation as IASTNodeLocationWithBlock).getSourceBlock();
|
|
267
|
-
}
|
|
268
|
-
// TODO(#6097): Use instanceof checks to exit early for values of
|
|
269
|
-
// curLocation that don't make sense.
|
|
270
|
-
const curLocationAsBlock = curLocation as Block;
|
|
271
|
-
if (!curLocationAsBlock || curLocationAsBlock.disposed) {
|
|
272
|
-
return null;
|
|
273
|
-
}
|
|
274
|
-
const curRoot = curLocationAsBlock.getRootBlock();
|
|
275
|
-
const topBlocks = curRoot.workspace.getTopBlocks(true);
|
|
276
|
-
for (let i = 0; i < topBlocks.length; i++) {
|
|
277
|
-
const topBlock = topBlocks[i];
|
|
278
|
-
if (curRoot.id === topBlock.id) {
|
|
279
|
-
const offset = forward ? 1 : -1;
|
|
280
|
-
const resultIndex = i + offset;
|
|
281
|
-
if (resultIndex === -1 || resultIndex === topBlocks.length) {
|
|
282
|
-
return null;
|
|
283
|
-
}
|
|
284
|
-
return ASTNode.createStackNode(topBlocks[resultIndex]);
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
throw Error(
|
|
288
|
-
'Couldn\'t find ' + (forward ? 'next' : 'previous') + ' stack?!');
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Finds the top most AST node for a given block.
|
|
293
|
-
* This is either the previous connection, output connection or block
|
|
294
|
-
* depending on what kind of connections the block has.
|
|
295
|
-
* @param block The block that we want to find the top connection on.
|
|
296
|
-
* @return The AST node containing the top connection.
|
|
297
|
-
*/
|
|
298
|
-
private findTopASTNodeForBlock_(block: Block): ASTNode|null {
|
|
299
|
-
const topConnection = getParentConnection(block);
|
|
300
|
-
if (topConnection) {
|
|
301
|
-
return ASTNode.createConnectionNode(topConnection);
|
|
302
|
-
} else {
|
|
303
|
-
return ASTNode.createBlockNode(block);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
* Get the AST node pointing to the input that the block is nested under or if
|
|
309
|
-
* the block is not nested then get the stack AST node.
|
|
310
|
-
* @param block The source block of the current location.
|
|
311
|
-
* @return The AST node pointing to the input connection or the top block of
|
|
312
|
-
* the stack this block is in.
|
|
313
|
-
*/
|
|
314
|
-
private getOutAstNodeForBlock_(block: Block): ASTNode|null {
|
|
315
|
-
if (!block) {
|
|
316
|
-
return null;
|
|
317
|
-
}
|
|
318
|
-
// If the block doesn't have a previous connection then it is the top of the
|
|
319
|
-
// substack.
|
|
320
|
-
const topBlock = block.getTopStackBlock();
|
|
321
|
-
const topConnection = getParentConnection(topBlock);
|
|
322
|
-
// If the top connection has a parentInput, create an AST node pointing to
|
|
323
|
-
// that input.
|
|
324
|
-
if (topConnection && topConnection.targetConnection &&
|
|
325
|
-
topConnection.targetConnection.getParentInput()) {
|
|
326
|
-
// AnyDuringMigration because: Argument of type 'Input | null' is not
|
|
327
|
-
// assignable to parameter of type 'Input'.
|
|
328
|
-
return ASTNode.createInputNode(
|
|
329
|
-
topConnection.targetConnection.getParentInput() as
|
|
330
|
-
AnyDuringMigration);
|
|
331
|
-
} else {
|
|
332
|
-
// Go to stack level if you are not underneath an input.
|
|
333
|
-
return ASTNode.createStackNode(topBlock);
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* Find the first editable field or input with a connection on a given block.
|
|
339
|
-
* @param block The source block of the current location.
|
|
340
|
-
* @return An AST node pointing to the first field or input.
|
|
341
|
-
* Null if there are no editable fields or inputs with connections on the
|
|
342
|
-
* block.
|
|
343
|
-
*/
|
|
344
|
-
private findFirstFieldOrInput_(block: Block): ASTNode|null {
|
|
345
|
-
const inputs = block.inputList;
|
|
346
|
-
for (let i = 0; i < inputs.length; i++) {
|
|
347
|
-
const input = inputs[i];
|
|
348
|
-
const fieldRow = input.fieldRow;
|
|
349
|
-
for (let j = 0; j < fieldRow.length; j++) {
|
|
350
|
-
const field = fieldRow[j];
|
|
351
|
-
if (field.isClickable() || ASTNode.NAVIGATE_ALL_FIELDS) {
|
|
352
|
-
return ASTNode.createFieldNode(field);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
if (input.connection) {
|
|
356
|
-
return ASTNode.createInputNode(input);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
return null;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
/**
|
|
363
|
-
* Finds the source block of the location of this node.
|
|
364
|
-
* @return The source block of the location, or null if the node is of type
|
|
365
|
-
* workspace.
|
|
366
|
-
*/
|
|
367
|
-
getSourceBlock(): Block|null {
|
|
368
|
-
if (this.getType() === ASTNode.types.BLOCK) {
|
|
369
|
-
return this.getLocation() as Block;
|
|
370
|
-
} else if (this.getType() === ASTNode.types.STACK) {
|
|
371
|
-
return this.getLocation() as Block;
|
|
372
|
-
} else if (this.getType() === ASTNode.types.WORKSPACE) {
|
|
373
|
-
return null;
|
|
374
|
-
} else {
|
|
375
|
-
return (this.getLocation() as IASTNodeLocationWithBlock).getSourceBlock();
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
/**
|
|
380
|
-
* Find the element to the right of the current element in the AST.
|
|
381
|
-
* @return An AST node that wraps the next field, connection, block, or
|
|
382
|
-
* workspace. Or null if there is no node to the right.
|
|
383
|
-
*/
|
|
384
|
-
next(): ASTNode|null {
|
|
385
|
-
switch (this.type_) {
|
|
386
|
-
case ASTNode.types.STACK:
|
|
387
|
-
return this.navigateBetweenStacks_(true);
|
|
388
|
-
|
|
389
|
-
case ASTNode.types.OUTPUT: {
|
|
390
|
-
const connection = this.location_ as Connection;
|
|
391
|
-
return ASTNode.createBlockNode(connection.getSourceBlock());
|
|
392
|
-
}
|
|
393
|
-
case ASTNode.types.FIELD:
|
|
394
|
-
return this.findNextForField_();
|
|
395
|
-
|
|
396
|
-
case ASTNode.types.INPUT:
|
|
397
|
-
return this.findNextForInput_();
|
|
398
|
-
|
|
399
|
-
case ASTNode.types.BLOCK: {
|
|
400
|
-
const block = this.location_ as Block;
|
|
401
|
-
const nextConnection = block.nextConnection;
|
|
402
|
-
return ASTNode.createConnectionNode(nextConnection);
|
|
403
|
-
}
|
|
404
|
-
case ASTNode.types.PREVIOUS: {
|
|
405
|
-
const connection = this.location_ as Connection;
|
|
406
|
-
return ASTNode.createBlockNode(connection.getSourceBlock());
|
|
407
|
-
}
|
|
408
|
-
case ASTNode.types.NEXT: {
|
|
409
|
-
const connection = this.location_ as Connection;
|
|
410
|
-
const targetConnection = connection.targetConnection;
|
|
411
|
-
return ASTNode.createConnectionNode(targetConnection!);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
return null;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
/**
|
|
419
|
-
* Find the element one level below and all the way to the left of the current
|
|
420
|
-
* location.
|
|
421
|
-
* @return An AST node that wraps the next field, connection, workspace, or
|
|
422
|
-
* block. Or null if there is nothing below this node.
|
|
423
|
-
*/
|
|
424
|
-
in(): ASTNode|null {
|
|
425
|
-
switch (this.type_) {
|
|
426
|
-
case ASTNode.types.WORKSPACE: {
|
|
427
|
-
const workspace = this.location_ as Workspace;
|
|
428
|
-
const topBlocks = workspace.getTopBlocks(true);
|
|
429
|
-
if (topBlocks.length > 0) {
|
|
430
|
-
return ASTNode.createStackNode(topBlocks[0]);
|
|
431
|
-
}
|
|
432
|
-
break;
|
|
433
|
-
}
|
|
434
|
-
case ASTNode.types.STACK: {
|
|
435
|
-
const block = this.location_ as Block;
|
|
436
|
-
return this.findTopASTNodeForBlock_(block);
|
|
437
|
-
}
|
|
438
|
-
case ASTNode.types.BLOCK: {
|
|
439
|
-
const block = this.location_ as Block;
|
|
440
|
-
return this.findFirstFieldOrInput_(block);
|
|
441
|
-
}
|
|
442
|
-
case ASTNode.types.INPUT: {
|
|
443
|
-
const connection = this.location_ as Connection;
|
|
444
|
-
const targetConnection = connection.targetConnection;
|
|
445
|
-
return ASTNode.createConnectionNode(targetConnection!);
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
return null;
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
/**
|
|
453
|
-
* Find the element to the left of the current element in the AST.
|
|
454
|
-
* @return An AST node that wraps the previous field, connection, workspace or
|
|
455
|
-
* block. Or null if no node exists to the left.
|
|
456
|
-
* null.
|
|
457
|
-
*/
|
|
458
|
-
prev(): ASTNode|null {
|
|
459
|
-
switch (this.type_) {
|
|
460
|
-
case ASTNode.types.STACK:
|
|
461
|
-
return this.navigateBetweenStacks_(false);
|
|
462
|
-
|
|
463
|
-
case ASTNode.types.OUTPUT:
|
|
464
|
-
return null;
|
|
465
|
-
|
|
466
|
-
case ASTNode.types.FIELD:
|
|
467
|
-
return this.findPrevForField_();
|
|
468
|
-
|
|
469
|
-
case ASTNode.types.INPUT:
|
|
470
|
-
return this.findPrevForInput_();
|
|
471
|
-
|
|
472
|
-
case ASTNode.types.BLOCK: {
|
|
473
|
-
const block = this.location_ as Block;
|
|
474
|
-
const topConnection = getParentConnection(block);
|
|
475
|
-
return ASTNode.createConnectionNode(topConnection);
|
|
476
|
-
}
|
|
477
|
-
case ASTNode.types.PREVIOUS: {
|
|
478
|
-
const connection = this.location_ as Connection;
|
|
479
|
-
const targetConnection = connection.targetConnection;
|
|
480
|
-
if (targetConnection && !targetConnection.getParentInput()) {
|
|
481
|
-
return ASTNode.createConnectionNode(targetConnection);
|
|
482
|
-
}
|
|
483
|
-
break;
|
|
484
|
-
}
|
|
485
|
-
case ASTNode.types.NEXT: {
|
|
486
|
-
const connection = this.location_ as Connection;
|
|
487
|
-
return ASTNode.createBlockNode(connection.getSourceBlock());
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
return null;
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
/**
|
|
495
|
-
* Find the next element that is one position above and all the way to the
|
|
496
|
-
* left of the current location.
|
|
497
|
-
* @return An AST node that wraps the next field, connection, workspace or
|
|
498
|
-
* block. Or null if we are at the workspace level.
|
|
499
|
-
*/
|
|
500
|
-
out(): ASTNode|null {
|
|
501
|
-
switch (this.type_) {
|
|
502
|
-
case ASTNode.types.STACK: {
|
|
503
|
-
const block = this.location_ as Block;
|
|
504
|
-
const blockPos = block.getRelativeToSurfaceXY();
|
|
505
|
-
// TODO: Make sure this is in the bounds of the workspace.
|
|
506
|
-
const wsCoordinate =
|
|
507
|
-
new Coordinate(blockPos.x, blockPos.y + ASTNode.DEFAULT_OFFSET_Y);
|
|
508
|
-
return ASTNode.createWorkspaceNode(block.workspace, wsCoordinate);
|
|
509
|
-
}
|
|
510
|
-
case ASTNode.types.OUTPUT: {
|
|
511
|
-
const connection = this.location_ as Connection;
|
|
512
|
-
const target = connection.targetConnection;
|
|
513
|
-
if (target) {
|
|
514
|
-
return ASTNode.createConnectionNode(target);
|
|
515
|
-
}
|
|
516
|
-
return ASTNode.createStackNode(connection.getSourceBlock());
|
|
517
|
-
}
|
|
518
|
-
case ASTNode.types.FIELD: {
|
|
519
|
-
const field = this.location_ as Field;
|
|
520
|
-
return ASTNode.createBlockNode(field.getSourceBlock());
|
|
521
|
-
}
|
|
522
|
-
case ASTNode.types.INPUT: {
|
|
523
|
-
const connection = this.location_ as Connection;
|
|
524
|
-
return ASTNode.createBlockNode(connection.getSourceBlock());
|
|
525
|
-
}
|
|
526
|
-
case ASTNode.types.BLOCK: {
|
|
527
|
-
const block = this.location_ as Block;
|
|
528
|
-
return this.getOutAstNodeForBlock_(block);
|
|
529
|
-
}
|
|
530
|
-
case ASTNode.types.PREVIOUS: {
|
|
531
|
-
const connection = this.location_ as Connection;
|
|
532
|
-
return this.getOutAstNodeForBlock_(connection.getSourceBlock());
|
|
533
|
-
}
|
|
534
|
-
case ASTNode.types.NEXT: {
|
|
535
|
-
const connection = this.location_ as Connection;
|
|
536
|
-
return this.getOutAstNodeForBlock_(connection.getSourceBlock());
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
return null;
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
/**
|
|
544
|
-
* Whether an AST node of the given type points to a connection.
|
|
545
|
-
* @param type The type to check. One of ASTNode.types.
|
|
546
|
-
* @return True if a node of the given type points to a connection.
|
|
547
|
-
*/
|
|
548
|
-
private static isConnectionType_(type: string): boolean {
|
|
549
|
-
switch (type) {
|
|
550
|
-
case ASTNode.types.PREVIOUS:
|
|
551
|
-
case ASTNode.types.NEXT:
|
|
552
|
-
case ASTNode.types.INPUT:
|
|
553
|
-
case ASTNode.types.OUTPUT:
|
|
554
|
-
return true;
|
|
555
|
-
}
|
|
556
|
-
return false;
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
/**
|
|
560
|
-
* Create an AST node pointing to a field.
|
|
561
|
-
* @param field The location of the AST node.
|
|
562
|
-
* @return An AST node pointing to a field.
|
|
563
|
-
*/
|
|
564
|
-
static createFieldNode(field: Field): ASTNode|null {
|
|
565
|
-
if (!field) {
|
|
566
|
-
return null;
|
|
567
|
-
}
|
|
568
|
-
return new ASTNode(ASTNode.types.FIELD, field);
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
/**
|
|
572
|
-
* Creates an AST node pointing to a connection. If the connection has a
|
|
573
|
-
* parent input then create an AST node of type input that will hold the
|
|
574
|
-
* connection.
|
|
575
|
-
* @param connection This is the connection the node will point to.
|
|
576
|
-
* @return An AST node pointing to a connection.
|
|
577
|
-
*/
|
|
578
|
-
static createConnectionNode(connection: Connection): ASTNode|null {
|
|
579
|
-
if (!connection) {
|
|
580
|
-
return null;
|
|
581
|
-
}
|
|
582
|
-
const type = connection.type;
|
|
583
|
-
if (type === ConnectionType.INPUT_VALUE) {
|
|
584
|
-
// AnyDuringMigration because: Argument of type 'Input | null' is not
|
|
585
|
-
// assignable to parameter of type 'Input'.
|
|
586
|
-
return ASTNode.createInputNode(
|
|
587
|
-
connection.getParentInput() as AnyDuringMigration);
|
|
588
|
-
} else if (
|
|
589
|
-
type === ConnectionType.NEXT_STATEMENT && connection.getParentInput()) {
|
|
590
|
-
// AnyDuringMigration because: Argument of type 'Input | null' is not
|
|
591
|
-
// assignable to parameter of type 'Input'.
|
|
592
|
-
return ASTNode.createInputNode(
|
|
593
|
-
connection.getParentInput() as AnyDuringMigration);
|
|
594
|
-
} else if (type === ConnectionType.NEXT_STATEMENT) {
|
|
595
|
-
return new ASTNode(ASTNode.types.NEXT, connection);
|
|
596
|
-
} else if (type === ConnectionType.OUTPUT_VALUE) {
|
|
597
|
-
return new ASTNode(ASTNode.types.OUTPUT, connection);
|
|
598
|
-
} else if (type === ConnectionType.PREVIOUS_STATEMENT) {
|
|
599
|
-
return new ASTNode(ASTNode.types.PREVIOUS, connection);
|
|
600
|
-
}
|
|
601
|
-
return null;
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
/**
|
|
605
|
-
* Creates an AST node pointing to an input. Stores the input connection as
|
|
606
|
-
* the location.
|
|
607
|
-
* @param input The input used to create an AST node.
|
|
608
|
-
* @return An AST node pointing to a input.
|
|
609
|
-
*/
|
|
610
|
-
static createInputNode(input: Input): ASTNode|null {
|
|
611
|
-
if (!input || !input.connection) {
|
|
612
|
-
return null;
|
|
613
|
-
}
|
|
614
|
-
return new ASTNode(ASTNode.types.INPUT, input.connection);
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
/**
|
|
618
|
-
* Creates an AST node pointing to a block.
|
|
619
|
-
* @param block The block used to create an AST node.
|
|
620
|
-
* @return An AST node pointing to a block.
|
|
621
|
-
*/
|
|
622
|
-
static createBlockNode(block: Block): ASTNode|null {
|
|
623
|
-
if (!block) {
|
|
624
|
-
return null;
|
|
625
|
-
}
|
|
626
|
-
return new ASTNode(ASTNode.types.BLOCK, block);
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
/**
|
|
630
|
-
* Create an AST node of type stack. A stack, represented by its top block, is
|
|
631
|
-
* the set of all blocks connected to a top block, including the top
|
|
632
|
-
* block.
|
|
633
|
-
* @param topBlock A top block has no parent and can be found in the list
|
|
634
|
-
* returned by workspace.getTopBlocks().
|
|
635
|
-
* @return An AST node of type stack that points to the top block on the
|
|
636
|
-
* stack.
|
|
637
|
-
*/
|
|
638
|
-
static createStackNode(topBlock: Block): ASTNode|null {
|
|
639
|
-
if (!topBlock) {
|
|
640
|
-
return null;
|
|
641
|
-
}
|
|
642
|
-
return new ASTNode(ASTNode.types.STACK, topBlock);
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
/**
|
|
646
|
-
* Creates an AST node pointing to a workspace.
|
|
647
|
-
* @param workspace The workspace that we are on.
|
|
648
|
-
* @param wsCoordinate The position on the workspace for this node.
|
|
649
|
-
* @return An AST node pointing to a workspace and a position on the
|
|
650
|
-
* workspace.
|
|
651
|
-
*/
|
|
652
|
-
static createWorkspaceNode(
|
|
653
|
-
workspace: Workspace|null, wsCoordinate: Coordinate|null): ASTNode|null {
|
|
654
|
-
if (!wsCoordinate || !workspace) {
|
|
655
|
-
return null;
|
|
656
|
-
}
|
|
657
|
-
const params = {wsCoordinate};
|
|
658
|
-
return new ASTNode(ASTNode.types.WORKSPACE, workspace, params);
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
/**
|
|
662
|
-
* Creates an AST node for the top position on a block.
|
|
663
|
-
* This is either an output connection, previous connection, or block.
|
|
664
|
-
* @param block The block to find the top most AST node on.
|
|
665
|
-
* @return The AST node holding the top most position on the block.
|
|
666
|
-
*/
|
|
667
|
-
static createTopNode(block: Block): ASTNode|null {
|
|
668
|
-
let astNode;
|
|
669
|
-
const topConnection = getParentConnection(block);
|
|
670
|
-
if (topConnection) {
|
|
671
|
-
astNode = ASTNode.createConnectionNode(topConnection);
|
|
672
|
-
} else {
|
|
673
|
-
astNode = ASTNode.createBlockNode(block);
|
|
674
|
-
}
|
|
675
|
-
return astNode;
|
|
676
|
-
}
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
export namespace ASTNode {
|
|
680
|
-
export interface Params {
|
|
681
|
-
wsCoordinate: Coordinate;
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
export enum types {
|
|
685
|
-
FIELD = 'field',
|
|
686
|
-
BLOCK = 'block',
|
|
687
|
-
INPUT = 'input',
|
|
688
|
-
OUTPUT = 'output',
|
|
689
|
-
NEXT = 'next',
|
|
690
|
-
PREVIOUS = 'previous',
|
|
691
|
-
STACK = 'stack',
|
|
692
|
-
WORKSPACE = 'workspace',
|
|
693
|
-
}
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
export type Params = ASTNode.Params;
|
|
697
|
-
// No need to export ASTNode.types from the module at this time because (1) it
|
|
698
|
-
// wasn't automatically converted by the automatic migration script, (2) the
|
|
699
|
-
// name doesn't follow the styleguide.
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
/**
|
|
703
|
-
* Gets the parent connection on a block.
|
|
704
|
-
* This is either an output connection, previous connection or undefined.
|
|
705
|
-
* If both connections exist return the one that is actually connected
|
|
706
|
-
* to another block.
|
|
707
|
-
* @param block The block to find the parent connection on.
|
|
708
|
-
* @return The connection connecting to the parent of the block.
|
|
709
|
-
*/
|
|
710
|
-
function getParentConnection(block: Block): Connection {
|
|
711
|
-
let topConnection = block.outputConnection;
|
|
712
|
-
if (!topConnection ||
|
|
713
|
-
block.previousConnection && block.previousConnection.isConnected()) {
|
|
714
|
-
topConnection = block.previousConnection;
|
|
715
|
-
}
|
|
716
|
-
return topConnection;
|
|
717
|
-
}
|