blockly 8.0.4-beta.0 → 8.0.5-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blockly.min.js +2421 -2688
- package/blockly_compressed.js +1499 -1994
- package/blockly_compressed.js.map +1 -1
- package/blocks/blocks.js +3 -2
- package/blocks/colour.js +3 -1
- package/blocks/lists.js +94 -22
- package/blocks/logic.js +14 -6
- package/blocks/loops.js +5 -3
- package/blocks/math.js +3 -1
- package/blocks/procedures.js +3 -1
- package/blocks/text.js +14 -6
- package/blocks/variables.js +3 -1
- package/blocks/variables_dynamic.js +3 -1
- package/blocks.d.ts +0 -2
- package/blocks_compressed.js +189 -171
- package/blocks_compressed.js.map +1 -1
- package/closure/goog/base.d.ts +1 -0
- package/closure/goog/base_minimal.d.ts +18 -0
- package/closure/goog/goog.d.ts +25 -0
- package/core/any_aliases.d.ts +1 -0
- package/core/any_aliases.ts +1 -0
- package/core/block.d.ts +779 -0
- package/core/{block.js → block.ts} +610 -719
- package/core/block_animations.d.ts +33 -0
- package/core/{block_animations.js → block_animations.ts} +75 -79
- package/core/block_drag_surface.d.ts +111 -0
- package/core/{block_drag_surface.js → block_drag_surface.ts} +85 -117
- package/core/block_dragger.d.ts +143 -0
- package/core/{block_dragger.js → block_dragger.ts} +139 -176
- package/core/block_svg.d.ts +588 -0
- package/core/{block_svg.js → block_svg.ts} +494 -630
- package/core/blockly.d.ts +562 -0
- package/core/blockly.js +1 -1
- package/core/blockly.ts +749 -0
- package/core/blockly_options.d.ts +69 -0
- package/core/blockly_options.ts +81 -0
- package/core/blocks.d.ts +17 -0
- package/core/{blocks.js → blocks.ts} +4 -8
- package/core/browser_events.d.ts +85 -0
- package/core/{browser_events.js → browser_events.ts} +98 -93
- package/core/bubble.d.ts +279 -0
- package/core/{bubble.js → bubble.ts} +277 -370
- package/core/bubble_dragger.d.ts +73 -0
- package/core/bubble_dragger.ts +229 -0
- package/core/bump_objects.d.ts +34 -0
- package/core/{bump_objects.js → bump_objects.ts} +54 -52
- package/core/clipboard.d.ts +42 -0
- package/core/clipboard.ts +91 -0
- package/core/comment.d.ts +113 -0
- package/core/{comment.js → comment.ts} +135 -185
- package/core/common.d.ts +129 -0
- package/core/{common.js → common.ts} +105 -82
- package/core/component_manager.d.ts +91 -0
- package/core/component_manager.ts +211 -0
- package/core/config.d.ts +23 -0
- package/core/{config.js → config.ts} +12 -19
- package/core/connection.d.ts +232 -0
- package/core/{connection.js → connection.ts} +187 -237
- package/core/connection_checker.d.ts +78 -0
- package/core/{connection_checker.js → connection_checker.ts} +66 -77
- package/core/connection_db.d.ts +91 -0
- package/core/{connection_db.js → connection_db.ts} +62 -87
- package/core/connection_type.d.ts +15 -0
- package/core/{connection_type.js → connection_type.ts} +8 -12
- package/core/constants.d.ts +15 -0
- package/core/{constants.js → constants.ts} +4 -8
- package/core/contextmenu.d.ts +80 -0
- package/core/{contextmenu.js → contextmenu.ts} +118 -153
- package/core/contextmenu_items.d.ts +77 -0
- package/core/contextmenu_items.ts +576 -0
- package/core/contextmenu_registry.d.ts +105 -0
- package/core/contextmenu_registry.ts +179 -0
- package/core/css.d.ts +24 -0
- package/core/{css.js → css.ts} +16 -24
- package/core/delete_area.d.ts +47 -0
- package/core/delete_area.ts +82 -0
- package/core/dialog.d.ts +61 -0
- package/core/dialog.ts +127 -0
- package/core/drag_target.d.ts +63 -0
- package/core/drag_target.ts +94 -0
- package/core/dropdowndiv.d.ts +155 -0
- package/core/{dropdowndiv.js → dropdowndiv.ts} +262 -333
- package/core/events/events.d.ts +102 -0
- package/core/events/events.ts +123 -0
- package/core/events/events_abstract.d.ts +51 -0
- package/core/events/events_abstract.ts +112 -0
- package/core/events/events_block_base.d.ts +31 -0
- package/core/events/events_block_base.ts +65 -0
- package/core/events/events_block_change.d.ts +55 -0
- package/core/events/{events_block_change.js → events_block_change.ts} +45 -48
- package/core/events/events_block_create.d.ts +35 -0
- package/core/events/{events_block_create.js → events_block_create.ts} +30 -35
- package/core/events/events_block_delete.d.ts +36 -0
- package/core/events/{events_block_delete.js → events_block_delete.ts} +34 -39
- package/core/events/events_block_drag.d.ts +36 -0
- package/core/events/events_block_drag.ts +82 -0
- package/core/events/events_block_move.d.ts +51 -0
- package/core/events/{events_block_move.js → events_block_move.ts} +54 -50
- package/core/events/events_bubble_open.d.ts +35 -0
- package/core/events/events_bubble_open.ts +82 -0
- package/core/events/events_click.d.ts +36 -0
- package/core/events/{events_click.js → events_click.ts} +27 -30
- package/core/events/events_comment_base.d.ts +39 -0
- package/core/events/events_comment_base.ts +107 -0
- package/core/events/events_comment_change.d.ts +43 -0
- package/core/events/{events_comment_change.js → events_comment_change.ts} +31 -28
- package/core/events/events_comment_create.d.ts +35 -0
- package/core/events/{events_comment_create.js → events_comment_create.ts} +24 -26
- package/core/events/events_comment_delete.d.ts +35 -0
- package/core/events/{events_comment_delete.js → events_comment_delete.ts} +20 -24
- package/core/events/events_comment_move.d.ts +55 -0
- package/core/events/{events_comment_move.js → events_comment_move.ts} +39 -42
- package/core/events/events_marker_move.d.ts +40 -0
- package/core/events/events_marker_move.ts +99 -0
- package/core/events/events_selected.d.ts +34 -0
- package/core/events/events_selected.ts +78 -0
- package/core/events/events_theme_change.d.ts +30 -0
- package/core/events/{events_theme_change.js → events_theme_change.ts} +19 -24
- package/core/events/events_toolbox_item_select.d.ts +34 -0
- package/core/events/events_toolbox_item_select.ts +79 -0
- package/core/events/events_trashcan_open.d.ts +31 -0
- package/core/events/events_trashcan_open.ts +68 -0
- package/core/events/events_ui.d.ts +37 -0
- package/core/events/{events_ui.js → events_ui.ts} +27 -26
- package/core/events/events_ui_base.d.ts +26 -0
- package/core/events/{events_ui_base.js → events_ui_base.ts} +17 -26
- package/core/events/events_var_base.d.ts +31 -0
- package/core/events/events_var_base.ts +65 -0
- package/core/events/events_var_create.d.ts +35 -0
- package/core/events/{events_var_create.js → events_var_create.ts} +24 -25
- package/core/events/events_var_delete.d.ts +35 -0
- package/core/events/{events_var_delete.js → events_var_delete.ts} +24 -25
- package/core/events/events_var_rename.d.ts +36 -0
- package/core/events/{events_var_rename.js → events_var_rename.ts} +25 -26
- package/core/events/events_viewport.d.ts +39 -0
- package/core/events/events_viewport.ts +100 -0
- package/core/events/utils.d.ts +272 -0
- package/core/events/{utils.js → utils.ts} +148 -219
- package/core/events/workspace_events.d.ts +36 -0
- package/core/events/workspace_events.ts +86 -0
- package/core/extensions.d.ts +107 -0
- package/core/{extensions.js → extensions.ts} +153 -172
- package/core/field.d.ts +534 -0
- package/core/{field.js → field.ts} +413 -489
- package/core/field_angle.d.ts +176 -0
- package/core/field_angle.ts +563 -0
- package/core/field_checkbox.d.ts +124 -0
- package/core/field_checkbox.ts +243 -0
- package/core/field_colour.d.ts +200 -0
- package/core/field_colour.ts +632 -0
- package/core/field_dropdown.d.ts +222 -0
- package/core/{field_dropdown.js → field_dropdown.ts} +277 -299
- package/core/field_image.d.ts +134 -0
- package/core/field_image.ts +282 -0
- package/core/field_label.d.ts +71 -0
- package/core/field_label.ts +152 -0
- package/core/field_label_serializable.d.ts +42 -0
- package/core/field_label_serializable.ts +76 -0
- package/core/field_multilineinput.d.ts +146 -0
- package/core/{field_multilineinput.js → field_multilineinput.ts} +166 -163
- package/core/field_number.d.ts +156 -0
- package/core/{field_number.js → field_number.ts} +110 -123
- package/core/field_registry.d.ts +45 -0
- package/core/{field_registry.js → field_registry.ts} +37 -30
- package/core/field_textinput.d.ts +219 -0
- package/core/field_textinput.ts +591 -0
- package/core/field_variable.d.ts +217 -0
- package/core/{field_variable.js → field_variable.ts} +174 -187
- package/core/flyout_base.d.ts +459 -0
- package/core/{flyout_base.js → flyout_base.ts} +429 -518
- package/core/flyout_button.d.ts +81 -0
- package/core/flyout_button.ts +292 -0
- package/core/flyout_horizontal.d.ts +82 -0
- package/core/{flyout_horizontal.js → flyout_horizontal.ts} +97 -107
- package/core/flyout_metrics_manager.d.ts +40 -0
- package/core/{flyout_metrics_manager.js → flyout_metrics_manager.ts} +22 -34
- package/core/flyout_vertical.d.ts +83 -0
- package/core/{flyout_vertical.js → flyout_vertical.ts} +106 -117
- package/core/generator.d.ts +205 -0
- package/core/{generator.js → generator.ts} +168 -193
- package/core/gesture.d.ts +357 -0
- package/core/{gesture.js → gesture.ts} +289 -369
- package/core/grid.d.ts +83 -0
- package/core/grid.ts +192 -0
- package/core/icon.d.ts +78 -0
- package/core/icon.ts +189 -0
- package/core/inject.d.ts +15 -0
- package/core/{inject.js → inject.ts} +101 -100
- package/core/input.d.ts +128 -0
- package/core/input.ts +309 -0
- package/core/input_types.d.ts +14 -0
- package/core/{input_types.js → input_types.ts} +8 -12
- package/core/insertion_marker_manager.d.ts +212 -0
- package/core/{insertion_marker_manager.js → insertion_marker_manager.ts} +234 -236
- package/core/interfaces/i_ast_node_location.d.ts +11 -0
- package/core/interfaces/{i_ast_node_location.js → i_ast_node_location.ts} +4 -7
- package/core/interfaces/i_ast_node_location_svg.d.ts +22 -0
- package/core/interfaces/i_ast_node_location_svg.ts +37 -0
- package/core/interfaces/i_ast_node_location_with_block.d.ts +18 -0
- package/core/interfaces/i_ast_node_location_with_block.ts +38 -0
- package/core/interfaces/i_autohideable.d.ts +18 -0
- package/core/interfaces/i_autohideable.ts +34 -0
- package/core/interfaces/i_block_dragger.d.ts +43 -0
- package/core/interfaces/i_block_dragger.ts +67 -0
- package/core/interfaces/i_bounded_element.d.ts +24 -0
- package/core/interfaces/i_bounded_element.ts +42 -0
- package/core/interfaces/i_bubble.d.ts +59 -0
- package/core/interfaces/i_bubble.ts +88 -0
- package/core/interfaces/i_collapsible_toolbox_item.d.ts +26 -0
- package/core/interfaces/i_collapsible_toolbox_item.ts +47 -0
- package/core/interfaces/i_component.d.ts +17 -0
- package/core/interfaces/{i_component.js → i_component.ts} +9 -14
- package/core/interfaces/i_connection_checker.d.ts +69 -0
- package/core/interfaces/i_connection_checker.ts +102 -0
- package/core/interfaces/i_contextmenu.d.ts +13 -0
- package/core/interfaces/i_contextmenu.ts +26 -0
- package/core/interfaces/i_copyable.d.ts +24 -0
- package/core/interfaces/i_copyable.ts +40 -0
- package/core/interfaces/i_deletable.d.ts +16 -0
- package/core/interfaces/{i_deletable.js → i_deletable.ts} +9 -13
- package/core/interfaces/i_delete_area.d.ts +25 -0
- package/core/interfaces/i_delete_area.ts +46 -0
- package/core/interfaces/i_drag_target.d.ts +53 -0
- package/core/interfaces/i_drag_target.ts +84 -0
- package/core/interfaces/i_draggable.d.ts +12 -0
- package/core/interfaces/{i_draggable.js → i_draggable.ts} +4 -10
- package/core/interfaces/i_flyout.d.ts +134 -0
- package/core/interfaces/i_flyout.ts +186 -0
- package/core/interfaces/i_keyboard_accessible.d.ts +18 -0
- package/core/interfaces/i_keyboard_accessible.ts +35 -0
- package/core/interfaces/i_metrics_manager.d.ts +117 -0
- package/core/interfaces/i_metrics_manager.ts +151 -0
- package/core/interfaces/i_movable.d.ts +16 -0
- package/core/interfaces/{i_movable.js → i_movable.ts} +9 -13
- package/core/interfaces/i_positionable.d.ts +27 -0
- package/core/interfaces/i_positionable.ts +50 -0
- package/core/interfaces/i_registrable.d.ts +11 -0
- package/core/interfaces/{i_registrable.js → i_registrable.ts} +3 -7
- package/core/interfaces/i_registrable_field.d.ts +17 -0
- package/core/interfaces/{i_registrable_field.js → i_registrable_field.ts} +8 -16
- package/core/interfaces/i_selectable.d.ts +18 -0
- package/core/interfaces/i_selectable.ts +34 -0
- package/core/interfaces/i_selectable_toolbox_item.d.ts +42 -0
- package/core/interfaces/i_selectable_toolbox_item.ts +64 -0
- package/core/interfaces/i_serializer.d.ts +42 -0
- package/core/interfaces/i_serializer.ts +65 -0
- package/core/interfaces/i_styleable.d.ts +21 -0
- package/core/interfaces/i_styleable.ts +35 -0
- package/core/interfaces/i_toolbox.d.ts +85 -0
- package/core/interfaces/i_toolbox.ts +127 -0
- package/core/interfaces/i_toolbox_item.d.ts +62 -0
- package/core/interfaces/i_toolbox_item.ts +84 -0
- package/core/internal_constants.d.ts +40 -0
- package/core/{internal_constants.js → internal_constants.ts} +13 -18
- package/core/keyboard_nav/ast_node.d.ts +239 -0
- package/core/keyboard_nav/{ast_node.js → ast_node.ts} +207 -231
- package/core/keyboard_nav/basic_cursor.d.ts +88 -0
- package/core/keyboard_nav/{basic_cursor.js → basic_cursor.ts} +55 -66
- package/core/keyboard_nav/cursor.d.ts +41 -0
- package/core/keyboard_nav/{cursor.js → cursor.ts} +25 -35
- package/core/keyboard_nav/marker.d.ts +58 -0
- package/core/keyboard_nav/{marker.js → marker.ts} +36 -55
- package/core/keyboard_nav/tab_navigate_cursor.d.ts +19 -0
- package/core/keyboard_nav/{tab_navigate_cursor.js → tab_navigate_cursor.ts} +11 -15
- package/core/main.d.ts +11 -0
- package/core/main.js +303 -0
- package/core/marker_manager.d.ts +85 -0
- package/core/marker_manager.ts +181 -0
- package/core/menu.d.ts +149 -0
- package/core/{menu.js → menu.ts} +141 -174
- package/core/menuitem.d.ts +118 -0
- package/core/menuitem.ts +240 -0
- package/core/metrics_manager.d.ts +201 -0
- package/core/{metrics_manager.js → metrics_manager.ts} +117 -156
- package/core/msg.d.ts +9 -0
- package/core/{msg.js → msg.ts} +4 -8
- package/core/mutator.d.ts +128 -0
- package/core/{mutator.js → mutator.ts} +196 -211
- package/core/names.d.ts +124 -0
- package/core/names.ts +267 -0
- package/core/options.d.ts +137 -0
- package/core/{options.js → options.ts} +147 -173
- package/core/positionable_helpers.d.ts +88 -0
- package/core/{positionable_helpers.js → positionable_helpers.ts} +63 -70
- package/core/procedures.d.ts +108 -0
- package/core/{procedures.js → procedures.ts} +143 -152
- package/core/registry.d.ts +137 -0
- package/core/registry.ts +339 -0
- package/core/rendered_connection.d.ts +191 -0
- package/core/{rendered_connection.js → rendered_connection.ts} +164 -184
- package/core/renderers/common/block_rendering.d.ts +114 -0
- package/core/renderers/common/block_rendering.ts +164 -0
- package/core/renderers/common/constants.d.ts +458 -0
- package/core/renderers/common/constants.ts +1124 -0
- package/core/renderers/common/debug.d.ts +28 -0
- package/core/renderers/common/{debug.js → debug.ts} +14 -20
- package/core/renderers/common/debugger.d.ts +120 -0
- package/core/renderers/common/{debugger.js → debugger.ts} +100 -124
- package/core/renderers/common/drawer.d.ts +132 -0
- package/core/renderers/common/{drawer.js → drawer.ts} +112 -137
- package/core/renderers/common/i_path_object.d.ts +117 -0
- package/core/renderers/common/i_path_object.ts +161 -0
- package/core/renderers/common/info.d.ts +194 -0
- package/core/renderers/common/{info.js → info.ts} +165 -222
- package/core/renderers/common/marker_svg.d.ts +220 -0
- package/core/renderers/common/marker_svg.ts +680 -0
- package/core/renderers/common/path_object.d.ts +146 -0
- package/core/renderers/common/path_object.ts +272 -0
- package/core/renderers/common/renderer.d.ts +157 -0
- package/core/renderers/common/renderer.ts +271 -0
- package/core/renderers/geras/constants.d.ts +23 -0
- package/core/renderers/geras/constants.ts +61 -0
- package/core/renderers/geras/drawer.d.ts +43 -0
- package/core/renderers/geras/{drawer.js → drawer.ts} +40 -84
- package/core/renderers/geras/geras.d.ts +11 -0
- package/core/renderers/geras/geras.ts +37 -0
- package/core/renderers/geras/highlight_constants.d.ts +108 -0
- package/core/renderers/geras/{highlight_constants.js → highlight_constants.ts} +107 -69
- package/core/renderers/geras/highlighter.d.ts +98 -0
- package/core/renderers/geras/{highlighter.js → highlighter.ts} +81 -86
- package/core/renderers/geras/info.d.ts +45 -0
- package/core/renderers/geras/{info.js → info.ts} +61 -99
- package/core/renderers/geras/measurables/inline_input.d.ts +23 -0
- package/core/renderers/geras/measurables/inline_input.ts +51 -0
- package/core/renderers/geras/measurables/statement_input.d.ts +23 -0
- package/core/renderers/geras/measurables/statement_input.ts +50 -0
- package/core/renderers/geras/path_object.d.ts +47 -0
- package/core/renderers/geras/{path_object.js → path_object.ts} +46 -74
- package/core/renderers/geras/renderer.d.ts +69 -0
- package/core/renderers/geras/renderer.ts +126 -0
- package/core/renderers/measurables/base.d.ts +27 -0
- package/core/renderers/measurables/base.ts +53 -0
- package/core/renderers/measurables/bottom_row.d.ts +61 -0
- package/core/renderers/measurables/bottom_row.ts +120 -0
- package/core/renderers/measurables/connection.d.ts +25 -0
- package/core/renderers/measurables/connection.ts +52 -0
- package/core/renderers/measurables/external_value_input.d.ts +27 -0
- package/core/renderers/measurables/external_value_input.ts +65 -0
- package/core/renderers/measurables/field.d.ts +30 -0
- package/core/renderers/measurables/field.ts +63 -0
- package/core/renderers/measurables/hat.d.ts +21 -0
- package/core/renderers/measurables/{hat.js → hat.ts} +12 -14
- package/core/renderers/measurables/icon.d.ts +26 -0
- package/core/renderers/measurables/{icon.js → icon.ts} +14 -18
- package/core/renderers/measurables/in_row_spacer.d.ts +21 -0
- package/core/renderers/measurables/in_row_spacer.ts +44 -0
- package/core/renderers/measurables/inline_input.d.ts +24 -0
- package/core/renderers/measurables/{inline_input.js → inline_input.ts} +22 -26
- package/core/renderers/measurables/input_connection.d.ts +29 -0
- package/core/renderers/measurables/input_connection.ts +66 -0
- package/core/renderers/measurables/input_row.d.ts +30 -0
- package/core/renderers/measurables/{input_row.js → input_row.ts} +24 -31
- package/core/renderers/measurables/jagged_edge.d.ts +20 -0
- package/core/renderers/measurables/{jagged_edge.js → jagged_edge.ts} +10 -13
- package/core/renderers/measurables/next_connection.d.ts +23 -0
- package/core/renderers/measurables/next_connection.ts +47 -0
- package/core/renderers/measurables/output_connection.d.ts +26 -0
- package/core/renderers/measurables/output_connection.ts +56 -0
- package/core/renderers/measurables/previous_connection.d.ts +23 -0
- package/core/renderers/measurables/previous_connection.ts +47 -0
- package/core/renderers/measurables/round_corner.d.ts +21 -0
- package/core/renderers/measurables/round_corner.ts +49 -0
- package/core/renderers/measurables/row.d.ts +141 -0
- package/core/renderers/measurables/row.ts +225 -0
- package/core/renderers/measurables/spacer_row.d.ts +29 -0
- package/core/renderers/measurables/spacer_row.ts +55 -0
- package/core/renderers/measurables/square_corner.d.ts +21 -0
- package/core/renderers/measurables/square_corner.ts +47 -0
- package/core/renderers/measurables/statement_input.d.ts +22 -0
- package/core/renderers/measurables/{statement_input.js → statement_input.ts} +14 -18
- package/core/renderers/measurables/top_row.d.ts +56 -0
- package/core/renderers/measurables/top_row.ts +122 -0
- package/core/renderers/measurables/types.d.ts +235 -0
- package/core/renderers/measurables/types.ts +332 -0
- package/core/renderers/minimalist/constants.d.ts +14 -0
- package/core/renderers/minimalist/{constants.js → constants.ts} +5 -10
- package/core/renderers/minimalist/drawer.d.ts +21 -0
- package/core/renderers/minimalist/drawer.ts +38 -0
- package/core/renderers/minimalist/info.d.ts +30 -0
- package/core/renderers/minimalist/info.ts +52 -0
- package/core/renderers/minimalist/minimalist.d.ts +6 -0
- package/core/renderers/minimalist/minimalist.ts +22 -0
- package/core/renderers/minimalist/renderer.d.ts +41 -0
- package/core/renderers/minimalist/renderer.ts +71 -0
- package/core/renderers/thrasos/info.d.ts +40 -0
- package/core/renderers/thrasos/{info.js → info.ts} +66 -67
- package/core/renderers/thrasos/renderer.d.ts +25 -0
- package/core/renderers/thrasos/renderer.ts +48 -0
- package/core/renderers/thrasos/thrasos.d.ts +4 -0
- package/core/renderers/thrasos/thrasos.ts +20 -0
- package/core/renderers/zelos/constants.d.ts +186 -0
- package/core/renderers/zelos/{constants.js → constants.ts} +294 -441
- package/core/renderers/zelos/drawer.d.ts +47 -0
- package/core/renderers/zelos/{drawer.js → drawer.ts} +73 -95
- package/core/renderers/zelos/info.d.ts +88 -0
- package/core/renderers/zelos/{info.js → info.ts} +111 -142
- package/core/renderers/zelos/marker_svg.d.ts +46 -0
- package/core/renderers/zelos/marker_svg.ts +151 -0
- package/core/renderers/zelos/measurables/bottom_row.d.ts +27 -0
- package/core/renderers/zelos/measurables/bottom_row.ts +53 -0
- package/core/renderers/zelos/measurables/inputs.d.ts +23 -0
- package/core/renderers/zelos/measurables/{inputs.js → inputs.ts} +14 -15
- package/core/renderers/zelos/measurables/row_elements.d.ts +21 -0
- package/core/renderers/zelos/measurables/row_elements.ts +45 -0
- package/core/renderers/zelos/measurables/top_row.d.ts +29 -0
- package/core/renderers/zelos/measurables/{top_row.js → top_row.ts} +14 -27
- package/core/renderers/zelos/path_object.d.ts +77 -0
- package/core/renderers/zelos/path_object.ts +215 -0
- package/core/renderers/zelos/renderer.d.ts +74 -0
- package/core/renderers/zelos/renderer.ts +142 -0
- package/core/renderers/zelos/zelos.d.ts +12 -0
- package/core/renderers/zelos/zelos.ts +39 -0
- package/core/scrollbar.d.ts +277 -0
- package/core/{scrollbar.js → scrollbar.ts} +307 -328
- package/core/scrollbar_pair.d.ts +105 -0
- package/core/{scrollbar_pair.js → scrollbar_pair.ts} +71 -79
- package/core/serialization/blocks.d.ts +98 -0
- package/core/serialization/{blocks.js → blocks.ts} +229 -228
- package/core/serialization/exceptions.d.ts +73 -0
- package/core/serialization/exceptions.ts +98 -0
- package/core/serialization/priorities.d.ts +15 -0
- package/core/serialization/{priorities.js → priorities.ts} +4 -10
- package/core/serialization/registry.d.ts +20 -0
- package/core/serialization/{registry.js → registry.ts} +11 -13
- package/core/serialization/variables.d.ts +14 -0
- package/core/serialization/{variables.js → variables.ts} +30 -32
- package/core/serialization/workspaces.d.ts +28 -0
- package/core/serialization/{workspaces.js → workspaces.ts} +30 -27
- package/core/shortcut_items.d.ts +61 -0
- package/core/{shortcut_items.js → shortcut_items.ts} +121 -157
- package/core/shortcut_registry.d.ts +151 -0
- package/core/shortcut_registry.ts +355 -0
- package/core/sprites.d.ts +19 -0
- package/core/{sprites.js → sprites.ts} +4 -6
- package/core/theme/classic.d.ts +12 -0
- package/core/theme/{classic.js → classic.ts} +5 -7
- package/core/theme/themes.d.ts +8 -0
- package/core/theme/themes.ts +22 -0
- package/core/theme/zelos.d.ts +11 -0
- package/core/theme/{zelos.js → zelos.ts} +4 -7
- package/core/theme.d.ts +142 -0
- package/core/theme.ts +221 -0
- package/core/theme_manager.d.ts +81 -0
- package/core/theme_manager.ts +186 -0
- package/core/toolbox/category.d.ts +239 -0
- package/core/toolbox/category.ts +679 -0
- package/core/toolbox/collapsible_category.d.ts +91 -0
- package/core/toolbox/collapsible_category.ts +273 -0
- package/core/toolbox/separator.d.ts +39 -0
- package/core/toolbox/separator.ts +105 -0
- package/core/toolbox/toolbox.d.ts +352 -0
- package/core/toolbox/{toolbox.js → toolbox.ts} +316 -432
- package/core/toolbox/toolbox_item.d.ts +85 -0
- package/core/toolbox/toolbox_item.ts +147 -0
- package/core/tooltip.d.ts +126 -0
- package/core/{tooltip.js → tooltip.ts} +136 -214
- package/core/touch.d.ts +121 -0
- package/core/touch.ts +306 -0
- package/core/touch_gesture.d.ts +115 -0
- package/core/{touch_gesture.js → touch_gesture.ts} +87 -125
- package/core/trashcan.d.ts +195 -0
- package/core/{trashcan.js → trashcan.ts} +226 -312
- package/core/utils/aria.d.ts +67 -0
- package/core/utils/{aria.js → aria.ts} +47 -61
- package/core/utils/array.d.ts +14 -0
- package/core/utils/{array.js → array.ts} +10 -12
- package/core/utils/colour.d.ts +103 -0
- package/core/utils/{colour.js → colour.ts} +60 -72
- package/core/utils/coordinate.d.ts +72 -0
- package/core/utils/coordinate.ts +124 -0
- package/core/utils/deprecation.d.ts +17 -0
- package/core/utils/{deprecation.js → deprecation.ts} +11 -11
- package/core/utils/dom.d.ts +165 -0
- package/core/utils/{dom.js → dom.ts} +125 -147
- package/core/utils/idgenerator.d.ts +25 -0
- package/core/utils/{idgenerator.js → idgenerator.ts} +15 -18
- package/core/utils/keycodes.d.ts +137 -0
- package/core/utils/keycodes.ts +169 -0
- package/core/utils/math.d.ts +30 -0
- package/core/utils/{math.js → math.ts} +17 -19
- package/core/utils/metrics.d.ts +64 -0
- package/core/utils/metrics.ts +97 -0
- package/core/utils/object.d.ts +35 -0
- package/core/utils/{object.js → object.ts} +30 -26
- package/core/utils/parsing.d.ts +50 -0
- package/core/utils/{parsing.js → parsing.ts} +50 -50
- package/core/utils/rect.d.ts +38 -0
- package/core/utils/{rect.js → rect.ts} +18 -31
- package/core/utils/sentinel.d.ts +11 -0
- package/core/utils/{sentinel.js → sentinel.ts} +3 -5
- package/core/utils/size.d.ts +27 -0
- package/core/utils/{size.js → size.ts} +12 -26
- package/core/utils/string.d.ts +55 -0
- package/core/utils/{string.js → string.ts} +64 -61
- package/core/utils/style.d.ts +127 -0
- package/core/utils/{style.js → style.ts} +102 -92
- package/core/utils/svg.d.ts +68 -0
- package/core/utils/svg.ts +88 -0
- package/core/utils/svg_math.d.ts +70 -0
- package/core/utils/{svg_math.js → svg_math.ts} +72 -71
- package/core/utils/svg_paths.d.ts +101 -0
- package/core/utils/{svg_paths.js → svg_paths.ts} +56 -65
- package/core/utils/toolbox.d.ts +193 -0
- package/core/utils/toolbox.ts +433 -0
- package/core/utils/useragent.d.ts +33 -0
- package/core/utils/useragent.ts +135 -0
- package/core/utils/xml.d.ts +52 -0
- package/core/utils/{xml.js → xml.ts} +26 -36
- package/core/utils.d.ts +217 -0
- package/core/utils.ts +428 -0
- package/core/variable_map.d.ts +141 -0
- package/core/{variable_map.js → variable_map.ts} +131 -149
- package/core/variable_model.d.ts +40 -0
- package/core/variable_model.ts +82 -0
- package/core/variables.d.ts +181 -0
- package/core/{variables.js → variables.ts} +206 -188
- package/core/variables_dynamic.d.ts +38 -0
- package/core/{variables_dynamic.js → variables_dynamic.ts} +47 -43
- package/core/warning.d.ts +50 -0
- package/core/{warning.js → warning.ts} +52 -66
- package/core/widgetdiv.d.ts +69 -0
- package/core/widgetdiv.ts +257 -0
- package/core/workspace.d.ts +386 -0
- package/core/workspace.ts +801 -0
- package/core/workspace_audio.d.ts +47 -0
- package/core/{workspace_audio.js → workspace_audio.ts} +47 -60
- package/core/workspace_comment.d.ts +170 -0
- package/core/workspace_comment.ts +398 -0
- package/core/workspace_comment_svg.d.ts +329 -0
- package/core/{workspace_comment_svg.js → workspace_comment_svg.ts} +347 -444
- package/core/workspace_drag_surface_svg.d.ts +68 -0
- package/core/{workspace_drag_surface_svg.js → workspace_drag_surface_svg.ts} +75 -82
- package/core/workspace_dragger.d.ts +48 -0
- package/core/workspace_dragger.ts +104 -0
- package/core/workspace_svg.d.ts +920 -0
- package/core/{workspace_svg.js → workspace_svg.ts} +855 -935
- package/core/xml.d.ts +117 -0
- package/core/{xml.js → xml.ts} +306 -326
- package/core/zoom_controls.d.ts +130 -0
- package/core/{zoom_controls.js → zoom_controls.ts} +185 -251
- package/core.d.ts +1 -3
- package/core.js +1 -2
- package/dart.d.ts +0 -3
- package/dart_compressed.js +387 -99
- package/dart_compressed.js.map +1 -1
- package/generators/dart/all.js +2 -0
- package/generators/dart/colour.js +1 -1
- package/generators/dart/lists.js +1 -1
- package/generators/dart/logic.js +1 -1
- package/generators/dart/loops.js +1 -1
- package/generators/dart/math.js +1 -1
- package/generators/dart/procedures.js +1 -1
- package/generators/dart/text.js +1 -1
- package/generators/dart/variables.js +1 -1
- package/generators/dart/variables_dynamic.js +1 -1
- package/generators/dart.js +1 -2
- package/generators/javascript/all.js +2 -0
- package/generators/javascript/colour.js +1 -1
- package/generators/javascript/lists.js +1 -1
- package/generators/javascript/logic.js +1 -1
- package/generators/javascript/loops.js +1 -1
- package/generators/javascript/math.js +4 -4
- package/generators/javascript/procedures.js +1 -1
- package/generators/javascript/text.js +2 -2
- package/generators/javascript/variables.js +1 -1
- package/generators/javascript/variables_dynamic.js +1 -1
- package/generators/javascript.js +1 -3
- package/generators/lua/all.js +2 -0
- package/generators/lua/colour.js +1 -1
- package/generators/lua/lists.js +1 -1
- package/generators/lua/logic.js +1 -1
- package/generators/lua/loops.js +1 -1
- package/generators/lua/math.js +1 -1
- package/generators/lua/procedures.js +1 -1
- package/generators/lua/text.js +1 -1
- package/generators/lua/variables.js +1 -1
- package/generators/lua/variables_dynamic.js +1 -1
- package/generators/lua.js +1 -2
- package/generators/php/all.js +2 -0
- package/generators/php/colour.js +1 -1
- package/generators/php/lists.js +1 -2
- package/generators/php/logic.js +1 -1
- package/generators/php/loops.js +1 -1
- package/generators/php/math.js +1 -1
- package/generators/php/procedures.js +1 -1
- package/generators/php/text.js +1 -1
- package/generators/php/variables.js +1 -1
- package/generators/php/variables_dynamic.js +1 -1
- package/generators/php.js +1 -2
- package/generators/python/all.js +2 -0
- package/generators/python/colour.js +3 -3
- package/generators/python/lists.js +1 -1
- package/generators/python/logic.js +1 -1
- package/generators/python/loops.js +4 -7
- package/generators/python/math.js +1 -1
- package/generators/python/procedures.js +1 -1
- package/generators/python/text.js +1 -1
- package/generators/python/variables.js +1 -1
- package/generators/python/variables_dynamic.js +1 -1
- package/generators/python.js +1 -2
- package/index.d.ts +2 -8
- package/javascript.d.ts +0 -3
- package/javascript_compressed.js +314 -104
- package/javascript_compressed.js.map +1 -1
- package/lua.d.ts +0 -3
- package/lua_compressed.js +399 -81
- package/lua_compressed.js.map +1 -1
- package/msg/ab.js +421 -421
- package/msg/ace.js +421 -421
- package/msg/af.js +421 -421
- package/msg/am.js +421 -421
- package/msg/ar.js +421 -421
- package/msg/ast.js +421 -421
- package/msg/az.js +421 -421
- package/msg/ba.js +421 -421
- package/msg/bcc.js +421 -421
- package/msg/be-tarask.js +421 -421
- package/msg/be.js +421 -421
- package/msg/bg.js +421 -421
- package/msg/bn.js +421 -421
- package/msg/br.js +421 -421
- package/msg/bs.js +421 -421
- package/msg/ca.js +421 -421
- package/msg/cdo.js +421 -421
- package/msg/cs.js +421 -421
- package/msg/da.js +421 -421
- package/msg/de.js +421 -421
- package/msg/diq.js +421 -421
- package/msg/dty.js +421 -421
- package/msg/ee.js +421 -421
- package/msg/el.js +421 -421
- package/msg/en-gb.js +421 -421
- package/msg/en.js +421 -421
- package/msg/eo.js +421 -421
- package/msg/es.js +421 -421
- package/msg/et.js +421 -421
- package/msg/eu.js +421 -421
- package/msg/fa.js +421 -421
- package/msg/fi.js +421 -421
- package/msg/fo.js +421 -421
- package/msg/fr.js +421 -421
- package/msg/frr.js +421 -421
- package/msg/gl.js +421 -421
- package/msg/gn.js +421 -421
- package/msg/gor.js +421 -421
- package/msg/ha.js +421 -421
- package/msg/hak.js +421 -421
- package/msg/he.js +421 -421
- package/msg/hi.js +421 -421
- package/msg/hr.js +421 -421
- package/msg/hrx.js +421 -421
- package/msg/hu.js +421 -421
- package/msg/hy.js +421 -421
- package/msg/ia.js +421 -421
- package/msg/id.js +421 -421
- package/msg/ig.js +421 -421
- package/msg/inh.js +421 -421
- package/msg/is.js +421 -421
- package/msg/it.js +421 -421
- package/msg/ja.js +421 -421
- package/msg/ka.js +421 -421
- package/msg/kab.js +421 -421
- package/msg/kbd-cyrl.js +421 -421
- package/msg/km.js +421 -421
- package/msg/kn.js +421 -421
- package/msg/ko.js +421 -421
- package/msg/ksh.js +421 -421
- package/msg/ku-latn.js +421 -421
- package/msg/ky.js +421 -421
- package/msg/la.js +421 -421
- package/msg/lb.js +421 -421
- package/msg/lki.js +421 -421
- package/msg/lo.js +421 -421
- package/msg/lrc.js +421 -421
- package/msg/lt.js +421 -421
- package/msg/lv.js +421 -421
- package/msg/mg.js +421 -421
- package/msg/mk.js +421 -421
- package/msg/ml.js +421 -421
- package/msg/mnw.js +421 -421
- package/msg/ms.js +421 -421
- package/msg/my.js +421 -421
- package/msg/mzn.js +421 -421
- package/msg/nb.js +421 -421
- package/msg/ne.js +421 -421
- package/msg/nl.js +421 -421
- package/msg/oc.js +421 -421
- package/msg/olo.js +421 -421
- package/msg/pa.js +421 -421
- package/msg/pl.js +421 -421
- package/msg/pms.js +421 -421
- package/msg/ps.js +421 -421
- package/msg/pt-br.js +421 -421
- package/msg/pt.js +421 -421
- package/msg/ro.js +421 -421
- package/msg/ru.js +421 -421
- package/msg/sc.js +421 -421
- package/msg/sco.js +421 -421
- package/msg/sd.js +421 -421
- package/msg/shn.js +421 -421
- package/msg/si.js +421 -421
- package/msg/sk.js +421 -421
- package/msg/skr-arab.js +421 -421
- package/msg/sl.js +421 -421
- package/msg/smn.js +421 -421
- package/msg/sq.js +421 -421
- package/msg/sr-latn.js +421 -421
- package/msg/sr.js +421 -421
- package/msg/sv.js +421 -421
- package/msg/sw.js +421 -421
- package/msg/ta.js +421 -421
- package/msg/tcy.js +421 -421
- package/msg/te.js +421 -421
- package/msg/th.js +421 -421
- package/msg/ti.js +421 -421
- package/msg/tl.js +421 -421
- package/msg/tlh.js +421 -421
- package/msg/tr.js +421 -421
- package/msg/ug-arab.js +421 -421
- package/msg/uk.js +421 -421
- package/msg/ur.js +421 -421
- package/msg/uz.js +421 -421
- package/msg/vi.js +421 -421
- package/msg/xmf.js +421 -421
- package/msg/yo.js +421 -421
- package/msg/yue.js +421 -421
- package/msg/zgh.js +421 -421
- package/msg/zh-hans.js +421 -421
- package/msg/zh-hant.js +421 -421
- package/package.json +5 -5
- package/php.d.ts +0 -3
- package/php_compressed.js +322 -93
- package/php_compressed.js.map +1 -1
- package/python.d.ts +0 -3
- package/python_compressed.js +237 -90
- package/python_compressed.js.map +1 -1
- package/blockly.d.ts +0 -26127
- package/core/blockly_options.js +0 -28
- package/core/bubble_dragger.js +0 -298
- package/core/clipboard.js +0 -80
- package/core/component_manager.js +0 -263
- package/core/contextmenu_items.js +0 -651
- package/core/contextmenu_registry.js +0 -178
- package/core/delete_area.js +0 -87
- package/core/dialog.js +0 -107
- package/core/drag_target.js +0 -98
- package/core/events/events.js +0 -147
- package/core/events/events_abstract.js +0 -133
- package/core/events/events_block_base.js +0 -70
- package/core/events/events_block_drag.js +0 -89
- package/core/events/events_bubble_open.js +0 -90
- package/core/events/events_comment_base.js +0 -121
- package/core/events/events_marker_move.js +0 -110
- package/core/events/events_selected.js +0 -83
- package/core/events/events_toolbox_item_select.js +0 -84
- package/core/events/events_trashcan_open.js +0 -73
- package/core/events/events_var_base.js +0 -70
- package/core/events/events_viewport.js +0 -107
- package/core/events/workspace_events.js +0 -93
- package/core/field_angle.js +0 -591
- package/core/field_checkbox.js +0 -255
- package/core/field_colour.js +0 -717
- package/core/field_image.js +0 -304
- package/core/field_label.js +0 -149
- package/core/field_label_serializable.js +0 -80
- package/core/field_textinput.js +0 -619
- package/core/flyout_button.js +0 -356
- package/core/grid.js +0 -226
- package/core/icon.js +0 -225
- package/core/input.js +0 -335
- package/core/interfaces/i_ast_node_location_svg.js +0 -45
- package/core/interfaces/i_ast_node_location_with_block.js +0 -41
- package/core/interfaces/i_autohideable.js +0 -40
- package/core/interfaces/i_block_dragger.js +0 -66
- package/core/interfaces/i_bounded_element.js +0 -45
- package/core/interfaces/i_bubble.js +0 -95
- package/core/interfaces/i_collapsible_toolbox_item.js +0 -53
- package/core/interfaces/i_connection_checker.js +0 -104
- package/core/interfaces/i_contextmenu.js +0 -32
- package/core/interfaces/i_copyable.js +0 -49
- package/core/interfaces/i_delete_area.js +0 -50
- package/core/interfaces/i_drag_target.js +0 -88
- package/core/interfaces/i_flyout.js +0 -201
- package/core/interfaces/i_keyboard_accessible.js +0 -38
- package/core/interfaces/i_metrics_manager.js +0 -154
- package/core/interfaces/i_positionable.js +0 -51
- package/core/interfaces/i_selectable.js +0 -51
- package/core/interfaces/i_selectable_toolbox_item.js +0 -73
- package/core/interfaces/i_serializer.js +0 -77
- package/core/interfaces/i_styleable.js +0 -39
- package/core/interfaces/i_toolbox.js +0 -142
- package/core/interfaces/i_toolbox_item.js +0 -85
- package/core/marker_manager.js +0 -213
- package/core/menuitem.js +0 -292
- package/core/names.js +0 -293
- package/core/registry.js +0 -384
- package/core/renderers/common/block_rendering.js +0 -170
- package/core/renderers/common/constants.js +0 -1250
- package/core/renderers/common/i_path_object.js +0 -162
- package/core/renderers/common/marker_svg.js +0 -721
- package/core/renderers/common/path_object.js +0 -283
- package/core/renderers/common/renderer.js +0 -305
- package/core/renderers/geras/constants.js +0 -73
- package/core/renderers/geras/geras.js +0 -36
- package/core/renderers/geras/measurables/inline_input.js +0 -58
- package/core/renderers/geras/measurables/statement_input.js +0 -57
- package/core/renderers/geras/renderer.js +0 -149
- package/core/renderers/measurables/base.js +0 -64
- package/core/renderers/measurables/bottom_row.js +0 -138
- package/core/renderers/measurables/connection.js +0 -56
- package/core/renderers/measurables/external_value_input.js +0 -70
- package/core/renderers/measurables/field.js +0 -71
- package/core/renderers/measurables/in_row_spacer.js +0 -47
- package/core/renderers/measurables/input_connection.js +0 -75
- package/core/renderers/measurables/next_connection.js +0 -50
- package/core/renderers/measurables/output_connection.js +0 -61
- package/core/renderers/measurables/previous_connection.js +0 -50
- package/core/renderers/measurables/round_corner.js +0 -52
- package/core/renderers/measurables/row.js +0 -247
- package/core/renderers/measurables/spacer_row.js +0 -69
- package/core/renderers/measurables/square_corner.js +0 -50
- package/core/renderers/measurables/top_row.js +0 -143
- package/core/renderers/measurables/types.js +0 -353
- package/core/renderers/minimalist/drawer.js +0 -42
- package/core/renderers/minimalist/info.js +0 -54
- package/core/renderers/minimalist/minimalist.js +0 -26
- package/core/renderers/minimalist/renderer.js +0 -80
- package/core/renderers/thrasos/renderer.js +0 -53
- package/core/renderers/thrasos/thrasos.js +0 -22
- package/core/renderers/zelos/marker_svg.js +0 -179
- package/core/renderers/zelos/measurables/bottom_row.js +0 -66
- package/core/renderers/zelos/measurables/row_elements.js +0 -46
- package/core/renderers/zelos/path_object.js +0 -247
- package/core/renderers/zelos/renderer.js +0 -147
- package/core/renderers/zelos/zelos.js +0 -38
- package/core/serialization/exceptions.js +0 -144
- package/core/shortcut_registry.js +0 -366
- package/core/theme/themes.js +0 -23
- package/core/theme.js +0 -228
- package/core/theme_manager.js +0 -211
- package/core/toolbox/category.js +0 -751
- package/core/toolbox/collapsible_category.js +0 -311
- package/core/toolbox/separator.js +0 -133
- package/core/toolbox/toolbox_item.js +0 -173
- package/core/touch.js +0 -285
- package/core/utils/coordinate.js +0 -138
- package/core/utils/global.js +0 -41
- package/core/utils/keycodes.js +0 -172
- package/core/utils/metrics.js +0 -154
- package/core/utils/svg.js +0 -186
- package/core/utils/toolbox.js +0 -459
- package/core/utils/useragent.js +0 -197
- package/core/utils.js +0 -383
- package/core/variable_model.js +0 -96
- package/core/widgetdiv.js +0 -290
- package/core/workspace.js +0 -836
- package/core/workspace_comment.js +0 -400
- package/core/workspace_dragger.js +0 -115
|
@@ -7,322 +7,324 @@
|
|
|
7
7
|
/**
|
|
8
8
|
* @fileoverview Flyout tray containing blocks which may be created.
|
|
9
9
|
*/
|
|
10
|
-
'use strict';
|
|
11
10
|
|
|
12
11
|
/**
|
|
13
12
|
* Flyout tray containing blocks which may be created.
|
|
14
13
|
* @class
|
|
15
14
|
*/
|
|
16
|
-
goog
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
/** @suppress {extraRequire} */
|
|
54
|
-
goog.require('Blockly.Touch');
|
|
55
|
-
/** @suppress {extraRequire} */
|
|
56
|
-
goog.require('Blockly.blockRendering');
|
|
57
|
-
|
|
15
|
+
import * as goog from '../closure/goog/goog.js';
|
|
16
|
+
goog.declareModuleId('Blockly.Flyout');
|
|
17
|
+
|
|
18
|
+
import type {Block} from './block.js';
|
|
19
|
+
import type {BlockSvg} from './block_svg.js';
|
|
20
|
+
import * as browserEvents from './browser_events.js';
|
|
21
|
+
import * as common from './common.js';
|
|
22
|
+
import {ComponentManager} from './component_manager.js';
|
|
23
|
+
import {DeleteArea} from './delete_area.js';
|
|
24
|
+
import * as BlockCreate from './events/events_block_create.js';
|
|
25
|
+
import * as VarCreate from './events/events_var_create.js';
|
|
26
|
+
import * as eventUtils from './events/utils.js';
|
|
27
|
+
import {FlyoutButton} from './flyout_button.js';
|
|
28
|
+
import {FlyoutMetricsManager} from './flyout_metrics_manager.js';
|
|
29
|
+
import * as Gesture from './gesture.js';
|
|
30
|
+
import type {IFlyout} from './interfaces/i_flyout.js';
|
|
31
|
+
import type {Options} from './options.js';
|
|
32
|
+
import * as blockRendering from './renderers/common/block_rendering.js';
|
|
33
|
+
import {ScrollbarPair} from './scrollbar_pair.js';
|
|
34
|
+
import * as blocks from './serialization/blocks.js';
|
|
35
|
+
import * as Tooltip from './tooltip.js';
|
|
36
|
+
import * as Touch from './touch.js';
|
|
37
|
+
import {Coordinate} from './utils/coordinate.js';
|
|
38
|
+
import * as dom from './utils/dom.js';
|
|
39
|
+
import * as idGenerator from './utils/idgenerator.js';
|
|
40
|
+
import type {Rect} from './utils/rect.js';
|
|
41
|
+
import {Svg} from './utils/svg.js';
|
|
42
|
+
import * as toolbox from './utils/toolbox.js';
|
|
43
|
+
import * as Variables from './variables.js';
|
|
44
|
+
import {WorkspaceSvg} from './workspace_svg.js';
|
|
45
|
+
import * as Xml from './xml.js';
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
enum FlyoutItemType {
|
|
49
|
+
BLOCK = 'block',
|
|
50
|
+
BUTTON = 'button',
|
|
51
|
+
}
|
|
58
52
|
|
|
59
53
|
/**
|
|
60
54
|
* Class for a flyout.
|
|
61
|
-
* @abstract
|
|
62
|
-
* @implements {IFlyout}
|
|
63
|
-
* @extends {DeleteArea}
|
|
64
55
|
* @alias Blockly.Flyout
|
|
65
56
|
*/
|
|
66
|
-
class Flyout extends DeleteArea {
|
|
57
|
+
export abstract class Flyout extends DeleteArea implements IFlyout {
|
|
58
|
+
/**
|
|
59
|
+
* Position the flyout.
|
|
60
|
+
*/
|
|
61
|
+
abstract position(): void;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Determine if a drag delta is toward the workspace, based on the position
|
|
65
|
+
* and orientation of the flyout. This is used in determineDragIntention_ to
|
|
66
|
+
* determine if a new block should be created or if the flyout should scroll.
|
|
67
|
+
* @param currentDragDeltaXY How far the pointer has
|
|
68
|
+
* moved from the position at mouse down, in pixel units.
|
|
69
|
+
* @return True if the drag is toward the workspace.
|
|
70
|
+
*/
|
|
71
|
+
abstract isDragTowardWorkspace(currentDragDeltaXY: Coordinate): boolean;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Sets the translation of the flyout to match the scrollbars.
|
|
75
|
+
* @param xyRatio Contains a y property which is a float
|
|
76
|
+
* between 0 and 1 specifying the degree of scrolling and a
|
|
77
|
+
* similar x property.
|
|
78
|
+
*/
|
|
79
|
+
protected abstract setMetrics_(xyRatio: {x: number, y: number}): void;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Lay out the blocks in the flyout.
|
|
83
|
+
* @param contents The blocks and buttons to lay
|
|
84
|
+
* out.
|
|
85
|
+
* @param gaps The visible gaps between blocks.
|
|
86
|
+
*/
|
|
87
|
+
protected abstract layout_(contents: FlyoutItem[], gaps: number[]): void;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Scroll the flyout.
|
|
91
|
+
* @param e Mouse wheel scroll event.
|
|
92
|
+
*/
|
|
93
|
+
protected abstract wheel_(e: WheelEvent): void;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Compute height of flyout. Position mat under each block.
|
|
97
|
+
* For RTL: Lay out the blocks right-aligned.
|
|
98
|
+
*/
|
|
99
|
+
protected abstract reflowInternal_(): void;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Calculates the x coordinate for the flyout position.
|
|
103
|
+
* @return X coordinate.
|
|
104
|
+
*/
|
|
105
|
+
abstract getX(): number;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Calculates the y coordinate for the flyout position.
|
|
109
|
+
* @return Y coordinate.
|
|
110
|
+
*/
|
|
111
|
+
abstract getY(): number;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Scroll the flyout to the beginning of its contents.
|
|
115
|
+
*/
|
|
116
|
+
abstract scrollToStart(): void;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* The type of a flyout content item.
|
|
120
|
+
*/
|
|
121
|
+
static FlyoutItemType = FlyoutItemType;
|
|
122
|
+
|
|
123
|
+
protected workspace_: WorkspaceSvg;
|
|
124
|
+
RTL: boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Whether the flyout should be laid out horizontally or not.
|
|
127
|
+
* @internal
|
|
128
|
+
*/
|
|
129
|
+
horizontalLayout: boolean = false;
|
|
130
|
+
protected toolboxPosition_: number;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Opaque data that can be passed to Blockly.unbindEvent_.
|
|
134
|
+
*/
|
|
135
|
+
private eventWrappers_: browserEvents.Data = [];
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Function that will be registered as a change listener on the workspace
|
|
139
|
+
* to reflow when blocks in the flyout workspace change.
|
|
140
|
+
*/
|
|
141
|
+
private reflowWrapper_: Function|null = null;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Function that disables blocks in the flyout based on max block counts
|
|
145
|
+
* allowed in the target workspace. Registered as a change listener on the
|
|
146
|
+
* target workspace.
|
|
147
|
+
*/
|
|
148
|
+
private filterWrapper_: Function|null = null;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* List of background mats that lurk behind each block to catch clicks
|
|
152
|
+
* landing in the blocks' lakes and bays.
|
|
153
|
+
*/
|
|
154
|
+
private mats_: SVGElement[] = [];
|
|
67
155
|
/**
|
|
68
|
-
*
|
|
156
|
+
* List of visible buttons.
|
|
157
|
+
*/
|
|
158
|
+
protected buttons_: FlyoutButton[] = [];
|
|
159
|
+
/**
|
|
160
|
+
* List of event listeners.
|
|
161
|
+
*/
|
|
162
|
+
private listeners_: AnyDuringMigration[][] = [];
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* List of blocks that should always be disabled.
|
|
166
|
+
*/
|
|
167
|
+
private permanentlyDisabled_: Block[] = [];
|
|
168
|
+
protected readonly tabWidth_: number;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* The target workspace.
|
|
172
|
+
* @internal
|
|
173
|
+
*/
|
|
174
|
+
targetWorkspace!: WorkspaceSvg;
|
|
175
|
+
/**
|
|
176
|
+
* A list of blocks that can be reused.
|
|
177
|
+
*/
|
|
178
|
+
private recycledBlocks_: BlockSvg[] = [];
|
|
179
|
+
/**
|
|
180
|
+
* Does the flyout automatically close when a block is created?
|
|
181
|
+
*/
|
|
182
|
+
autoClose: boolean = true;
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Whether the flyout is visible.
|
|
186
|
+
*/
|
|
187
|
+
private isVisible_: boolean = false;
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Whether the workspace containing this flyout is visible.
|
|
191
|
+
*/
|
|
192
|
+
private containerVisible_: boolean = true;
|
|
193
|
+
protected rectMap_: WeakMap<BlockSvg, SVGElement>;
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Corner radius of the flyout background.
|
|
197
|
+
*/
|
|
198
|
+
readonly CORNER_RADIUS: number = 8;
|
|
199
|
+
readonly MARGIN: number;
|
|
200
|
+
readonly GAP_X: number;
|
|
201
|
+
readonly GAP_Y: number;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Top/bottom padding between scrollbar and edge of flyout background.
|
|
205
|
+
*/
|
|
206
|
+
readonly SCROLLBAR_MARGIN: number = 2.5;
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Width of flyout.
|
|
210
|
+
*/
|
|
211
|
+
protected width_: number = 0;
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Height of flyout.
|
|
215
|
+
*/
|
|
216
|
+
protected height_: number = 0;
|
|
217
|
+
// clang-format off
|
|
218
|
+
/**
|
|
219
|
+
* Range of a drag angle from a flyout considered "dragging toward
|
|
220
|
+
* workspace". Drags that are within the bounds of this many degrees from
|
|
221
|
+
* the orthogonal line to the flyout edge are considered to be "drags toward
|
|
222
|
+
* the workspace".
|
|
223
|
+
* Example:
|
|
224
|
+
* Flyout Edge Workspace
|
|
225
|
+
* [block] / <-within this angle, drags "toward workspace" |
|
|
226
|
+
* [block] ---- orthogonal to flyout boundary ---- |
|
|
227
|
+
* [block] \ |
|
|
228
|
+
* The angle is given in degrees from the orthogonal.
|
|
229
|
+
*
|
|
230
|
+
* This is used to know when to create a new block and when to scroll the
|
|
231
|
+
* flyout. Setting it to 360 means that all drags create a new block.
|
|
232
|
+
*/
|
|
233
|
+
// clang-format on
|
|
234
|
+
protected dragAngleRange_: number = 70;
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* The path around the background of the flyout, which will be filled with a
|
|
238
|
+
* background colour.
|
|
239
|
+
*/
|
|
240
|
+
protected svgBackground_: SVGPathElement|null = null;
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* The root SVG group for the button or label.
|
|
244
|
+
*/
|
|
245
|
+
protected svgGroup_: SVGGElement|null = null;
|
|
246
|
+
/**
|
|
247
|
+
* @param workspaceOptions Dictionary of options for the
|
|
69
248
|
* workspace.
|
|
70
249
|
*/
|
|
71
|
-
constructor(workspaceOptions) {
|
|
250
|
+
constructor(workspaceOptions: Options) {
|
|
72
251
|
super();
|
|
73
252
|
workspaceOptions.setMetrics = this.setMetrics_.bind(this);
|
|
74
253
|
|
|
75
|
-
/**
|
|
76
|
-
* @type {!WorkspaceSvg}
|
|
77
|
-
* @protected
|
|
78
|
-
*/
|
|
79
254
|
this.workspace_ = new WorkspaceSvg(workspaceOptions);
|
|
80
255
|
this.workspace_.setMetricsManager(
|
|
81
256
|
new FlyoutMetricsManager(this.workspace_, this));
|
|
82
257
|
|
|
83
|
-
this.workspace_.
|
|
258
|
+
this.workspace_.internalIsFlyout = true;
|
|
84
259
|
// Keep the workspace visibility consistent with the flyout's visibility.
|
|
85
260
|
this.workspace_.setVisible(this.isVisible_);
|
|
86
261
|
|
|
87
262
|
/**
|
|
88
263
|
* The unique id for this component that is used to register with the
|
|
89
264
|
* ComponentManager.
|
|
90
|
-
* @type {string}
|
|
91
265
|
*/
|
|
92
266
|
this.id = idGenerator.genUid();
|
|
93
267
|
|
|
94
268
|
/**
|
|
95
269
|
* Is RTL vs LTR.
|
|
96
|
-
* @type {boolean}
|
|
97
270
|
*/
|
|
98
271
|
this.RTL = !!workspaceOptions.RTL;
|
|
99
272
|
|
|
100
|
-
/**
|
|
101
|
-
* Whether the flyout should be laid out horizontally or not.
|
|
102
|
-
* @type {boolean}
|
|
103
|
-
* @package
|
|
104
|
-
*/
|
|
105
|
-
this.horizontalLayout = false;
|
|
106
|
-
|
|
107
273
|
/**
|
|
108
274
|
* Position of the toolbox and flyout relative to the workspace.
|
|
109
|
-
* @type {number}
|
|
110
|
-
* @protected
|
|
111
275
|
*/
|
|
112
276
|
this.toolboxPosition_ = workspaceOptions.toolboxPosition;
|
|
113
277
|
|
|
114
|
-
/**
|
|
115
|
-
* Opaque data that can be passed to Blockly.unbindEvent_.
|
|
116
|
-
* @type {!Array<!Array>}
|
|
117
|
-
* @private
|
|
118
|
-
*/
|
|
119
|
-
this.eventWrappers_ = [];
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Function that will be registered as a change listener on the workspace
|
|
123
|
-
* to reflow when blocks in the flyout workspace change.
|
|
124
|
-
* @type {?Function}
|
|
125
|
-
* @private
|
|
126
|
-
*/
|
|
127
|
-
this.reflowWrapper_ = null;
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Function that disables blocks in the flyout based on max block counts
|
|
131
|
-
* allowed in the target workspace. Registered as a change listener on the
|
|
132
|
-
* target workspace.
|
|
133
|
-
* @type {?Function}
|
|
134
|
-
* @private
|
|
135
|
-
*/
|
|
136
|
-
this.filterWrapper_ = null;
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* List of background mats that lurk behind each block to catch clicks
|
|
140
|
-
* landing in the blocks' lakes and bays.
|
|
141
|
-
* @type {!Array<!SVGElement>}
|
|
142
|
-
* @private
|
|
143
|
-
*/
|
|
144
|
-
this.mats_ = [];
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* List of visible buttons.
|
|
148
|
-
* @type {!Array<!FlyoutButton>}
|
|
149
|
-
* @protected
|
|
150
|
-
*/
|
|
151
|
-
this.buttons_ = [];
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* List of event listeners.
|
|
155
|
-
* @type {!Array<!Array>}
|
|
156
|
-
* @private
|
|
157
|
-
*/
|
|
158
|
-
this.listeners_ = [];
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* List of blocks that should always be disabled.
|
|
162
|
-
* @type {!Array<!Block>}
|
|
163
|
-
* @private
|
|
164
|
-
*/
|
|
165
|
-
this.permanentlyDisabled_ = [];
|
|
166
|
-
|
|
167
278
|
/**
|
|
168
279
|
* Width of output tab.
|
|
169
|
-
* @type {number}
|
|
170
|
-
* @protected
|
|
171
|
-
* @const
|
|
172
280
|
*/
|
|
173
281
|
this.tabWidth_ = this.workspace_.getRenderer().getConstants().TAB_WIDTH;
|
|
174
282
|
|
|
175
|
-
/**
|
|
176
|
-
* The target workspace
|
|
177
|
-
* @type {?WorkspaceSvg}
|
|
178
|
-
* @package
|
|
179
|
-
*/
|
|
180
|
-
this.targetWorkspace = null;
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* A list of blocks that can be reused.
|
|
184
|
-
* @type {!Array<!BlockSvg>}
|
|
185
|
-
* @private
|
|
186
|
-
*/
|
|
187
|
-
this.recycledBlocks_ = [];
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Does the flyout automatically close when a block is created?
|
|
191
|
-
* @type {boolean}
|
|
192
|
-
*/
|
|
193
|
-
this.autoClose = true;
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* Whether the flyout is visible.
|
|
197
|
-
* @type {boolean}
|
|
198
|
-
* @private
|
|
199
|
-
*/
|
|
200
|
-
this.isVisible_ = false;
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Whether the workspace containing this flyout is visible.
|
|
204
|
-
* @type {boolean}
|
|
205
|
-
* @private
|
|
206
|
-
*/
|
|
207
|
-
this.containerVisible_ = true;
|
|
208
|
-
|
|
209
283
|
/**
|
|
210
284
|
* A map from blocks to the rects which are beneath them to act as input
|
|
211
285
|
* targets.
|
|
212
|
-
* @
|
|
213
|
-
* @private
|
|
286
|
+
* @internal
|
|
214
287
|
*/
|
|
215
288
|
this.rectMap_ = new WeakMap();
|
|
216
289
|
|
|
217
|
-
/**
|
|
218
|
-
* Corner radius of the flyout background.
|
|
219
|
-
* @type {number}
|
|
220
|
-
* @const
|
|
221
|
-
*/
|
|
222
|
-
this.CORNER_RADIUS = 8;
|
|
223
|
-
|
|
224
290
|
/**
|
|
225
291
|
* Margin around the edges of the blocks in the flyout.
|
|
226
|
-
* @type {number}
|
|
227
|
-
* @const
|
|
228
292
|
*/
|
|
229
293
|
this.MARGIN = this.CORNER_RADIUS;
|
|
230
294
|
|
|
231
295
|
// TODO: Move GAP_X and GAP_Y to their appropriate files.
|
|
232
|
-
|
|
233
296
|
/**
|
|
234
297
|
* Gap between items in horizontal flyouts. Can be overridden with the "sep"
|
|
235
298
|
* element.
|
|
236
|
-
* @const {number}
|
|
237
299
|
*/
|
|
238
300
|
this.GAP_X = this.MARGIN * 3;
|
|
239
301
|
|
|
240
302
|
/**
|
|
241
303
|
* Gap between items in vertical flyouts. Can be overridden with the "sep"
|
|
242
304
|
* element.
|
|
243
|
-
* @const {number}
|
|
244
305
|
*/
|
|
245
306
|
this.GAP_Y = this.MARGIN * 3;
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Top/bottom padding between scrollbar and edge of flyout background.
|
|
249
|
-
* @type {number}
|
|
250
|
-
* @const
|
|
251
|
-
*/
|
|
252
|
-
this.SCROLLBAR_MARGIN = 2.5;
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Width of flyout.
|
|
256
|
-
* @type {number}
|
|
257
|
-
* @protected
|
|
258
|
-
*/
|
|
259
|
-
this.width_ = 0;
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Height of flyout.
|
|
263
|
-
* @type {number}
|
|
264
|
-
* @protected
|
|
265
|
-
*/
|
|
266
|
-
this.height_ = 0;
|
|
267
|
-
|
|
268
|
-
// clang-format off
|
|
269
|
-
/**
|
|
270
|
-
* Range of a drag angle from a flyout considered "dragging toward
|
|
271
|
-
* workspace". Drags that are within the bounds of this many degrees from
|
|
272
|
-
* the orthogonal line to the flyout edge are considered to be "drags toward
|
|
273
|
-
* the workspace".
|
|
274
|
-
* Example:
|
|
275
|
-
* Flyout Edge Workspace
|
|
276
|
-
* [block] / <-within this angle, drags "toward workspace" |
|
|
277
|
-
* [block] ---- orthogonal to flyout boundary ---- |
|
|
278
|
-
* [block] \ |
|
|
279
|
-
* The angle is given in degrees from the orthogonal.
|
|
280
|
-
*
|
|
281
|
-
* This is used to know when to create a new block and when to scroll the
|
|
282
|
-
* flyout. Setting it to 360 means that all drags create a new block.
|
|
283
|
-
* @type {number}
|
|
284
|
-
* @protected
|
|
285
|
-
*/
|
|
286
|
-
// clang-format on
|
|
287
|
-
this.dragAngleRange_ = 70;
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* The path around the background of the flyout, which will be filled with a
|
|
291
|
-
* background colour.
|
|
292
|
-
* @type {?SVGPathElement}
|
|
293
|
-
* @protected
|
|
294
|
-
*/
|
|
295
|
-
this.svgBackground_ = null;
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* The root SVG group for the button or label.
|
|
299
|
-
* @type {?SVGGElement}
|
|
300
|
-
* @protected
|
|
301
|
-
*/
|
|
302
|
-
this.svgGroup_ = null;
|
|
303
307
|
}
|
|
304
308
|
|
|
305
309
|
/**
|
|
306
310
|
* Creates the flyout's DOM. Only needs to be called once. The flyout can
|
|
307
311
|
* either exist as its own SVG element or be a g element nested inside a
|
|
308
312
|
* separate SVG element.
|
|
309
|
-
* @param
|
|
310
|
-
* !Svg<!SVGSVGElement>|
|
|
311
|
-
* !Svg<!SVGGElement>} tagName The type of tag to
|
|
313
|
+
* @param tagName The type of tag to
|
|
312
314
|
* put the flyout in. This should be <svg> or <g>.
|
|
313
|
-
* @return
|
|
315
|
+
* @return The flyout's SVG group.
|
|
314
316
|
*/
|
|
315
|
-
createDom(tagName) {
|
|
317
|
+
createDom(tagName: string|Svg<SVGSVGElement>|Svg<SVGGElement>): SVGElement {
|
|
316
318
|
/*
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
319
|
+
<svg | g>
|
|
320
|
+
<path class="blocklyFlyoutBackground"/>
|
|
321
|
+
<g class="blocklyFlyout"></g>
|
|
322
|
+
</ svg | g>
|
|
323
|
+
*/
|
|
322
324
|
// Setting style to display:none to start. The toolbox and flyout
|
|
323
325
|
// hide/show code will set up proper visibility and size later.
|
|
324
326
|
this.svgGroup_ = dom.createSvgElement(
|
|
325
|
-
tagName, {'class': 'blocklyFlyout', 'style': 'display: none'}
|
|
327
|
+
tagName, {'class': 'blocklyFlyout', 'style': 'display: none'});
|
|
326
328
|
this.svgBackground_ = dom.createSvgElement(
|
|
327
329
|
Svg.PATH, {'class': 'blocklyFlyoutBackground'}, this.svgGroup_);
|
|
328
330
|
this.svgGroup_.appendChild(this.workspace_.createDom());
|
|
@@ -335,10 +337,10 @@ class Flyout extends DeleteArea {
|
|
|
335
337
|
|
|
336
338
|
/**
|
|
337
339
|
* Initializes the flyout.
|
|
338
|
-
* @param
|
|
340
|
+
* @param targetWorkspace The workspace in which to
|
|
339
341
|
* create new blocks.
|
|
340
342
|
*/
|
|
341
|
-
init(targetWorkspace) {
|
|
343
|
+
init(targetWorkspace: WorkspaceSvg) {
|
|
342
344
|
this.targetWorkspace = targetWorkspace;
|
|
343
345
|
this.workspace_.targetWorkspace = targetWorkspace;
|
|
344
346
|
|
|
@@ -351,8 +353,7 @@ class Flyout extends DeleteArea {
|
|
|
351
353
|
Array.prototype.push.apply(
|
|
352
354
|
this.eventWrappers_,
|
|
353
355
|
browserEvents.conditionalBind(
|
|
354
|
-
|
|
355
|
-
this.wheel_));
|
|
356
|
+
(this.svgGroup_ as SVGGElement), 'wheel', this, this.wheel_));
|
|
356
357
|
if (!this.autoClose) {
|
|
357
358
|
this.filterWrapper_ = this.filterForCapacity_.bind(this);
|
|
358
359
|
this.targetWorkspace.addChangeListener(this.filterWrapper_);
|
|
@@ -362,8 +363,8 @@ class Flyout extends DeleteArea {
|
|
|
362
363
|
Array.prototype.push.apply(
|
|
363
364
|
this.eventWrappers_,
|
|
364
365
|
browserEvents.conditionalBind(
|
|
365
|
-
|
|
366
|
-
this
|
|
366
|
+
(this.svgBackground_ as SVGPathElement), 'mousedown', this,
|
|
367
|
+
this.onMouseDown_));
|
|
367
368
|
|
|
368
369
|
// A flyout connected to a workspace doesn't have its own current gesture.
|
|
369
370
|
this.workspace_.getGesture =
|
|
@@ -398,58 +399,55 @@ class Flyout extends DeleteArea {
|
|
|
398
399
|
this.filterWrapper_ = null;
|
|
399
400
|
}
|
|
400
401
|
if (this.workspace_) {
|
|
401
|
-
this.workspace_.getThemeManager().unsubscribe(this.svgBackground_);
|
|
402
|
-
this.workspace_.targetWorkspace = null;
|
|
402
|
+
this.workspace_.getThemeManager().unsubscribe(this.svgBackground_!);
|
|
403
403
|
this.workspace_.dispose();
|
|
404
|
-
this.workspace_ = null;
|
|
405
404
|
}
|
|
406
405
|
if (this.svgGroup_) {
|
|
407
406
|
dom.removeNode(this.svgGroup_);
|
|
408
407
|
this.svgGroup_ = null;
|
|
409
408
|
}
|
|
410
409
|
this.svgBackground_ = null;
|
|
411
|
-
this.targetWorkspace = null;
|
|
412
410
|
}
|
|
413
411
|
|
|
414
412
|
/**
|
|
415
413
|
* Get the width of the flyout.
|
|
416
|
-
* @return
|
|
414
|
+
* @return The width of the flyout.
|
|
417
415
|
*/
|
|
418
|
-
getWidth() {
|
|
416
|
+
getWidth(): number {
|
|
419
417
|
return this.width_;
|
|
420
418
|
}
|
|
421
419
|
|
|
422
420
|
/**
|
|
423
421
|
* Get the height of the flyout.
|
|
424
|
-
* @return
|
|
422
|
+
* @return The width of the flyout.
|
|
425
423
|
*/
|
|
426
|
-
getHeight() {
|
|
424
|
+
getHeight(): number {
|
|
427
425
|
return this.height_;
|
|
428
426
|
}
|
|
429
427
|
|
|
430
428
|
/**
|
|
431
429
|
* Get the scale (zoom level) of the flyout. By default,
|
|
432
430
|
* this matches the target workspace scale, but this can be overridden.
|
|
433
|
-
* @return
|
|
431
|
+
* @return Flyout workspace scale.
|
|
434
432
|
*/
|
|
435
|
-
getFlyoutScale() {
|
|
433
|
+
getFlyoutScale(): number {
|
|
436
434
|
return this.targetWorkspace.scale;
|
|
437
435
|
}
|
|
438
436
|
|
|
439
437
|
/**
|
|
440
438
|
* Get the workspace inside the flyout.
|
|
441
|
-
* @return
|
|
442
|
-
* @
|
|
439
|
+
* @return The workspace inside the flyout.
|
|
440
|
+
* @internal
|
|
443
441
|
*/
|
|
444
|
-
getWorkspace() {
|
|
442
|
+
getWorkspace(): WorkspaceSvg {
|
|
445
443
|
return this.workspace_;
|
|
446
444
|
}
|
|
447
445
|
|
|
448
446
|
/**
|
|
449
447
|
* Is the flyout visible?
|
|
450
|
-
* @return
|
|
448
|
+
* @return True if visible.
|
|
451
449
|
*/
|
|
452
|
-
isVisible() {
|
|
450
|
+
isVisible(): boolean {
|
|
453
451
|
return this.isVisible_;
|
|
454
452
|
}
|
|
455
453
|
|
|
@@ -457,10 +455,10 @@ class Flyout extends DeleteArea {
|
|
|
457
455
|
* Set whether the flyout is visible. A value of true does not necessarily
|
|
458
456
|
* mean that the flyout is shown. It could be hidden because its container is
|
|
459
457
|
* hidden.
|
|
460
|
-
* @param
|
|
458
|
+
* @param visible True if visible.
|
|
461
459
|
*/
|
|
462
|
-
setVisible(visible) {
|
|
463
|
-
const visibilityChanged =
|
|
460
|
+
setVisible(visible: boolean) {
|
|
461
|
+
const visibilityChanged = visible !== this.isVisible();
|
|
464
462
|
|
|
465
463
|
this.isVisible_ = visible;
|
|
466
464
|
if (visibilityChanged) {
|
|
@@ -475,10 +473,10 @@ class Flyout extends DeleteArea {
|
|
|
475
473
|
|
|
476
474
|
/**
|
|
477
475
|
* Set whether this flyout's container is visible.
|
|
478
|
-
* @param
|
|
476
|
+
* @param visible Whether the container is visible.
|
|
479
477
|
*/
|
|
480
|
-
setContainerVisible(visible) {
|
|
481
|
-
const visibilityChanged =
|
|
478
|
+
setContainerVisible(visible: boolean) {
|
|
479
|
+
const visibilityChanged = visible !== this.containerVisible_;
|
|
482
480
|
this.containerVisible_ = visible;
|
|
483
481
|
if (visibilityChanged) {
|
|
484
482
|
this.updateDisplay_();
|
|
@@ -488,16 +486,17 @@ class Flyout extends DeleteArea {
|
|
|
488
486
|
/**
|
|
489
487
|
* Update the display property of the flyout based whether it thinks it should
|
|
490
488
|
* be visible and whether its containing workspace is visible.
|
|
491
|
-
* @private
|
|
492
489
|
*/
|
|
493
|
-
updateDisplay_() {
|
|
490
|
+
private updateDisplay_() {
|
|
494
491
|
let show = true;
|
|
495
492
|
if (!this.containerVisible_) {
|
|
496
493
|
show = false;
|
|
497
494
|
} else {
|
|
498
495
|
show = this.isVisible();
|
|
499
496
|
}
|
|
500
|
-
this.svgGroup_
|
|
497
|
+
if (this.svgGroup_) {
|
|
498
|
+
this.svgGroup_.style.display = show ? 'block' : 'none';
|
|
499
|
+
}
|
|
501
500
|
// Update the scrollbar's visibility too since it should mimic the
|
|
502
501
|
// flyout's visibility.
|
|
503
502
|
this.workspace_.scrollbar.setContainerVisible(show);
|
|
@@ -505,25 +504,24 @@ class Flyout extends DeleteArea {
|
|
|
505
504
|
|
|
506
505
|
/**
|
|
507
506
|
* Update the view based on coordinates calculated in position().
|
|
508
|
-
* @param
|
|
509
|
-
* @param
|
|
510
|
-
* @param
|
|
511
|
-
* @param
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
this.svgGroup_
|
|
516
|
-
this.svgGroup_.setAttribute('height', height);
|
|
507
|
+
* @param width The computed width of the flyout's SVG group
|
|
508
|
+
* @param height The computed height of the flyout's SVG group.
|
|
509
|
+
* @param x The computed x origin of the flyout's SVG group.
|
|
510
|
+
* @param y The computed y origin of the flyout's SVG group.
|
|
511
|
+
*/
|
|
512
|
+
protected positionAt_(width: number, height: number, x: number, y: number) {
|
|
513
|
+
this.svgGroup_?.setAttribute('width', width.toString());
|
|
514
|
+
this.svgGroup_?.setAttribute('height', height.toString());
|
|
517
515
|
this.workspace_.setCachedParentSvgSize(width, height);
|
|
518
516
|
|
|
519
|
-
if (this.svgGroup_
|
|
517
|
+
if (this.svgGroup_?.tagName === 'svg') {
|
|
520
518
|
const transform = 'translate(' + x + 'px,' + y + 'px)';
|
|
521
519
|
dom.setCssTransform(this.svgGroup_, transform);
|
|
522
520
|
} else {
|
|
523
521
|
// IE and Edge don't support CSS transforms on SVG elements so
|
|
524
522
|
// it's important to set the transform on the SVG element itself
|
|
525
523
|
const transform = 'translate(' + x + ',' + y + ')';
|
|
526
|
-
this.svgGroup_
|
|
524
|
+
this.svgGroup_?.setAttribute('transform', transform);
|
|
527
525
|
}
|
|
528
526
|
|
|
529
527
|
// Update the scrollbar (if one exists).
|
|
@@ -554,7 +552,7 @@ class Flyout extends DeleteArea {
|
|
|
554
552
|
}
|
|
555
553
|
this.setVisible(false);
|
|
556
554
|
// Delete all the event listeners.
|
|
557
|
-
for (let i = 0, listen;
|
|
555
|
+
for (let i = 0, listen; listen = this.listeners_[i]; i++) {
|
|
558
556
|
browserEvents.unbind(listen);
|
|
559
557
|
}
|
|
560
558
|
this.listeners_.length = 0;
|
|
@@ -562,17 +560,17 @@ class Flyout extends DeleteArea {
|
|
|
562
560
|
this.workspace_.removeChangeListener(this.reflowWrapper_);
|
|
563
561
|
this.reflowWrapper_ = null;
|
|
564
562
|
}
|
|
565
|
-
// Do NOT delete the blocks here. Wait until Flyout.show.
|
|
566
|
-
// https://neil.fraser.name/news/2014/08/09/
|
|
567
563
|
}
|
|
564
|
+
// Do NOT delete the blocks here. Wait until Flyout.show.
|
|
565
|
+
// https://neil.fraser.name/news/2014/08/09/
|
|
568
566
|
|
|
569
567
|
/**
|
|
570
568
|
* Show and populate the flyout.
|
|
571
|
-
* @param
|
|
569
|
+
* @param flyoutDef Contents to display
|
|
572
570
|
* in the flyout. This is either an array of Nodes, a NodeList, a
|
|
573
571
|
* toolbox definition, or a string with the name of the dynamic category.
|
|
574
572
|
*/
|
|
575
|
-
show(flyoutDef) {
|
|
573
|
+
show(flyoutDef: toolbox.FlyoutDefinition|string) {
|
|
576
574
|
this.workspace_.setResizesEnabled(false);
|
|
577
575
|
this.hide();
|
|
578
576
|
this.clearOldBlocks_();
|
|
@@ -585,25 +583,21 @@ class Flyout extends DeleteArea {
|
|
|
585
583
|
|
|
586
584
|
// Parse the Array, Node or NodeList into a a list of flyout items.
|
|
587
585
|
const parsedContent = toolbox.convertFlyoutDefToJsonArray(flyoutDef);
|
|
588
|
-
const flyoutInfo =
|
|
589
|
-
/** @type {{contents:!Array<!Object>, gaps:!Array<number>}} */ (
|
|
590
|
-
this.createFlyoutInfo_(parsedContent));
|
|
586
|
+
const flyoutInfo = this.createFlyoutInfo_(parsedContent);
|
|
591
587
|
|
|
592
588
|
this.layout_(flyoutInfo.contents, flyoutInfo.gaps);
|
|
593
589
|
|
|
594
590
|
// IE 11 is an incompetent browser that fails to fire mouseout events.
|
|
595
591
|
// When the mouse is over the background, deselect all blocks.
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
}
|
|
603
|
-
};
|
|
592
|
+
function deselectAll(this: Flyout) {
|
|
593
|
+
const topBlocks = this.workspace_.getTopBlocks(false);
|
|
594
|
+
for (let i = 0, block; block = topBlocks[i]; i++) {
|
|
595
|
+
block.removeSelect();
|
|
596
|
+
}
|
|
597
|
+
}
|
|
604
598
|
|
|
605
599
|
this.listeners_.push(browserEvents.conditionalBind(
|
|
606
|
-
|
|
600
|
+
(this.svgBackground_ as SVGPathElement), 'mouseover', this,
|
|
607
601
|
deselectAll));
|
|
608
602
|
|
|
609
603
|
if (this.horizontalLayout) {
|
|
@@ -627,56 +621,54 @@ class Flyout extends DeleteArea {
|
|
|
627
621
|
/**
|
|
628
622
|
* Create the contents array and gaps array necessary to create the layout for
|
|
629
623
|
* the flyout.
|
|
630
|
-
* @param
|
|
624
|
+
* @param parsedContent The array
|
|
631
625
|
* of objects to show in the flyout.
|
|
632
|
-
* @return
|
|
633
|
-
* and gaps needed to lay out the flyout.
|
|
634
|
-
* @private
|
|
626
|
+
* @return The list of contents and gaps needed to lay out the flyout.
|
|
635
627
|
*/
|
|
636
|
-
createFlyoutInfo_(parsedContent)
|
|
637
|
-
|
|
638
|
-
const
|
|
628
|
+
private createFlyoutInfo_(parsedContent: toolbox.FlyoutItemInfoArray):
|
|
629
|
+
{contents: FlyoutItem[], gaps: number[]} {
|
|
630
|
+
const contents: FlyoutItem[] = [];
|
|
631
|
+
const gaps: number[] = [];
|
|
639
632
|
this.permanentlyDisabled_.length = 0;
|
|
640
633
|
const defaultGap = this.horizontalLayout ? this.GAP_X : this.GAP_Y;
|
|
641
|
-
for (let i = 0, contentInfo;
|
|
642
|
-
if (
|
|
643
|
-
const customInfo =
|
|
644
|
-
/** @type {!toolbox.DynamicCategoryInfo} */ (contentInfo);
|
|
634
|
+
for (let i = 0, contentInfo; contentInfo = parsedContent[i]; i++) {
|
|
635
|
+
if ('custom' in contentInfo) {
|
|
636
|
+
const customInfo = (contentInfo as toolbox.DynamicCategoryInfo);
|
|
645
637
|
const categoryName = customInfo['custom'];
|
|
646
638
|
const flyoutDef = this.getDynamicCategoryContents_(categoryName);
|
|
647
|
-
const parsedDynamicContent =
|
|
648
|
-
|
|
639
|
+
const parsedDynamicContent =
|
|
640
|
+
toolbox.convertFlyoutDefToJsonArray(flyoutDef);
|
|
649
641
|
// Replace the element at i with the dynamic content it represents.
|
|
650
642
|
parsedContent.splice.apply(
|
|
651
|
-
parsedContent, [i, 1]
|
|
643
|
+
parsedContent, [i, 1, ...parsedDynamicContent]);
|
|
652
644
|
contentInfo = parsedContent[i];
|
|
653
645
|
}
|
|
654
646
|
|
|
655
647
|
switch (contentInfo['kind'].toUpperCase()) {
|
|
656
648
|
case 'BLOCK': {
|
|
657
|
-
const blockInfo =
|
|
649
|
+
const blockInfo = (contentInfo as toolbox.BlockInfo);
|
|
658
650
|
const block = this.createFlyoutBlock_(blockInfo);
|
|
659
|
-
contents.push({type:
|
|
651
|
+
contents.push({type: FlyoutItemType.BLOCK, block: block});
|
|
660
652
|
this.addBlockGap_(blockInfo, gaps, defaultGap);
|
|
661
653
|
break;
|
|
662
654
|
}
|
|
663
655
|
case 'SEP': {
|
|
664
|
-
const sepInfo =
|
|
656
|
+
const sepInfo = (contentInfo as toolbox.SeparatorInfo);
|
|
665
657
|
this.addSeparatorGap_(sepInfo, gaps, defaultGap);
|
|
666
658
|
break;
|
|
667
659
|
}
|
|
668
660
|
case 'LABEL': {
|
|
669
|
-
const labelInfo =
|
|
661
|
+
const labelInfo = (contentInfo as toolbox.LabelInfo);
|
|
670
662
|
// A label is a button with different styling.
|
|
671
663
|
const label = this.createButton_(labelInfo, /** isLabel */ true);
|
|
672
|
-
contents.push({type:
|
|
664
|
+
contents.push({type: FlyoutItemType.BUTTON, button: label});
|
|
673
665
|
gaps.push(defaultGap);
|
|
674
666
|
break;
|
|
675
667
|
}
|
|
676
668
|
case 'BUTTON': {
|
|
677
|
-
const buttonInfo =
|
|
669
|
+
const buttonInfo = (contentInfo as toolbox.ButtonInfo);
|
|
678
670
|
const button = this.createButton_(buttonInfo, /** isLabel */ false);
|
|
679
|
-
contents.push({type:
|
|
671
|
+
contents.push({type: FlyoutItemType.BUTTON, button: button});
|
|
680
672
|
gaps.push(defaultGap);
|
|
681
673
|
break;
|
|
682
674
|
}
|
|
@@ -687,12 +679,12 @@ class Flyout extends DeleteArea {
|
|
|
687
679
|
|
|
688
680
|
/**
|
|
689
681
|
* Gets the flyout definition for the dynamic category.
|
|
690
|
-
* @param
|
|
691
|
-
* @return
|
|
682
|
+
* @param categoryName The name of the dynamic category.
|
|
683
|
+
* @return The definition of the
|
|
692
684
|
* flyout in one of its many forms.
|
|
693
|
-
* @private
|
|
694
685
|
*/
|
|
695
|
-
getDynamicCategoryContents_(categoryName)
|
|
686
|
+
private getDynamicCategoryContents_(categoryName: string):
|
|
687
|
+
toolbox.FlyoutDefinition {
|
|
696
688
|
// Look up the correct category generation function and call that to get a
|
|
697
689
|
// valid XML list.
|
|
698
690
|
const fnToApply =
|
|
@@ -708,50 +700,43 @@ class Flyout extends DeleteArea {
|
|
|
708
700
|
|
|
709
701
|
/**
|
|
710
702
|
* Creates a flyout button or a flyout label.
|
|
711
|
-
* @param
|
|
712
|
-
*
|
|
713
|
-
* @
|
|
714
|
-
* @return {!FlyoutButton} The object used to display the button in the
|
|
703
|
+
* @param btnInfo The object holding information about a button or a label.
|
|
704
|
+
* @param isLabel True if the button is a label, false otherwise.
|
|
705
|
+
* @return The object used to display the button in the
|
|
715
706
|
* flyout.
|
|
716
|
-
* @private
|
|
717
707
|
*/
|
|
718
|
-
createButton_(btnInfo, isLabel)
|
|
719
|
-
|
|
720
|
-
if (!FlyoutButton) {
|
|
721
|
-
throw Error('Missing require for Blockly.FlyoutButton');
|
|
722
|
-
}
|
|
708
|
+
private createButton_(btnInfo: toolbox.ButtonOrLabelInfo, isLabel: boolean):
|
|
709
|
+
FlyoutButton {
|
|
723
710
|
const curButton = new FlyoutButton(
|
|
724
|
-
this.workspace_,
|
|
725
|
-
|
|
711
|
+
this.workspace_, (this.targetWorkspace as WorkspaceSvg), btnInfo,
|
|
712
|
+
isLabel);
|
|
726
713
|
return curButton;
|
|
727
714
|
}
|
|
728
715
|
|
|
729
716
|
/**
|
|
730
717
|
* Create a block from the xml and permanently disable any blocks that were
|
|
731
718
|
* defined as disabled.
|
|
732
|
-
* @param
|
|
733
|
-
* @return
|
|
734
|
-
* @private
|
|
719
|
+
* @param blockInfo The info of the block.
|
|
720
|
+
* @return The block created from the blockInfo.
|
|
735
721
|
*/
|
|
736
|
-
createFlyoutBlock_(blockInfo) {
|
|
722
|
+
private createFlyoutBlock_(blockInfo: toolbox.BlockInfo): BlockSvg {
|
|
737
723
|
let block;
|
|
738
724
|
if (blockInfo['blockxml']) {
|
|
739
|
-
const xml = typeof blockInfo['blockxml'] === 'string' ?
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
block = this.getRecycledBlock_(xml.getAttribute('type'));
|
|
725
|
+
const xml = (typeof blockInfo['blockxml'] === 'string' ?
|
|
726
|
+
Xml.textToDom(blockInfo['blockxml']) :
|
|
727
|
+
blockInfo['blockxml']) as Element;
|
|
728
|
+
block = this.getRecycledBlock_(xml.getAttribute('type')!);
|
|
743
729
|
if (!block) {
|
|
744
730
|
block = Xml.domToBlock(xml, this.workspace_);
|
|
745
731
|
}
|
|
746
732
|
} else {
|
|
747
|
-
block = this.getRecycledBlock_(blockInfo['type']);
|
|
733
|
+
block = this.getRecycledBlock_(blockInfo['type']!);
|
|
748
734
|
if (!block) {
|
|
749
735
|
if (blockInfo['enabled'] === undefined) {
|
|
750
736
|
blockInfo['enabled'] = blockInfo['disabled'] !== 'true' &&
|
|
751
737
|
blockInfo['disabled'] !== true;
|
|
752
738
|
}
|
|
753
|
-
block = blocks.append(
|
|
754
|
-
/** @type {blocks.State} */ (blockInfo), this.workspace_);
|
|
739
|
+
block = blocks.append((blockInfo as blocks.State), this.workspace_);
|
|
755
740
|
}
|
|
756
741
|
}
|
|
757
742
|
|
|
@@ -760,18 +745,17 @@ class Flyout extends DeleteArea {
|
|
|
760
745
|
// Do not enable these blocks as a result of capacity filtering.
|
|
761
746
|
this.permanentlyDisabled_.push(block);
|
|
762
747
|
}
|
|
763
|
-
return
|
|
748
|
+
return (block as BlockSvg);
|
|
764
749
|
}
|
|
765
750
|
|
|
766
751
|
/**
|
|
767
752
|
* Returns a block from the array of recycled blocks with the given type, or
|
|
768
753
|
* undefined if one cannot be found.
|
|
769
|
-
* @param
|
|
770
|
-
* @return
|
|
754
|
+
* @param blockType The type of the block to try to recycle.
|
|
755
|
+
* @return The recycled block, or undefined if
|
|
771
756
|
* one could not be recycled.
|
|
772
|
-
* @private
|
|
773
757
|
*/
|
|
774
|
-
getRecycledBlock_(blockType) {
|
|
758
|
+
private getRecycledBlock_(blockType: string): BlockSvg|undefined {
|
|
775
759
|
let index = -1;
|
|
776
760
|
for (let i = 0; i < this.recycledBlocks_.length; i++) {
|
|
777
761
|
if (this.recycledBlocks_[i].type === blockType) {
|
|
@@ -784,40 +768,40 @@ class Flyout extends DeleteArea {
|
|
|
784
768
|
|
|
785
769
|
/**
|
|
786
770
|
* Adds a gap in the flyout based on block info.
|
|
787
|
-
* @param
|
|
788
|
-
* @param
|
|
789
|
-
* @param
|
|
771
|
+
* @param blockInfo Information about a block.
|
|
772
|
+
* @param gaps The list of gaps between items in the flyout.
|
|
773
|
+
* @param defaultGap The default gap between one element and the
|
|
790
774
|
* next.
|
|
791
|
-
* @private
|
|
792
775
|
*/
|
|
793
|
-
addBlockGap_(
|
|
776
|
+
private addBlockGap_(
|
|
777
|
+
blockInfo: toolbox.BlockInfo, gaps: number[], defaultGap: number) {
|
|
794
778
|
let gap;
|
|
795
779
|
if (blockInfo['gap']) {
|
|
796
|
-
gap = parseInt(blockInfo['gap'], 10);
|
|
780
|
+
gap = parseInt(blockInfo['gap'].toString(), 10);
|
|
797
781
|
} else if (blockInfo['blockxml']) {
|
|
798
|
-
const xml = typeof blockInfo['blockxml'] === 'string' ?
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
gap = parseInt(xml.getAttribute('gap')
|
|
782
|
+
const xml = (typeof blockInfo['blockxml'] === 'string' ?
|
|
783
|
+
Xml.textToDom(blockInfo['blockxml']) :
|
|
784
|
+
blockInfo['blockxml']) as Element;
|
|
785
|
+
gap = parseInt(xml.getAttribute('gap')!, 10);
|
|
802
786
|
}
|
|
803
|
-
gaps.push(isNaN(gap) ? defaultGap : gap);
|
|
787
|
+
gaps.push(!gap || isNaN(gap) ? defaultGap : gap);
|
|
804
788
|
}
|
|
805
789
|
|
|
806
790
|
/**
|
|
807
791
|
* Add the necessary gap in the flyout for a separator.
|
|
808
|
-
* @param
|
|
792
|
+
* @param sepInfo The object holding
|
|
809
793
|
* information about a separator.
|
|
810
|
-
* @param
|
|
811
|
-
* @param
|
|
794
|
+
* @param gaps The list gaps between items in the flyout.
|
|
795
|
+
* @param defaultGap The default gap between the button and next
|
|
812
796
|
* element.
|
|
813
|
-
* @private
|
|
814
797
|
*/
|
|
815
|
-
addSeparatorGap_(
|
|
798
|
+
private addSeparatorGap_(
|
|
799
|
+
sepInfo: toolbox.SeparatorInfo, gaps: number[], defaultGap: number) {
|
|
816
800
|
// Change the gap between two toolbox elements.
|
|
817
801
|
// <sep gap="36"></sep>
|
|
818
802
|
// The default gap is 24, can be set larger or smaller.
|
|
819
803
|
// This overwrites the gap attribute on the previous element.
|
|
820
|
-
const newGap = parseInt(sepInfo['gap'], 10);
|
|
804
|
+
const newGap = parseInt(sepInfo['gap']!.toString(), 10);
|
|
821
805
|
// Ignore gaps before the first block.
|
|
822
806
|
if (!isNaN(newGap) && gaps.length > 0) {
|
|
823
807
|
gaps[gaps.length - 1] = newGap;
|
|
@@ -828,12 +812,11 @@ class Flyout extends DeleteArea {
|
|
|
828
812
|
|
|
829
813
|
/**
|
|
830
814
|
* Delete blocks, mats and buttons from a previous showing of the flyout.
|
|
831
|
-
* @private
|
|
832
815
|
*/
|
|
833
|
-
clearOldBlocks_() {
|
|
816
|
+
private clearOldBlocks_() {
|
|
834
817
|
// Delete any blocks from a previous showing.
|
|
835
818
|
const oldBlocks = this.workspace_.getTopBlocks(false);
|
|
836
|
-
for (let i = 0, block;
|
|
819
|
+
for (let i = 0, block; block = oldBlocks[i]; i++) {
|
|
837
820
|
if (this.blockIsRecyclable_(block)) {
|
|
838
821
|
this.recycleBlock_(block);
|
|
839
822
|
} else {
|
|
@@ -850,20 +833,19 @@ class Flyout extends DeleteArea {
|
|
|
850
833
|
}
|
|
851
834
|
this.mats_.length = 0;
|
|
852
835
|
// Delete any buttons from a previous showing.
|
|
853
|
-
for (let i = 0, button;
|
|
836
|
+
for (let i = 0, button; button = this.buttons_[i]; i++) {
|
|
854
837
|
button.dispose();
|
|
855
838
|
}
|
|
856
839
|
this.buttons_.length = 0;
|
|
857
840
|
|
|
858
841
|
// Clear potential variables from the previous showing.
|
|
859
|
-
this.workspace_.getPotentialVariableMap()
|
|
842
|
+
this.workspace_.getPotentialVariableMap()?.clear();
|
|
860
843
|
}
|
|
861
844
|
|
|
862
845
|
/**
|
|
863
846
|
* Empties all of the recycled blocks, properly disposing of them.
|
|
864
|
-
* @private
|
|
865
847
|
*/
|
|
866
|
-
emptyRecycledBlocks_() {
|
|
848
|
+
private emptyRecycledBlocks_() {
|
|
867
849
|
for (let i = 0; i < this.recycledBlocks_.length; i++) {
|
|
868
850
|
this.recycledBlocks_[i].dispose();
|
|
869
851
|
}
|
|
@@ -872,11 +854,10 @@ class Flyout extends DeleteArea {
|
|
|
872
854
|
|
|
873
855
|
/**
|
|
874
856
|
* Returns whether the given block can be recycled or not.
|
|
875
|
-
* @param
|
|
876
|
-
* @return
|
|
877
|
-
* @protected
|
|
857
|
+
* @param _block The block to check for recyclability.
|
|
858
|
+
* @return True if the block can be recycled. False otherwise.
|
|
878
859
|
*/
|
|
879
|
-
blockIsRecyclable_(_block) {
|
|
860
|
+
protected blockIsRecyclable_(_block: BlockSvg): boolean {
|
|
880
861
|
// By default, recycling is disabled.
|
|
881
862
|
return false;
|
|
882
863
|
}
|
|
@@ -885,10 +866,9 @@ class Flyout extends DeleteArea {
|
|
|
885
866
|
* Puts a previously created block into the recycle bin and moves it to the
|
|
886
867
|
* top of the workspace. Used during large workspace swaps to limit the number
|
|
887
868
|
* of new DOM elements we need to create.
|
|
888
|
-
* @param
|
|
889
|
-
* @private
|
|
869
|
+
* @param block The block to recycle.
|
|
890
870
|
*/
|
|
891
|
-
recycleBlock_(block) {
|
|
871
|
+
private recycleBlock_(block: BlockSvg) {
|
|
892
872
|
const xy = block.getRelativeToSurfaceXY();
|
|
893
873
|
block.moveBy(-xy.x, -xy.y);
|
|
894
874
|
this.recycledBlocks_.push(block);
|
|
@@ -896,13 +876,13 @@ class Flyout extends DeleteArea {
|
|
|
896
876
|
|
|
897
877
|
/**
|
|
898
878
|
* Add listeners to a block that has been added to the flyout.
|
|
899
|
-
* @param
|
|
900
|
-
* @param
|
|
901
|
-
* @param
|
|
879
|
+
* @param root The root node of the SVG group the block is in.
|
|
880
|
+
* @param block The block to add listeners for.
|
|
881
|
+
* @param rect The invisible rectangle under the block that acts
|
|
902
882
|
* as a mat for that block.
|
|
903
|
-
* @protected
|
|
904
883
|
*/
|
|
905
|
-
addBlockListeners_(
|
|
884
|
+
protected addBlockListeners_(
|
|
885
|
+
root: SVGElement, block: BlockSvg, rect: SVGElement) {
|
|
906
886
|
this.listeners_.push(browserEvents.conditionalBind(
|
|
907
887
|
root, 'mousedown', null, this.blockMouseDown_(block)));
|
|
908
888
|
this.listeners_.push(browserEvents.conditionalBind(
|
|
@@ -919,13 +899,12 @@ class Flyout extends DeleteArea {
|
|
|
919
899
|
|
|
920
900
|
/**
|
|
921
901
|
* Handle a mouse-down on an SVG block in a non-closing flyout.
|
|
922
|
-
* @param
|
|
923
|
-
* @return
|
|
924
|
-
* @private
|
|
902
|
+
* @param block The flyout block to copy.
|
|
903
|
+
* @return Function to call when block is clicked.
|
|
925
904
|
*/
|
|
926
|
-
blockMouseDown_(block) {
|
|
905
|
+
private blockMouseDown_(block: BlockSvg): Function {
|
|
927
906
|
const flyout = this;
|
|
928
|
-
return
|
|
907
|
+
return (e: MouseEvent) => {
|
|
929
908
|
const gesture = flyout.targetWorkspace.getGesture(e);
|
|
930
909
|
if (gesture) {
|
|
931
910
|
gesture.setStartBlock(block);
|
|
@@ -936,10 +915,9 @@ class Flyout extends DeleteArea {
|
|
|
936
915
|
|
|
937
916
|
/**
|
|
938
917
|
* Mouse down on the flyout background. Start a vertical scroll drag.
|
|
939
|
-
* @param
|
|
940
|
-
* @private
|
|
918
|
+
* @param e Mouse down event.
|
|
941
919
|
*/
|
|
942
|
-
onMouseDown_(e) {
|
|
920
|
+
private onMouseDown_(e: MouseEvent) {
|
|
943
921
|
const gesture = this.targetWorkspace.getGesture(e);
|
|
944
922
|
if (gesture) {
|
|
945
923
|
gesture.handleFlyoutStart(e, this);
|
|
@@ -949,23 +927,23 @@ class Flyout extends DeleteArea {
|
|
|
949
927
|
/**
|
|
950
928
|
* Does this flyout allow you to create a new instance of the given block?
|
|
951
929
|
* Used for deciding if a block can be "dragged out of" the flyout.
|
|
952
|
-
* @param
|
|
953
|
-
* @return
|
|
930
|
+
* @param block The block to copy from the flyout.
|
|
931
|
+
* @return True if you can create a new instance of the block, false
|
|
954
932
|
* otherwise.
|
|
955
|
-
* @
|
|
933
|
+
* @internal
|
|
956
934
|
*/
|
|
957
|
-
|
|
935
|
+
isBlockCreatable(block: BlockSvg): boolean {
|
|
958
936
|
return block.isEnabled();
|
|
959
937
|
}
|
|
960
938
|
|
|
961
939
|
/**
|
|
962
940
|
* Create a copy of this block on the workspace.
|
|
963
|
-
* @param
|
|
964
|
-
* @return
|
|
941
|
+
* @param originalBlock The block to copy from the flyout.
|
|
942
|
+
* @return The newly created block.
|
|
965
943
|
* @throws {Error} if something went wrong with deserialization.
|
|
966
|
-
* @
|
|
944
|
+
* @internal
|
|
967
945
|
*/
|
|
968
|
-
createBlock(originalBlock) {
|
|
946
|
+
createBlock(originalBlock: BlockSvg): BlockSvg {
|
|
969
947
|
let newBlock = null;
|
|
970
948
|
eventUtils.disable();
|
|
971
949
|
const variablesBeforeCreation = this.targetWorkspace.getAllVariables();
|
|
@@ -987,13 +965,13 @@ class Flyout extends DeleteArea {
|
|
|
987
965
|
// Fire a VarCreate event for each (if any) new variable created.
|
|
988
966
|
for (let i = 0; i < newVariables.length; i++) {
|
|
989
967
|
const thisVariable = newVariables[i];
|
|
990
|
-
eventUtils.fire(
|
|
991
|
-
|
|
968
|
+
eventUtils.fire(new (eventUtils.get(eventUtils.VAR_CREATE))!
|
|
969
|
+
(thisVariable));
|
|
992
970
|
}
|
|
993
971
|
|
|
994
972
|
// Block events come after var events, in case they refer to newly created
|
|
995
973
|
// variables.
|
|
996
|
-
eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))(newBlock));
|
|
974
|
+
eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))!(newBlock));
|
|
997
975
|
}
|
|
998
976
|
if (this.autoClose) {
|
|
999
977
|
this.hide();
|
|
@@ -1006,12 +984,11 @@ class Flyout extends DeleteArea {
|
|
|
1006
984
|
/**
|
|
1007
985
|
* Initialize the given button: move it to the correct location,
|
|
1008
986
|
* add listeners, etc.
|
|
1009
|
-
* @param
|
|
1010
|
-
* @param
|
|
1011
|
-
* @param
|
|
1012
|
-
* @protected
|
|
987
|
+
* @param button The button to initialize and place.
|
|
988
|
+
* @param x The x position of the cursor during this layout pass.
|
|
989
|
+
* @param y The y position of the cursor during this layout pass.
|
|
1013
990
|
*/
|
|
1014
|
-
initFlyoutButton_(button, x, y) {
|
|
991
|
+
protected initFlyoutButton_(button: FlyoutButton, x: number, y: number) {
|
|
1015
992
|
const buttonSvg = button.createDom();
|
|
1016
993
|
button.moveTo(x, y);
|
|
1017
994
|
button.show();
|
|
@@ -1025,30 +1002,29 @@ class Flyout extends DeleteArea {
|
|
|
1025
1002
|
|
|
1026
1003
|
/**
|
|
1027
1004
|
* Create and place a rectangle corresponding to the given block.
|
|
1028
|
-
* @param
|
|
1029
|
-
* @param
|
|
1030
|
-
* @param
|
|
1031
|
-
* @param
|
|
1005
|
+
* @param block The block to associate the rect to.
|
|
1006
|
+
* @param x The x position of the cursor during this layout pass.
|
|
1007
|
+
* @param y The y position of the cursor during this layout pass.
|
|
1008
|
+
* @param blockHW The height and width of
|
|
1032
1009
|
* the block.
|
|
1033
|
-
* @param
|
|
1010
|
+
* @param index The index into the mats list where this rect should
|
|
1034
1011
|
* be placed.
|
|
1035
|
-
* @return
|
|
1012
|
+
* @return Newly created SVG element for the rectangle behind
|
|
1036
1013
|
* the block.
|
|
1037
|
-
* @protected
|
|
1038
1014
|
*/
|
|
1039
|
-
createRect_(
|
|
1015
|
+
protected createRect_(
|
|
1016
|
+
block: BlockSvg, x: number, y: number,
|
|
1017
|
+
blockHW: {height: number, width: number}, index: number): SVGElement {
|
|
1040
1018
|
// Create an invisible rectangle under the block to act as a button. Just
|
|
1041
1019
|
// using the block as a button is poor, since blocks have holes in them.
|
|
1042
|
-
const rect = dom.createSvgElement(
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
null);
|
|
1051
|
-
rect.tooltip = block;
|
|
1020
|
+
const rect = dom.createSvgElement(Svg.RECT, {
|
|
1021
|
+
'fill-opacity': 0,
|
|
1022
|
+
'x': x,
|
|
1023
|
+
'y': y,
|
|
1024
|
+
'height': blockHW.height,
|
|
1025
|
+
'width': blockHW.width,
|
|
1026
|
+
});
|
|
1027
|
+
(rect as AnyDuringMigration).tooltip = block;
|
|
1052
1028
|
Tooltip.bindMouseEvents(rect);
|
|
1053
1029
|
// Add the rectangles under the blocks, so that the blocks' tooltips work.
|
|
1054
1030
|
this.workspace_.getCanvas().insertBefore(rect, block.getSvgRoot());
|
|
@@ -1061,18 +1037,18 @@ class Flyout extends DeleteArea {
|
|
|
1061
1037
|
/**
|
|
1062
1038
|
* Move a rectangle to sit exactly behind a block, taking into account tabs,
|
|
1063
1039
|
* hats, and any other protrusions we invent.
|
|
1064
|
-
* @param
|
|
1065
|
-
* @param
|
|
1066
|
-
* @protected
|
|
1040
|
+
* @param rect The rectangle to move directly behind the block.
|
|
1041
|
+
* @param block The block the rectangle should be behind.
|
|
1067
1042
|
*/
|
|
1068
|
-
moveRectToBlock_(rect, block) {
|
|
1043
|
+
protected moveRectToBlock_(rect: SVGElement, block: BlockSvg) {
|
|
1069
1044
|
const blockHW = block.getHeightWidth();
|
|
1070
|
-
rect.setAttribute('width', blockHW.width);
|
|
1071
|
-
rect.setAttribute('height', blockHW.height);
|
|
1045
|
+
rect.setAttribute('width', blockHW.width.toString());
|
|
1046
|
+
rect.setAttribute('height', blockHW.height.toString());
|
|
1072
1047
|
|
|
1073
1048
|
const blockXY = block.getRelativeToSurfaceXY();
|
|
1074
|
-
rect.setAttribute('y', blockXY.y);
|
|
1075
|
-
rect.setAttribute(
|
|
1049
|
+
rect.setAttribute('y', blockXY.y.toString());
|
|
1050
|
+
rect.setAttribute(
|
|
1051
|
+
'x', (this.RTL ? blockXY.x - blockHW.width : blockXY.x).toString());
|
|
1076
1052
|
}
|
|
1077
1053
|
|
|
1078
1054
|
/**
|
|
@@ -1080,11 +1056,10 @@ class Flyout extends DeleteArea {
|
|
|
1080
1056
|
* capacity limit. For instance, if the user may only place two more blocks
|
|
1081
1057
|
* on the workspace, an "a + b" block that has two shadow blocks would be
|
|
1082
1058
|
* disabled.
|
|
1083
|
-
* @private
|
|
1084
1059
|
*/
|
|
1085
|
-
filterForCapacity_() {
|
|
1060
|
+
private filterForCapacity_() {
|
|
1086
1061
|
const blocks = this.workspace_.getTopBlocks(false);
|
|
1087
|
-
for (let i = 0, block;
|
|
1062
|
+
for (let i = 0, block; block = blocks[i]; i++) {
|
|
1088
1063
|
if (this.permanentlyDisabled_.indexOf(block) === -1) {
|
|
1089
1064
|
const enable = this.targetWorkspace.isCapacityAvailable(
|
|
1090
1065
|
common.getBlockTypeCounts(block));
|
|
@@ -1110,22 +1085,21 @@ class Flyout extends DeleteArea {
|
|
|
1110
1085
|
}
|
|
1111
1086
|
|
|
1112
1087
|
/**
|
|
1113
|
-
* @return
|
|
1088
|
+
* @return True if this flyout may be scrolled with a scrollbar or
|
|
1114
1089
|
* by dragging.
|
|
1115
|
-
* @
|
|
1090
|
+
* @internal
|
|
1116
1091
|
*/
|
|
1117
|
-
isScrollable() {
|
|
1092
|
+
isScrollable(): boolean {
|
|
1118
1093
|
return this.workspace_.scrollbar ? this.workspace_.scrollbar.isVisible() :
|
|
1119
1094
|
false;
|
|
1120
1095
|
}
|
|
1121
1096
|
|
|
1122
1097
|
/**
|
|
1123
1098
|
* Copy a block from the flyout to the workspace and position it correctly.
|
|
1124
|
-
* @param
|
|
1125
|
-
* @return
|
|
1126
|
-
* @private
|
|
1099
|
+
* @param oldBlock The flyout block to copy.
|
|
1100
|
+
* @return The new block in the main workspace.
|
|
1127
1101
|
*/
|
|
1128
|
-
placeNewBlock_(oldBlock) {
|
|
1102
|
+
private placeNewBlock_(oldBlock: BlockSvg): BlockSvg {
|
|
1129
1103
|
const targetWorkspace = this.targetWorkspace;
|
|
1130
1104
|
const svgRootOld = oldBlock.getSvgRoot();
|
|
1131
1105
|
if (!svgRootOld) {
|
|
@@ -1133,11 +1107,10 @@ class Flyout extends DeleteArea {
|
|
|
1133
1107
|
}
|
|
1134
1108
|
|
|
1135
1109
|
// Clone the block.
|
|
1136
|
-
const json =
|
|
1110
|
+
const json = (blocks.save(oldBlock) as blocks.State);
|
|
1137
1111
|
// Normallly this resizes leading to weird jumps. Save it for terminateDrag.
|
|
1138
1112
|
targetWorkspace.setResizesEnabled(false);
|
|
1139
|
-
const block =
|
|
1140
|
-
/** @type {!BlockSvg} */ (blocks.append(json, targetWorkspace));
|
|
1113
|
+
const block = (blocks.append(json, targetWorkspace) as BlockSvg);
|
|
1141
1114
|
|
|
1142
1115
|
this.positionNewBlock_(oldBlock, block);
|
|
1143
1116
|
|
|
@@ -1146,11 +1119,10 @@ class Flyout extends DeleteArea {
|
|
|
1146
1119
|
|
|
1147
1120
|
/**
|
|
1148
1121
|
* Positions a block on the target workspace.
|
|
1149
|
-
* @param
|
|
1150
|
-
* @param
|
|
1151
|
-
* @private
|
|
1122
|
+
* @param oldBlock The flyout block being copied.
|
|
1123
|
+
* @param block The block to posiiton.
|
|
1152
1124
|
*/
|
|
1153
|
-
positionNewBlock_(oldBlock, block) {
|
|
1125
|
+
private positionNewBlock_(oldBlock: BlockSvg, block: BlockSvg) {
|
|
1154
1126
|
const targetWorkspace = this.targetWorkspace;
|
|
1155
1127
|
|
|
1156
1128
|
// The offset in pixels between the main workspace's origin and the upper
|
|
@@ -1184,71 +1156,10 @@ class Flyout extends DeleteArea {
|
|
|
1184
1156
|
}
|
|
1185
1157
|
|
|
1186
1158
|
/**
|
|
1187
|
-
*
|
|
1188
|
-
* relative to viewport.
|
|
1189
|
-
* @return {Rect} The component's bounding box.
|
|
1190
|
-
*/
|
|
1191
|
-
Flyout.prototype.getClientRect;
|
|
1192
|
-
|
|
1193
|
-
/**
|
|
1194
|
-
* Position the flyout.
|
|
1195
|
-
* @return {void}
|
|
1159
|
+
* A flyout content item.
|
|
1196
1160
|
*/
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
* determine if a new block should be created or if the flyout should scroll.
|
|
1203
|
-
* @param {!Coordinate} currentDragDeltaXY How far the pointer has
|
|
1204
|
-
* moved from the position at mouse down, in pixel units.
|
|
1205
|
-
* @return {boolean} True if the drag is toward the workspace.
|
|
1206
|
-
* @package
|
|
1207
|
-
*/
|
|
1208
|
-
Flyout.prototype.isDragTowardWorkspace;
|
|
1209
|
-
|
|
1210
|
-
/**
|
|
1211
|
-
* Sets the translation of the flyout to match the scrollbars.
|
|
1212
|
-
* @param {!{x:number,y:number}} xyRatio Contains a y property which is a float
|
|
1213
|
-
* between 0 and 1 specifying the degree of scrolling and a
|
|
1214
|
-
* similar x property.
|
|
1215
|
-
* @protected
|
|
1216
|
-
*/
|
|
1217
|
-
Flyout.prototype.setMetrics_;
|
|
1218
|
-
|
|
1219
|
-
/**
|
|
1220
|
-
* Lay out the blocks in the flyout.
|
|
1221
|
-
* @param {!Array<!Object>} contents The blocks and buttons to lay out.
|
|
1222
|
-
* @param {!Array<number>} gaps The visible gaps between blocks.
|
|
1223
|
-
* @protected
|
|
1224
|
-
*/
|
|
1225
|
-
Flyout.prototype.layout_;
|
|
1226
|
-
|
|
1227
|
-
/**
|
|
1228
|
-
* Scroll the flyout.
|
|
1229
|
-
* @param {!Event} e Mouse wheel scroll event.
|
|
1230
|
-
* @protected
|
|
1231
|
-
*/
|
|
1232
|
-
Flyout.prototype.wheel_;
|
|
1233
|
-
|
|
1234
|
-
/**
|
|
1235
|
-
* Compute height of flyout. Position mat under each block.
|
|
1236
|
-
* For RTL: Lay out the blocks right-aligned.
|
|
1237
|
-
* @return {void}
|
|
1238
|
-
* @protected
|
|
1239
|
-
*/
|
|
1240
|
-
Flyout.prototype.reflowInternal_;
|
|
1241
|
-
|
|
1242
|
-
/**
|
|
1243
|
-
* Calculates the x coordinate for the flyout position.
|
|
1244
|
-
* @return {number} X coordinate.
|
|
1245
|
-
*/
|
|
1246
|
-
Flyout.prototype.getX;
|
|
1247
|
-
|
|
1248
|
-
/**
|
|
1249
|
-
* Calculates the y coordinate for the flyout position.
|
|
1250
|
-
* @return {number} Y coordinate.
|
|
1251
|
-
*/
|
|
1252
|
-
Flyout.prototype.getY;
|
|
1253
|
-
|
|
1254
|
-
exports.Flyout = Flyout;
|
|
1161
|
+
export interface FlyoutItem {
|
|
1162
|
+
type: FlyoutItemType;
|
|
1163
|
+
button?: FlyoutButton|undefined;
|
|
1164
|
+
block?: BlockSvg|undefined;
|
|
1165
|
+
}
|