scratch-blocks 1.1.206 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.husky/commit-msg +0 -3
- package/CHANGELOG.md +111 -833
- package/TODO.md +16 -0
- package/blockly-rc/.eslintignore +28 -0
- package/blockly-rc/.eslintrc.js +187 -0
- package/blockly-rc/.gitattributes +1 -0
- package/blockly-rc/.github/CODEOWNERS +1 -0
- package/blockly-rc/.github/CONTRIBUTING.md +46 -0
- package/blockly-rc/.github/ISSUE_TEMPLATE/bug_report.yaml +58 -0
- package/blockly-rc/.github/ISSUE_TEMPLATE/config.yml +7 -0
- package/blockly-rc/.github/ISSUE_TEMPLATE/documentation.yaml +38 -0
- package/blockly-rc/.github/ISSUE_TEMPLATE/feature_request.yaml +39 -0
- package/blockly-rc/.github/PULL_REQUEST_TEMPLATE.md +42 -0
- package/blockly-rc/.github/dependabot.yml +27 -0
- package/blockly-rc/.github/release.yml +32 -0
- package/blockly-rc/.github/workflows/appengine_deploy.yml +54 -0
- package/blockly-rc/.github/workflows/assign_reviewers.yml +41 -0
- package/blockly-rc/.github/workflows/browser_test.yml +55 -0
- package/blockly-rc/.github/workflows/build.yml +86 -0
- package/blockly-rc/.github/workflows/conventional-label.yml +17 -0
- package/blockly-rc/.github/workflows/develop_freeze.yml +26 -0
- package/blockly-rc/.github/workflows/tag_module_cleanup.yml +37 -0
- package/blockly-rc/.github/workflows/welcome_new_contributors.yml +36 -0
- package/blockly-rc/.prettierignore +30 -0
- package/blockly-rc/.prettierrc.js +13 -0
- package/blockly-rc/CHANGELOG.md +77 -0
- package/blockly-rc/LICENSE +202 -0
- package/blockly-rc/README.md +80 -0
- package/blockly-rc/_config.yml +1 -0
- package/blockly-rc/api-extractor.json +385 -0
- package/blockly-rc/appengine/.gcloudignore +20 -0
- package/blockly-rc/appengine/README.txt +42 -0
- package/blockly-rc/appengine/add_timestamps.py +69 -0
- package/blockly-rc/appengine/app.yaml +104 -0
- package/blockly-rc/appengine/apple-touch-icon.png +0 -0
- package/blockly-rc/appengine/blockly_compressed.js +11 -0
- package/blockly-rc/appengine/expiration.py +52 -0
- package/blockly-rc/appengine/favicon.ico +0 -0
- package/blockly-rc/appengine/index.yaml +11 -0
- package/blockly-rc/appengine/main.py +39 -0
- package/blockly-rc/appengine/redirect.html +107 -0
- package/blockly-rc/appengine/requirements.txt +1 -0
- package/blockly-rc/appengine/robots.txt +2 -0
- package/blockly-rc/appengine/storage.js +190 -0
- package/blockly-rc/appengine/storage.py +125 -0
- package/blockly-rc/blocks/blocks.ts +44 -0
- package/blockly-rc/blocks/lists.ts +1085 -0
- package/blockly-rc/blocks/logic.ts +712 -0
- package/blockly-rc/blocks/loops.ts +408 -0
- package/blockly-rc/blocks/math.ts +591 -0
- package/blockly-rc/blocks/procedures.ts +1364 -0
- package/blockly-rc/blocks/text.ts +1007 -0
- package/blockly-rc/blocks/variables.ts +183 -0
- package/blockly-rc/blocks/variables_dynamic.ts +194 -0
- package/blockly-rc/core/any_aliases.ts +8 -0
- package/blockly-rc/core/block.ts +2523 -0
- package/blockly-rc/core/block_animations.ts +225 -0
- package/blockly-rc/core/block_flyout_inflater.ts +262 -0
- package/blockly-rc/core/block_svg.ts +1768 -0
- package/blockly-rc/core/blockly.ts +605 -0
- package/blockly-rc/core/blockly_options.ts +71 -0
- package/blockly-rc/core/blocks.ts +18 -0
- package/blockly-rc/core/browser_events.ts +244 -0
- package/blockly-rc/core/bubbles/bubble.ts +658 -0
- package/blockly-rc/core/bubbles/mini_workspace_bubble.ts +280 -0
- package/blockly-rc/core/bubbles/text_bubble.ts +103 -0
- package/blockly-rc/core/bubbles/textinput_bubble.ts +344 -0
- package/blockly-rc/core/bubbles.ts +12 -0
- package/blockly-rc/core/bump_objects.ts +192 -0
- package/blockly-rc/core/button_flyout_inflater.ts +63 -0
- package/blockly-rc/core/clipboard/block_paster.ts +142 -0
- package/blockly-rc/core/clipboard/registry.ts +31 -0
- package/blockly-rc/core/clipboard/workspace_comment_paster.ts +94 -0
- package/blockly-rc/core/clipboard.ts +113 -0
- package/blockly-rc/core/comments/comment_view.ts +899 -0
- package/blockly-rc/core/comments/rendered_workspace_comment.ts +297 -0
- package/blockly-rc/core/comments/workspace_comment.ts +237 -0
- package/blockly-rc/core/comments.ts +9 -0
- package/blockly-rc/core/common.ts +305 -0
- package/blockly-rc/core/component_manager.ts +235 -0
- package/blockly-rc/core/config.ts +65 -0
- package/blockly-rc/core/connection.ts +793 -0
- package/blockly-rc/core/connection_checker.ts +348 -0
- package/blockly-rc/core/connection_db.ts +297 -0
- package/blockly-rc/core/connection_type.ts +21 -0
- package/blockly-rc/core/constants.ts +23 -0
- package/blockly-rc/core/contextmenu.ts +268 -0
- package/blockly-rc/core/contextmenu_items.ts +700 -0
- package/blockly-rc/core/contextmenu_registry.ts +194 -0
- package/blockly-rc/core/css.ts +481 -0
- package/blockly-rc/core/delete_area.ts +77 -0
- package/blockly-rc/core/dialog.ts +121 -0
- package/blockly-rc/core/drag_target.ts +97 -0
- package/blockly-rc/core/dragging/block_drag_strategy.ts +454 -0
- package/blockly-rc/core/dragging/bubble_drag_strategy.ts +52 -0
- package/blockly-rc/core/dragging/comment_drag_strategy.ts +91 -0
- package/blockly-rc/core/dragging/dragger.ts +163 -0
- package/blockly-rc/core/dragging.ts +12 -0
- package/blockly-rc/core/dropdowndiv.ts +768 -0
- package/blockly-rc/core/events/events.ts +163 -0
- package/blockly-rc/core/events/events_abstract.ts +130 -0
- package/blockly-rc/core/events/events_block_base.ts +88 -0
- package/blockly-rc/core/events/events_block_change.ts +259 -0
- package/blockly-rc/core/events/events_block_create.ts +185 -0
- package/blockly-rc/core/events/events_block_delete.ts +182 -0
- package/blockly-rc/core/events/events_block_drag.ts +116 -0
- package/blockly-rc/core/events/events_block_field_intermediate_change.ts +167 -0
- package/blockly-rc/core/events/events_block_move.ts +307 -0
- package/blockly-rc/core/events/events_bubble_open.ts +120 -0
- package/blockly-rc/core/events/events_click.ts +110 -0
- package/blockly-rc/core/events/events_comment_base.ts +126 -0
- package/blockly-rc/core/events/events_comment_change.ts +161 -0
- package/blockly-rc/core/events/events_comment_collapse.ts +103 -0
- package/blockly-rc/core/events/events_comment_create.ts +118 -0
- package/blockly-rc/core/events/events_comment_delete.ts +117 -0
- package/blockly-rc/core/events/events_comment_drag.ts +99 -0
- package/blockly-rc/core/events/events_comment_move.ts +207 -0
- package/blockly-rc/core/events/events_comment_resize.ts +174 -0
- package/blockly-rc/core/events/events_marker_move.ts +134 -0
- package/blockly-rc/core/events/events_selected.ts +98 -0
- package/blockly-rc/core/events/events_theme_change.ts +84 -0
- package/blockly-rc/core/events/events_toolbox_item_select.ts +96 -0
- package/blockly-rc/core/events/events_trashcan_open.ts +88 -0
- package/blockly-rc/core/events/events_ui_base.ts +47 -0
- package/blockly-rc/core/events/events_var_base.ts +89 -0
- package/blockly-rc/core/events/events_var_create.ts +129 -0
- package/blockly-rc/core/events/events_var_delete.ts +124 -0
- package/blockly-rc/core/events/events_var_rename.ts +133 -0
- package/blockly-rc/core/events/events_var_type_change.ts +122 -0
- package/blockly-rc/core/events/events_viewport.ts +149 -0
- package/blockly-rc/core/events/utils.ts +595 -0
- package/blockly-rc/core/events/workspace_events.ts +46 -0
- package/blockly-rc/core/extensions.ts +491 -0
- package/blockly-rc/core/field.ts +1471 -0
- package/blockly-rc/core/field_checkbox.ts +271 -0
- package/blockly-rc/core/field_dropdown.ts +857 -0
- package/blockly-rc/core/field_image.ts +297 -0
- package/blockly-rc/core/field_input.ts +755 -0
- package/blockly-rc/core/field_label.ts +150 -0
- package/blockly-rc/core/field_label_serializable.ts +73 -0
- package/blockly-rc/core/field_number.ts +381 -0
- package/blockly-rc/core/field_registry.ts +115 -0
- package/blockly-rc/core/field_textinput.ts +117 -0
- package/blockly-rc/core/field_variable.ts +651 -0
- package/blockly-rc/core/flyout_base.ts +968 -0
- package/blockly-rc/core/flyout_button.ts +416 -0
- package/blockly-rc/core/flyout_horizontal.ts +374 -0
- package/blockly-rc/core/flyout_metrics_manager.ts +90 -0
- package/blockly-rc/core/flyout_separator.ts +61 -0
- package/blockly-rc/core/flyout_vertical.ts +353 -0
- package/blockly-rc/core/generator.ts +611 -0
- package/blockly-rc/core/gesture.ts +1191 -0
- package/blockly-rc/core/grid.ts +252 -0
- package/blockly-rc/core/icons/comment_icon.ts +435 -0
- package/blockly-rc/core/icons/exceptions.ts +23 -0
- package/blockly-rc/core/icons/icon.ts +147 -0
- package/blockly-rc/core/icons/icon_types.ts +32 -0
- package/blockly-rc/core/icons/mutator_icon.ts +354 -0
- package/blockly-rc/core/icons/registry.ts +33 -0
- package/blockly-rc/core/icons/warning_icon.ts +219 -0
- package/blockly-rc/core/icons.ts +24 -0
- package/blockly-rc/core/inject.ts +428 -0
- package/blockly-rc/core/inputs/align.ts +14 -0
- package/blockly-rc/core/inputs/dummy_input.ts +26 -0
- package/blockly-rc/core/inputs/end_row_input.ts +31 -0
- package/blockly-rc/core/inputs/input.ts +318 -0
- package/blockly-rc/core/inputs/input_types.ts +27 -0
- package/blockly-rc/core/inputs/statement_input.ts +34 -0
- package/blockly-rc/core/inputs/value_input.ts +30 -0
- package/blockly-rc/core/inputs.ts +23 -0
- package/blockly-rc/core/insertion_marker_manager.ts +742 -0
- package/blockly-rc/core/insertion_marker_previewer.ts +254 -0
- package/blockly-rc/core/interfaces/i_ast_node_location.ts +12 -0
- package/blockly-rc/core/interfaces/i_ast_node_location_svg.ts +28 -0
- package/blockly-rc/core/interfaces/i_ast_node_location_with_block.ts +22 -0
- package/blockly-rc/core/interfaces/i_autohideable.ts +22 -0
- package/blockly-rc/core/interfaces/i_bounded_element.ts +30 -0
- package/blockly-rc/core/interfaces/i_bubble.ts +63 -0
- package/blockly-rc/core/interfaces/i_collapsible_toolbox_item.ts +33 -0
- package/blockly-rc/core/interfaces/i_comment_icon.ts +47 -0
- package/blockly-rc/core/interfaces/i_component.ts +19 -0
- package/blockly-rc/core/interfaces/i_connection_checker.ts +100 -0
- package/blockly-rc/core/interfaces/i_connection_previewer.ts +50 -0
- package/blockly-rc/core/interfaces/i_contextmenu.ts +16 -0
- package/blockly-rc/core/interfaces/i_copyable.ts +31 -0
- package/blockly-rc/core/interfaces/i_deletable.ts +34 -0
- package/blockly-rc/core/interfaces/i_delete_area.ts +28 -0
- package/blockly-rc/core/interfaces/i_drag_target.ts +69 -0
- package/blockly-rc/core/interfaces/i_draggable.ts +72 -0
- package/blockly-rc/core/interfaces/i_dragger.ts +35 -0
- package/blockly-rc/core/interfaces/i_flyout.ts +189 -0
- package/blockly-rc/core/interfaces/i_flyout_inflater.ts +41 -0
- package/blockly-rc/core/interfaces/i_has_bubble.ts +20 -0
- package/blockly-rc/core/interfaces/i_icon.ts +114 -0
- package/blockly-rc/core/interfaces/i_keyboard_accessible.ts +21 -0
- package/blockly-rc/core/interfaces/i_legacy_procedure_blocks.ts +50 -0
- package/blockly-rc/core/interfaces/i_metrics_manager.ts +149 -0
- package/blockly-rc/core/interfaces/i_movable.ts +19 -0
- package/blockly-rc/core/interfaces/i_observable.ts +24 -0
- package/blockly-rc/core/interfaces/i_parameter_model.ts +51 -0
- package/blockly-rc/core/interfaces/i_paster.ts +25 -0
- package/blockly-rc/core/interfaces/i_positionable.ts +33 -0
- package/blockly-rc/core/interfaces/i_procedure_block.ts +27 -0
- package/blockly-rc/core/interfaces/i_procedure_map.ts +18 -0
- package/blockly-rc/core/interfaces/i_procedure_model.ts +71 -0
- package/blockly-rc/core/interfaces/i_registrable.ts +12 -0
- package/blockly-rc/core/interfaces/i_rendered_element.ts +22 -0
- package/blockly-rc/core/interfaces/i_selectable.ts +34 -0
- package/blockly-rc/core/interfaces/i_selectable_toolbox_item.ts +63 -0
- package/blockly-rc/core/interfaces/i_serializable.ts +28 -0
- package/blockly-rc/core/interfaces/i_serializer.ts +55 -0
- package/blockly-rc/core/interfaces/i_styleable.ts +26 -0
- package/blockly-rc/core/interfaces/i_toolbox.ts +112 -0
- package/blockly-rc/core/interfaces/i_toolbox_item.ts +81 -0
- package/blockly-rc/core/interfaces/i_variable_backed_parameter_model.ts +23 -0
- package/blockly-rc/core/interfaces/i_variable_map.ts +65 -0
- package/blockly-rc/core/interfaces/i_variable_model.ts +57 -0
- package/blockly-rc/core/internal_constants.ts +47 -0
- package/blockly-rc/core/keyboard_nav/ast_node.ts +884 -0
- package/blockly-rc/core/keyboard_nav/basic_cursor.ts +223 -0
- package/blockly-rc/core/keyboard_nav/cursor.ts +138 -0
- package/blockly-rc/core/keyboard_nav/marker.ts +113 -0
- package/blockly-rc/core/keyboard_nav/tab_navigate_cursor.ts +46 -0
- package/blockly-rc/core/label_flyout_inflater.ts +59 -0
- package/blockly-rc/core/layer_manager.ts +186 -0
- package/blockly-rc/core/layers.ts +17 -0
- package/blockly-rc/core/main.ts +31 -0
- package/blockly-rc/core/marker_manager.ts +189 -0
- package/blockly-rc/core/menu.ts +463 -0
- package/blockly-rc/core/menuitem.ts +221 -0
- package/blockly-rc/core/metrics_manager.ts +486 -0
- package/blockly-rc/core/msg.ts +27 -0
- package/blockly-rc/core/names.ts +275 -0
- package/blockly-rc/core/observable_procedure_map.ts +66 -0
- package/blockly-rc/core/options.ts +377 -0
- package/blockly-rc/core/positionable_helpers.ts +186 -0
- package/blockly-rc/core/procedures.ts +510 -0
- package/blockly-rc/core/registry.ts +400 -0
- package/blockly-rc/core/render_management.ts +193 -0
- package/blockly-rc/core/rendered_connection.ts +571 -0
- package/blockly-rc/core/renderers/common/block_rendering.ts +120 -0
- package/blockly-rc/core/renderers/common/constants.ts +1198 -0
- package/blockly-rc/core/renderers/common/drawer.ts +518 -0
- package/blockly-rc/core/renderers/common/i_path_object.ts +137 -0
- package/blockly-rc/core/renderers/common/info.ts +767 -0
- package/blockly-rc/core/renderers/common/marker_svg.ts +765 -0
- package/blockly-rc/core/renderers/common/path_object.ts +324 -0
- package/blockly-rc/core/renderers/common/renderer.ts +281 -0
- package/blockly-rc/core/renderers/geras/constants.ts +46 -0
- package/blockly-rc/core/renderers/geras/drawer.ts +167 -0
- package/blockly-rc/core/renderers/geras/geras.ts +31 -0
- package/blockly-rc/core/renderers/geras/highlight_constants.ts +342 -0
- package/blockly-rc/core/renderers/geras/highlighter.ts +313 -0
- package/blockly-rc/core/renderers/geras/info.ts +478 -0
- package/blockly-rc/core/renderers/geras/measurables/inline_input.ts +37 -0
- package/blockly-rc/core/renderers/geras/measurables/statement_input.ts +36 -0
- package/blockly-rc/core/renderers/geras/path_object.ts +135 -0
- package/blockly-rc/core/renderers/geras/renderer.ts +124 -0
- package/blockly-rc/core/renderers/measurables/base.ts +41 -0
- package/blockly-rc/core/renderers/measurables/bottom_row.ts +104 -0
- package/blockly-rc/core/renderers/measurables/connection.ts +43 -0
- package/blockly-rc/core/renderers/measurables/external_value_input.ts +53 -0
- package/blockly-rc/core/renderers/measurables/field.ts +50 -0
- package/blockly-rc/core/renderers/measurables/hat.ts +33 -0
- package/blockly-rc/core/renderers/measurables/icon.ts +42 -0
- package/blockly-rc/core/renderers/measurables/in_row_spacer.ts +29 -0
- package/blockly-rc/core/renderers/measurables/inline_input.ts +63 -0
- package/blockly-rc/core/renderers/measurables/input_connection.ts +57 -0
- package/blockly-rc/core/renderers/measurables/input_row.ts +67 -0
- package/blockly-rc/core/renderers/measurables/jagged_edge.ts +28 -0
- package/blockly-rc/core/renderers/measurables/next_connection.ts +34 -0
- package/blockly-rc/core/renderers/measurables/output_connection.ts +43 -0
- package/blockly-rc/core/renderers/measurables/previous_connection.ts +34 -0
- package/blockly-rc/core/renderers/measurables/round_corner.ts +34 -0
- package/blockly-rc/core/renderers/measurables/row.ts +191 -0
- package/blockly-rc/core/renderers/measurables/spacer_row.ts +44 -0
- package/blockly-rc/core/renderers/measurables/square_corner.ts +32 -0
- package/blockly-rc/core/renderers/measurables/statement_input.ts +41 -0
- package/blockly-rc/core/renderers/measurables/top_row.ts +110 -0
- package/blockly-rc/core/renderers/measurables/types.ts +319 -0
- package/blockly-rc/core/renderers/thrasos/info.ts +328 -0
- package/blockly-rc/core/renderers/thrasos/renderer.ts +40 -0
- package/blockly-rc/core/renderers/thrasos/thrasos.ts +14 -0
- package/blockly-rc/core/renderers/zelos/constants.ts +877 -0
- package/blockly-rc/core/renderers/zelos/drawer.ts +274 -0
- package/blockly-rc/core/renderers/zelos/info.ts +652 -0
- package/blockly-rc/core/renderers/zelos/marker_svg.ts +145 -0
- package/blockly-rc/core/renderers/zelos/measurables/bottom_row.ts +44 -0
- package/blockly-rc/core/renderers/zelos/measurables/inputs.ts +41 -0
- package/blockly-rc/core/renderers/zelos/measurables/row_elements.ts +29 -0
- package/blockly-rc/core/renderers/zelos/measurables/top_row.ts +50 -0
- package/blockly-rc/core/renderers/zelos/path_object.ts +209 -0
- package/blockly-rc/core/renderers/zelos/renderer.ts +143 -0
- package/blockly-rc/core/renderers/zelos/zelos.ts +33 -0
- package/blockly-rc/core/scrollbar.ts +898 -0
- package/blockly-rc/core/scrollbar_pair.ts +349 -0
- package/blockly-rc/core/separator_flyout_inflater.ts +69 -0
- package/blockly-rc/core/serialization/blocks.ts +868 -0
- package/blockly-rc/core/serialization/exceptions.ts +112 -0
- package/blockly-rc/core/serialization/priorities.ts +25 -0
- package/blockly-rc/core/serialization/procedures.ts +158 -0
- package/blockly-rc/core/serialization/registry.ts +30 -0
- package/blockly-rc/core/serialization/variables.ts +68 -0
- package/blockly-rc/core/serialization/workspace_comments.ts +143 -0
- package/blockly-rc/core/serialization/workspaces.ts +94 -0
- package/blockly-rc/core/serialization.ts +32 -0
- package/blockly-rc/core/shortcut_items.ts +338 -0
- package/blockly-rc/core/shortcut_registry.ts +368 -0
- package/blockly-rc/core/sprites.ts +15 -0
- package/blockly-rc/core/theme/classic.ts +40 -0
- package/blockly-rc/core/theme/themes.ts +12 -0
- package/blockly-rc/core/theme/zelos.ts +80 -0
- package/blockly-rc/core/theme.ts +232 -0
- package/blockly-rc/core/theme_manager.ts +192 -0
- package/blockly-rc/core/toolbox/category.ts +739 -0
- package/blockly-rc/core/toolbox/collapsible_category.ts +288 -0
- package/blockly-rc/core/toolbox/separator.ts +105 -0
- package/blockly-rc/core/toolbox/toolbox.ts +1134 -0
- package/blockly-rc/core/toolbox/toolbox_item.ts +152 -0
- package/blockly-rc/core/tooltip.ts +466 -0
- package/blockly-rc/core/touch.ts +155 -0
- package/blockly-rc/core/trashcan.ts +748 -0
- package/blockly-rc/core/utils/aria.ts +144 -0
- package/blockly-rc/core/utils/array.ts +24 -0
- package/blockly-rc/core/utils/colour.ts +265 -0
- package/blockly-rc/core/utils/coordinate.ts +129 -0
- package/blockly-rc/core/utils/deprecation.ts +47 -0
- package/blockly-rc/core/utils/dom.ts +356 -0
- package/blockly-rc/core/utils/idgenerator.ts +70 -0
- package/blockly-rc/core/utils/keycodes.ts +154 -0
- package/blockly-rc/core/utils/math.ts +50 -0
- package/blockly-rc/core/utils/metrics.ts +86 -0
- package/blockly-rc/core/utils/object.ts +28 -0
- package/blockly-rc/core/utils/parsing.ts +287 -0
- package/blockly-rc/core/utils/rect.ts +69 -0
- package/blockly-rc/core/utils/size.ts +62 -0
- package/blockly-rc/core/utils/string.ts +289 -0
- package/blockly-rc/core/utils/style.ts +219 -0
- package/blockly-rc/core/utils/svg.ts +84 -0
- package/blockly-rc/core/utils/svg_math.ts +208 -0
- package/blockly-rc/core/utils/svg_paths.ts +133 -0
- package/blockly-rc/core/utils/toolbox.ts +419 -0
- package/blockly-rc/core/utils/useragent.ts +86 -0
- package/blockly-rc/core/utils/xml.ts +165 -0
- package/blockly-rc/core/utils.ts +59 -0
- package/blockly-rc/core/variable_map.ts +437 -0
- package/blockly-rc/core/variable_model.ts +149 -0
- package/blockly-rc/core/variables.ts +773 -0
- package/blockly-rc/core/variables_dynamic.ts +142 -0
- package/blockly-rc/core/widgetdiv.ts +319 -0
- package/blockly-rc/core/workspace.ts +957 -0
- package/blockly-rc/core/workspace_audio.ts +171 -0
- package/blockly-rc/core/workspace_dragger.ts +97 -0
- package/blockly-rc/core/workspace_svg.ts +2519 -0
- package/blockly-rc/core/xml.ts +1133 -0
- package/blockly-rc/core/zoom_controls.ts +492 -0
- package/blockly-rc/demos/blockfactory/analytics.js +195 -0
- package/blockly-rc/demos/blockfactory/app_controller.js +726 -0
- package/blockly-rc/demos/blockfactory/block_definition_extractor.js +742 -0
- package/blockly-rc/demos/blockfactory/block_exporter_controller.js +311 -0
- package/blockly-rc/demos/blockfactory/block_exporter_tools.js +212 -0
- package/blockly-rc/demos/blockfactory/block_exporter_view.js +101 -0
- package/blockly-rc/demos/blockfactory/block_library_controller.js +325 -0
- package/blockly-rc/demos/blockfactory/block_library_storage.js +149 -0
- package/blockly-rc/demos/blockfactory/block_library_view.js +178 -0
- package/blockly-rc/demos/blockfactory/block_option.js +151 -0
- package/blockly-rc/demos/blockfactory/blocks.js +916 -0
- package/blockly-rc/demos/blockfactory/cp.css +46 -0
- package/blockly-rc/demos/blockfactory/cp.js +179 -0
- package/blockly-rc/demos/blockfactory/factory.css +586 -0
- package/blockly-rc/demos/blockfactory/factory.js +337 -0
- package/blockly-rc/demos/blockfactory/factory_utils.js +1036 -0
- package/blockly-rc/demos/blockfactory/icon.png +0 -0
- package/blockly-rc/demos/blockfactory/index.html +767 -0
- package/blockly-rc/demos/blockfactory/link.png +0 -0
- package/blockly-rc/demos/blockfactory/standard_categories.js +384 -0
- package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_controller.js +1332 -0
- package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_generator.js +224 -0
- package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_init.js +541 -0
- package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_model.js +548 -0
- package/blockly-rc/demos/blockfactory/workspacefactory/wfactory_view.js +424 -0
- package/blockly-rc/demos/code/code.js +626 -0
- package/blockly-rc/demos/code/icon.png +0 -0
- package/blockly-rc/demos/code/icons.png +0 -0
- package/blockly-rc/demos/code/index.html +359 -0
- package/blockly-rc/demos/code/msg/ar.js +24 -0
- package/blockly-rc/demos/code/msg/be-tarask.js +24 -0
- package/blockly-rc/demos/code/msg/br.js +24 -0
- package/blockly-rc/demos/code/msg/ca.js +24 -0
- package/blockly-rc/demos/code/msg/cs.js +24 -0
- package/blockly-rc/demos/code/msg/da.js +24 -0
- package/blockly-rc/demos/code/msg/de.js +24 -0
- package/blockly-rc/demos/code/msg/el.js +24 -0
- package/blockly-rc/demos/code/msg/en.js +24 -0
- package/blockly-rc/demos/code/msg/es.js +24 -0
- package/blockly-rc/demos/code/msg/et.js +24 -0
- package/blockly-rc/demos/code/msg/fa.js +24 -0
- package/blockly-rc/demos/code/msg/fr.js +24 -0
- package/blockly-rc/demos/code/msg/he.js +24 -0
- package/blockly-rc/demos/code/msg/hr.js +24 -0
- package/blockly-rc/demos/code/msg/hrx.js +24 -0
- package/blockly-rc/demos/code/msg/hu.js +24 -0
- package/blockly-rc/demos/code/msg/ia.js +24 -0
- package/blockly-rc/demos/code/msg/is.js +24 -0
- package/blockly-rc/demos/code/msg/it.js +24 -0
- package/blockly-rc/demos/code/msg/ja.js +24 -0
- package/blockly-rc/demos/code/msg/kab.js +24 -0
- package/blockly-rc/demos/code/msg/ko.js +24 -0
- package/blockly-rc/demos/code/msg/mk.js +24 -0
- package/blockly-rc/demos/code/msg/ms.js +24 -0
- package/blockly-rc/demos/code/msg/nb.js +24 -0
- package/blockly-rc/demos/code/msg/nl.js +24 -0
- package/blockly-rc/demos/code/msg/oc.js +24 -0
- package/blockly-rc/demos/code/msg/pl.js +24 -0
- package/blockly-rc/demos/code/msg/pms.js +24 -0
- package/blockly-rc/demos/code/msg/pt-br.js +24 -0
- package/blockly-rc/demos/code/msg/ro.js +24 -0
- package/blockly-rc/demos/code/msg/ru.js +24 -0
- package/blockly-rc/demos/code/msg/sc.js +24 -0
- package/blockly-rc/demos/code/msg/sk.js +24 -0
- package/blockly-rc/demos/code/msg/sr.js +24 -0
- package/blockly-rc/demos/code/msg/sv.js +24 -0
- package/blockly-rc/demos/code/msg/ta.js +24 -0
- package/blockly-rc/demos/code/msg/th.js +24 -0
- package/blockly-rc/demos/code/msg/tlh.js +24 -0
- package/blockly-rc/demos/code/msg/tr.js +24 -0
- package/blockly-rc/demos/code/msg/uk.js +24 -0
- package/blockly-rc/demos/code/msg/vi.js +24 -0
- package/blockly-rc/demos/code/msg/zh-hans.js +24 -0
- package/blockly-rc/demos/code/msg/zh-hant.js +24 -0
- package/blockly-rc/demos/code/style.css +184 -0
- package/blockly-rc/demos/index.html +68 -0
- package/blockly-rc/demos/minimap/icon.png +0 -0
- package/blockly-rc/demos/minimap/index.html +91 -0
- package/blockly-rc/demos/minimap/minimap.js +302 -0
- package/blockly-rc/demos/mobile/README.md +53 -0
- package/blockly-rc/demos/mobile/android/README.md +45 -0
- package/blockly-rc/demos/mobile/android/app/build.gradle +64 -0
- package/blockly-rc/demos/mobile/android/app/proguard-rules.pro +21 -0
- package/blockly-rc/demos/mobile/android/app/src/androidTest/java/com/example/blocklywebview/ExampleInstrumentedTest.java +26 -0
- package/blockly-rc/demos/mobile/android/app/src/main/AndroidManifest.xml +21 -0
- package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/BlocklyWebViewFragment.java +40 -0
- package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/JsDialogHelper.java +150 -0
- package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/WebChromeClient.java +32 -0
- package/blockly-rc/demos/mobile/android/app/src/main/java/com/google/blockly/android/webview/demo/MainActivity.java +18 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/drawable/ic_launcher_background.xml +74 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +34 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/layout/activity_main.xml +17 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/layout/js_prompt.xml +37 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/values/colors.xml +6 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/values/js_dialog_helper.xml +7 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/values/strings.xml +3 -0
- package/blockly-rc/demos/mobile/android/app/src/main/res/values/styles.xml +11 -0
- package/blockly-rc/demos/mobile/android/app/src/test/java/com/example/blocklywebview/ExampleUnitTest.java +17 -0
- package/blockly-rc/demos/mobile/android/build.gradle +27 -0
- package/blockly-rc/demos/mobile/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/blockly-rc/demos/mobile/android/gradle/wrapper/gradle-wrapper.properties +6 -0
- package/blockly-rc/demos/mobile/android/gradle.properties +13 -0
- package/blockly-rc/demos/mobile/android/gradlew +172 -0
- package/blockly-rc/demos/mobile/android/gradlew.bat +84 -0
- package/blockly-rc/demos/mobile/android/settings.gradle +1 -0
- package/blockly-rc/demos/mobile/html/index.html +31 -0
- package/blockly-rc/demos/mobile/html/ln_resources.sh +22 -0
- package/blockly-rc/demos/mobile/html/toolbox_standard.js +333 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/AppDelegate.swift +46 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/Assets.xcassets/Contents.json +6 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/Base.lproj/LaunchScreen.storyboard +25 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/Base.lproj/Main.storyboard +44 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/Info.plist +45 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView/ViewController.swift +110 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView.xcodeproj/project.pbxproj +390 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/blockly-rc/demos/mobile/ios/Blockly WebView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/blockly-rc/demos/mobile/ios/cp_resources.sh +21 -0
- package/blockly-rc/demos/storage/icon.png +0 -0
- package/blockly-rc/demos/storage/index.html +104 -0
- package/blockly-rc/generators/dart/dart_generator.ts +321 -0
- package/blockly-rc/generators/dart/lists.ts +525 -0
- package/blockly-rc/generators/dart/logic.ts +155 -0
- package/blockly-rc/generators/dart/loops.ts +217 -0
- package/blockly-rc/generators/dart/math.ts +559 -0
- package/blockly-rc/generators/dart/procedures.ts +138 -0
- package/blockly-rc/generators/dart/text.ts +405 -0
- package/blockly-rc/generators/dart/variables.ts +32 -0
- package/blockly-rc/generators/dart/variables_dynamic.ts +17 -0
- package/blockly-rc/generators/dart.ts +50 -0
- package/blockly-rc/generators/javascript/javascript_generator.ts +346 -0
- package/blockly-rc/generators/javascript/lists.ts +465 -0
- package/blockly-rc/generators/javascript/logic.ts +153 -0
- package/blockly-rc/generators/javascript/loops.ts +245 -0
- package/blockly-rc/generators/javascript/math.ts +450 -0
- package/blockly-rc/generators/javascript/procedures.ts +142 -0
- package/blockly-rc/generators/javascript/text.ts +418 -0
- package/blockly-rc/generators/javascript/variables.ts +32 -0
- package/blockly-rc/generators/javascript/variables_dynamic.ts +17 -0
- package/blockly-rc/generators/javascript.ts +46 -0
- package/blockly-rc/generators/lua/lists.ts +445 -0
- package/blockly-rc/generators/lua/logic.ts +142 -0
- package/blockly-rc/generators/lua/loops.ts +192 -0
- package/blockly-rc/generators/lua/lua_generator.ts +225 -0
- package/blockly-rc/generators/lua/math.ts +473 -0
- package/blockly-rc/generators/lua/procedures.ts +144 -0
- package/blockly-rc/generators/lua/text.ts +380 -0
- package/blockly-rc/generators/lua/variables.ts +31 -0
- package/blockly-rc/generators/lua/variables_dynamic.ts +17 -0
- package/blockly-rc/generators/lua.ts +44 -0
- package/blockly-rc/generators/php/lists.ts +585 -0
- package/blockly-rc/generators/php/logic.ts +155 -0
- package/blockly-rc/generators/php/loops.ts +218 -0
- package/blockly-rc/generators/php/math.ts +408 -0
- package/blockly-rc/generators/php/php_generator.ts +320 -0
- package/blockly-rc/generators/php/procedures.ts +159 -0
- package/blockly-rc/generators/php/text.ts +315 -0
- package/blockly-rc/generators/php/variables.ts +32 -0
- package/blockly-rc/generators/php/variables_dynamic.ts +17 -0
- package/blockly-rc/generators/php.ts +46 -0
- package/blockly-rc/generators/python/lists.ts +398 -0
- package/blockly-rc/generators/python/logic.ts +148 -0
- package/blockly-rc/generators/python/loops.ts +251 -0
- package/blockly-rc/generators/python/math.ts +434 -0
- package/blockly-rc/generators/python/procedures.ts +159 -0
- package/blockly-rc/generators/python/python_generator.ts +355 -0
- package/blockly-rc/generators/python/text.ts +338 -0
- package/blockly-rc/generators/python/variables.ts +31 -0
- package/blockly-rc/generators/python/variables_dynamic.ts +17 -0
- package/blockly-rc/generators/python.ts +51 -0
- package/blockly-rc/gulpfile.js +54 -0
- package/blockly-rc/jsconfig.json +7 -0
- package/blockly-rc/media/1x1.gif +0 -0
- package/blockly-rc/media/click.mp3 +0 -0
- package/blockly-rc/media/click.ogg +0 -0
- package/blockly-rc/media/click.wav +0 -0
- package/blockly-rc/media/delete-icon.svg +1 -0
- package/blockly-rc/media/delete.mp3 +0 -0
- package/blockly-rc/media/delete.ogg +0 -0
- package/blockly-rc/media/delete.wav +0 -0
- package/blockly-rc/media/disconnect.mp3 +0 -0
- package/blockly-rc/media/disconnect.ogg +0 -0
- package/blockly-rc/media/disconnect.wav +0 -0
- package/blockly-rc/media/dropdown-arrow.svg +1 -0
- package/blockly-rc/media/foldout-icon.svg +1 -0
- package/blockly-rc/media/handclosed.cur +0 -0
- package/blockly-rc/media/handdelete.cur +0 -0
- package/blockly-rc/media/handopen.cur +0 -0
- package/blockly-rc/media/pilcrow.png +0 -0
- package/blockly-rc/media/quote0.png +0 -0
- package/blockly-rc/media/quote1.png +0 -0
- package/blockly-rc/media/resize-handle.svg +3 -0
- package/blockly-rc/media/sprites.png +0 -0
- package/blockly-rc/media/sprites.svg +74 -0
- package/blockly-rc/msg/json/README.md +33 -0
- package/blockly-rc/msg/json/ab.json +222 -0
- package/blockly-rc/msg/json/ace.json +7 -0
- package/blockly-rc/msg/json/af.json +34 -0
- package/blockly-rc/msg/json/am.json +30 -0
- package/blockly-rc/msg/json/ar.json +355 -0
- package/blockly-rc/msg/json/ast.json +10 -0
- package/blockly-rc/msg/json/az.json +332 -0
- package/blockly-rc/msg/json/ba.json +211 -0
- package/blockly-rc/msg/json/bcc.json +290 -0
- package/blockly-rc/msg/json/be-tarask.json +334 -0
- package/blockly-rc/msg/json/be.json +324 -0
- package/blockly-rc/msg/json/bg.json +345 -0
- package/blockly-rc/msg/json/bn.json +189 -0
- package/blockly-rc/msg/json/br.json +334 -0
- package/blockly-rc/msg/json/bs.json +166 -0
- package/blockly-rc/msg/json/ca.json +341 -0
- package/blockly-rc/msg/json/cdo.json +6 -0
- package/blockly-rc/msg/json/ce.json +326 -0
- package/blockly-rc/msg/json/constants.json +12 -0
- package/blockly-rc/msg/json/cs.json +343 -0
- package/blockly-rc/msg/json/da.json +346 -0
- package/blockly-rc/msg/json/de.json +369 -0
- package/blockly-rc/msg/json/diq.json +258 -0
- package/blockly-rc/msg/json/dtp.json +198 -0
- package/blockly-rc/msg/json/dty.json +97 -0
- package/blockly-rc/msg/json/ee.json +160 -0
- package/blockly-rc/msg/json/el.json +356 -0
- package/blockly-rc/msg/json/en-gb.json +199 -0
- package/blockly-rc/msg/json/en.json +400 -0
- package/blockly-rc/msg/json/eo.json +337 -0
- package/blockly-rc/msg/json/es.json +358 -0
- package/blockly-rc/msg/json/et.json +326 -0
- package/blockly-rc/msg/json/eu.json +219 -0
- package/blockly-rc/msg/json/fa.json +341 -0
- package/blockly-rc/msg/json/fi.json +350 -0
- package/blockly-rc/msg/json/fo.json +46 -0
- package/blockly-rc/msg/json/fr.json +373 -0
- package/blockly-rc/msg/json/frr.json +6 -0
- package/blockly-rc/msg/json/gl.json +338 -0
- package/blockly-rc/msg/json/gn.json +54 -0
- package/blockly-rc/msg/json/gor.json +87 -0
- package/blockly-rc/msg/json/ha.json +313 -0
- package/blockly-rc/msg/json/hak.json +17 -0
- package/blockly-rc/msg/json/he.json +354 -0
- package/blockly-rc/msg/json/hi.json +318 -0
- package/blockly-rc/msg/json/hr.json +327 -0
- package/blockly-rc/msg/json/hrx.json +287 -0
- package/blockly-rc/msg/json/hsb.json +128 -0
- package/blockly-rc/msg/json/hu.json +349 -0
- package/blockly-rc/msg/json/hy.json +337 -0
- package/blockly-rc/msg/json/ia.json +337 -0
- package/blockly-rc/msg/json/id.json +335 -0
- package/blockly-rc/msg/json/ig.json +323 -0
- package/blockly-rc/msg/json/inh.json +80 -0
- package/blockly-rc/msg/json/is.json +331 -0
- package/blockly-rc/msg/json/it.json +346 -0
- package/blockly-rc/msg/json/ja.json +361 -0
- package/blockly-rc/msg/json/ka.json +14 -0
- package/blockly-rc/msg/json/kab.json +323 -0
- package/blockly-rc/msg/json/kbd-cyrl.json +84 -0
- package/blockly-rc/msg/json/km.json +29 -0
- package/blockly-rc/msg/json/kn.json +332 -0
- package/blockly-rc/msg/json/ko.json +372 -0
- package/blockly-rc/msg/json/ksh.json +43 -0
- package/blockly-rc/msg/json/ku-latn.json +41 -0
- package/blockly-rc/msg/json/ky.json +71 -0
- package/blockly-rc/msg/json/la.json +6 -0
- package/blockly-rc/msg/json/lb.json +156 -0
- package/blockly-rc/msg/json/lki.json +282 -0
- package/blockly-rc/msg/json/lo.json +92 -0
- package/blockly-rc/msg/json/lrc.json +123 -0
- package/blockly-rc/msg/json/lt.json +321 -0
- package/blockly-rc/msg/json/lv.json +324 -0
- package/blockly-rc/msg/json/mg.json +58 -0
- package/blockly-rc/msg/json/mk.json +178 -0
- package/blockly-rc/msg/json/ml.json +35 -0
- package/blockly-rc/msg/json/mnw.json +90 -0
- package/blockly-rc/msg/json/ms.json +300 -0
- package/blockly-rc/msg/json/my.json +57 -0
- package/blockly-rc/msg/json/mzn.json +6 -0
- package/blockly-rc/msg/json/nb.json +330 -0
- package/blockly-rc/msg/json/ne.json +247 -0
- package/blockly-rc/msg/json/nl.json +357 -0
- package/blockly-rc/msg/json/oc.json +194 -0
- package/blockly-rc/msg/json/olo.json +37 -0
- package/blockly-rc/msg/json/pa.json +69 -0
- package/blockly-rc/msg/json/pl.json +357 -0
- package/blockly-rc/msg/json/pms.json +324 -0
- package/blockly-rc/msg/json/ps.json +50 -0
- package/blockly-rc/msg/json/pt-br.json +369 -0
- package/blockly-rc/msg/json/pt.json +358 -0
- package/blockly-rc/msg/json/qqq.json +406 -0
- package/blockly-rc/msg/json/ro.json +333 -0
- package/blockly-rc/msg/json/ru.json +363 -0
- package/blockly-rc/msg/json/sc.json +283 -0
- package/blockly-rc/msg/json/sco.json +11 -0
- package/blockly-rc/msg/json/sd.json +158 -0
- package/blockly-rc/msg/json/shn.json +109 -0
- package/blockly-rc/msg/json/si.json +16 -0
- package/blockly-rc/msg/json/sk.json +332 -0
- package/blockly-rc/msg/json/skr-arab.json +117 -0
- package/blockly-rc/msg/json/sl.json +355 -0
- package/blockly-rc/msg/json/smn.json +133 -0
- package/blockly-rc/msg/json/sq.json +343 -0
- package/blockly-rc/msg/json/sr-latn.json +324 -0
- package/blockly-rc/msg/json/sr.json +348 -0
- package/blockly-rc/msg/json/sv.json +347 -0
- package/blockly-rc/msg/json/sw.json +12 -0
- package/blockly-rc/msg/json/synonyms.json +22 -0
- package/blockly-rc/msg/json/ta.json +306 -0
- package/blockly-rc/msg/json/tcy.json +316 -0
- package/blockly-rc/msg/json/tdd.json +109 -0
- package/blockly-rc/msg/json/te.json +101 -0
- package/blockly-rc/msg/json/th.json +333 -0
- package/blockly-rc/msg/json/ti.json +50 -0
- package/blockly-rc/msg/json/tl.json +129 -0
- package/blockly-rc/msg/json/tlh.json +179 -0
- package/blockly-rc/msg/json/tr.json +369 -0
- package/blockly-rc/msg/json/ug-arab.json +132 -0
- package/blockly-rc/msg/json/uk.json +345 -0
- package/blockly-rc/msg/json/ur.json +117 -0
- package/blockly-rc/msg/json/uz.json +36 -0
- package/blockly-rc/msg/json/vi.json +345 -0
- package/blockly-rc/msg/json/xmf.json +96 -0
- package/blockly-rc/msg/json/yo.json +316 -0
- package/blockly-rc/msg/json/zgh.json +83 -0
- package/blockly-rc/msg/json/zh-hans.json +372 -0
- package/blockly-rc/msg/json/zh-hant.json +362 -0
- package/blockly-rc/msg/messages.js +1616 -0
- package/blockly-rc/package-lock.json +12324 -0
- package/blockly-rc/package.json +149 -0
- package/blockly-rc/patches/@microsoft+api-documenter+7.22.4.patch +81 -0
- package/blockly-rc/scripts/goog_module/convert-file.sh +406 -0
- package/blockly-rc/scripts/gulpfiles/appengine_tasks.js +195 -0
- package/blockly-rc/scripts/gulpfiles/build_tasks.js +752 -0
- package/blockly-rc/scripts/gulpfiles/config.js +41 -0
- package/blockly-rc/scripts/gulpfiles/docs_tasks.js +147 -0
- package/blockly-rc/scripts/gulpfiles/git_tasks.js +181 -0
- package/blockly-rc/scripts/gulpfiles/helper_tasks.js +19 -0
- package/blockly-rc/scripts/gulpfiles/package_tasks.js +262 -0
- package/blockly-rc/scripts/gulpfiles/release_tasks.js +183 -0
- package/blockly-rc/scripts/gulpfiles/test_tasks.js +405 -0
- package/blockly-rc/scripts/helpers.js +74 -0
- package/blockly-rc/scripts/i18n/common.py +233 -0
- package/blockly-rc/scripts/i18n/create_messages.py +167 -0
- package/blockly-rc/scripts/i18n/dedup_json.py +72 -0
- package/blockly-rc/scripts/i18n/js_to_json.py +135 -0
- package/blockly-rc/scripts/i18n/tests.py +46 -0
- package/blockly-rc/scripts/migration/cjs2esm +162 -0
- package/blockly-rc/scripts/migration/js2ts +168 -0
- package/blockly-rc/scripts/migration/renamings.json5 +1599 -0
- package/blockly-rc/scripts/package/README.md +93 -0
- package/blockly-rc/scripts/package/core-node.js +31 -0
- package/blockly-rc/scripts/package/index.js +23 -0
- package/blockly-rc/scripts/package/templates/umd-msg.template +16 -0
- package/blockly-rc/scripts/package/templates/umd.template +13 -0
- package/blockly-rc/scripts/themes/blockStyles_example.json +11 -0
- package/blockly-rc/scripts/themes/create_blockStyles.py +181 -0
- package/blockly-rc/scripts/tsick.js +86 -0
- package/blockly-rc/tests/.eslintrc.json +10 -0
- package/blockly-rc/tests/browser/.eslintrc.json +29 -0
- package/blockly-rc/tests/browser/.mocharc.js +6 -0
- package/blockly-rc/tests/browser/test/basic_block_factory_test.mjs +44 -0
- package/blockly-rc/tests/browser/test/basic_block_test.mjs +39 -0
- package/blockly-rc/tests/browser/test/basic_playground_test.mjs +198 -0
- package/blockly-rc/tests/browser/test/block_undo_test.mjs +50 -0
- package/blockly-rc/tests/browser/test/delete_blocks_test.mjs +211 -0
- package/blockly-rc/tests/browser/test/extensive_test.mjs +195 -0
- package/blockly-rc/tests/browser/test/field_edits_test.mjs +61 -0
- package/blockly-rc/tests/browser/test/hooks.mjs +23 -0
- package/blockly-rc/tests/browser/test/mutator_test.mjs +88 -0
- package/blockly-rc/tests/browser/test/procedure_test.mjs +109 -0
- package/blockly-rc/tests/browser/test/test_setup.mjs +589 -0
- package/blockly-rc/tests/browser/test/toolbox_drag_test.mjs +207 -0
- package/blockly-rc/tests/browser/test/workspace_comment_test.mjs +224 -0
- package/blockly-rc/tests/compile/index.html +43 -0
- package/blockly-rc/tests/compile/main.js +53 -0
- package/blockly-rc/tests/compile/test_blocks.js +47 -0
- package/blockly-rc/tests/compile/webdriver.js +81 -0
- package/blockly-rc/tests/generators/functions.xml +561 -0
- package/blockly-rc/tests/generators/golden/generated.dart +1604 -0
- package/blockly-rc/tests/generators/golden/generated.js +1552 -0
- package/blockly-rc/tests/generators/golden/generated.lua +1828 -0
- package/blockly-rc/tests/generators/golden/generated.php +1611 -0
- package/blockly-rc/tests/generators/golden/generated.py +1407 -0
- package/blockly-rc/tests/generators/index.html +405 -0
- package/blockly-rc/tests/generators/lists.xml +8675 -0
- package/blockly-rc/tests/generators/logic.xml +1019 -0
- package/blockly-rc/tests/generators/loops1.xml +345 -0
- package/blockly-rc/tests/generators/loops2.xml +891 -0
- package/blockly-rc/tests/generators/loops3.xml +735 -0
- package/blockly-rc/tests/generators/math.xml +2077 -0
- package/blockly-rc/tests/generators/text.xml +4651 -0
- package/blockly-rc/tests/generators/unittest.js +103 -0
- package/blockly-rc/tests/generators/unittest_dart.js +163 -0
- package/blockly-rc/tests/generators/unittest_javascript.js +167 -0
- package/blockly-rc/tests/generators/unittest_lua.js +165 -0
- package/blockly-rc/tests/generators/unittest_php.js +154 -0
- package/blockly-rc/tests/generators/unittest_python.js +138 -0
- package/blockly-rc/tests/generators/variables.xml +68 -0
- package/blockly-rc/tests/generators/webdriver.js +123 -0
- package/blockly-rc/tests/media/200px.png +0 -0
- package/blockly-rc/tests/media/30px.png +0 -0
- package/blockly-rc/tests/media/50px.png +0 -0
- package/blockly-rc/tests/media/a.png +0 -0
- package/blockly-rc/tests/media/arrow.png +0 -0
- package/blockly-rc/tests/media/b.png +0 -0
- package/blockly-rc/tests/media/c.png +0 -0
- package/blockly-rc/tests/media/d.png +0 -0
- package/blockly-rc/tests/media/e.png +0 -0
- package/blockly-rc/tests/media/f.png +0 -0
- package/blockly-rc/tests/media/g.png +0 -0
- package/blockly-rc/tests/media/h.png +0 -0
- package/blockly-rc/tests/media/i.png +0 -0
- package/blockly-rc/tests/media/j.png +0 -0
- package/blockly-rc/tests/media/k.png +0 -0
- package/blockly-rc/tests/media/l.png +0 -0
- package/blockly-rc/tests/media/m.png +0 -0
- package/blockly-rc/tests/migration/renamings.schema.json +59 -0
- package/blockly-rc/tests/migration/validate-renamings.mjs +60 -0
- package/blockly-rc/tests/mocha/.eslintrc.json +21 -0
- package/blockly-rc/tests/mocha/.mocharc.js +6 -0
- package/blockly-rc/tests/mocha/astnode_test.js +850 -0
- package/blockly-rc/tests/mocha/block_json_test.js +777 -0
- package/blockly-rc/tests/mocha/block_test.js +2743 -0
- package/blockly-rc/tests/mocha/blocks/lists_test.js +196 -0
- package/blockly-rc/tests/mocha/blocks/logic_ternary_test.js +320 -0
- package/blockly-rc/tests/mocha/blocks/loops_test.js +56 -0
- package/blockly-rc/tests/mocha/blocks/procedures_test.js +2495 -0
- package/blockly-rc/tests/mocha/blocks/variables_test.js +311 -0
- package/blockly-rc/tests/mocha/clipboard_test.js +136 -0
- package/blockly-rc/tests/mocha/comment_deserialization_test.js +122 -0
- package/blockly-rc/tests/mocha/comment_test.js +170 -0
- package/blockly-rc/tests/mocha/comment_view_test.js +188 -0
- package/blockly-rc/tests/mocha/connection_checker_test.js +666 -0
- package/blockly-rc/tests/mocha/connection_db_test.js +362 -0
- package/blockly-rc/tests/mocha/connection_test.js +3738 -0
- package/blockly-rc/tests/mocha/contextmenu_items_test.js +488 -0
- package/blockly-rc/tests/mocha/contextmenu_test.js +71 -0
- package/blockly-rc/tests/mocha/cursor_test.js +134 -0
- package/blockly-rc/tests/mocha/dropdowndiv_test.js +116 -0
- package/blockly-rc/tests/mocha/event_block_change_test.js +126 -0
- package/blockly-rc/tests/mocha/event_block_create_test.js +109 -0
- package/blockly-rc/tests/mocha/event_block_delete_test.js +55 -0
- package/blockly-rc/tests/mocha/event_block_drag_test.js +36 -0
- package/blockly-rc/tests/mocha/event_block_field_intermediate_change_test.js +67 -0
- package/blockly-rc/tests/mocha/event_block_move_test.js +39 -0
- package/blockly-rc/tests/mocha/event_bubble_open_test.js +42 -0
- package/blockly-rc/tests/mocha/event_click_test.js +40 -0
- package/blockly-rc/tests/mocha/event_comment_change_test.js +39 -0
- package/blockly-rc/tests/mocha/event_comment_collapse_test.js +34 -0
- package/blockly-rc/tests/mocha/event_comment_create_test.js +38 -0
- package/blockly-rc/tests/mocha/event_comment_delete_test.js +38 -0
- package/blockly-rc/tests/mocha/event_comment_drag_test.js +35 -0
- package/blockly-rc/tests/mocha/event_comment_move_test.js +40 -0
- package/blockly-rc/tests/mocha/event_comment_resize_test.js +38 -0
- package/blockly-rc/tests/mocha/event_marker_move_test.js +44 -0
- package/blockly-rc/tests/mocha/event_selected_test.js +41 -0
- package/blockly-rc/tests/mocha/event_test.js +1578 -0
- package/blockly-rc/tests/mocha/event_theme_change_test.js +36 -0
- package/blockly-rc/tests/mocha/event_toolbox_item_select_test.js +64 -0
- package/blockly-rc/tests/mocha/event_trashcan_open_test.js +36 -0
- package/blockly-rc/tests/mocha/event_var_create_test.js +54 -0
- package/blockly-rc/tests/mocha/event_var_delete_test.js +54 -0
- package/blockly-rc/tests/mocha/event_var_rename_test.js +39 -0
- package/blockly-rc/tests/mocha/event_var_type_change_test.js +43 -0
- package/blockly-rc/tests/mocha/event_viewport_test.js +39 -0
- package/blockly-rc/tests/mocha/extensions_test.js +613 -0
- package/blockly-rc/tests/mocha/field_checkbox_test.js +299 -0
- package/blockly-rc/tests/mocha/field_colour_test.js +395 -0
- package/blockly-rc/tests/mocha/field_dropdown_test.js +282 -0
- package/blockly-rc/tests/mocha/field_image_test.js +241 -0
- package/blockly-rc/tests/mocha/field_label_serializable_test.js +252 -0
- package/blockly-rc/tests/mocha/field_label_test.js +226 -0
- package/blockly-rc/tests/mocha/field_number_test.js +505 -0
- package/blockly-rc/tests/mocha/field_registry_test.js +116 -0
- package/blockly-rc/tests/mocha/field_test.js +822 -0
- package/blockly-rc/tests/mocha/field_textinput_test.js +297 -0
- package/blockly-rc/tests/mocha/field_variable_test.js +611 -0
- package/blockly-rc/tests/mocha/flyout_test.js +638 -0
- package/blockly-rc/tests/mocha/generator_test.js +233 -0
- package/blockly-rc/tests/mocha/gesture_test.js +97 -0
- package/blockly-rc/tests/mocha/icon_test.js +369 -0
- package/blockly-rc/tests/mocha/index.html +229 -0
- package/blockly-rc/tests/mocha/input_test.js +296 -0
- package/blockly-rc/tests/mocha/insertion_marker_manager_test.js +443 -0
- package/blockly-rc/tests/mocha/insertion_marker_test.js +432 -0
- package/blockly-rc/tests/mocha/jso_deserialization_test.js +849 -0
- package/blockly-rc/tests/mocha/jso_serialization_test.js +1067 -0
- package/blockly-rc/tests/mocha/json_test.js +315 -0
- package/blockly-rc/tests/mocha/keydown_test.js +364 -0
- package/blockly-rc/tests/mocha/layering_test.js +95 -0
- package/blockly-rc/tests/mocha/metrics_test.js +671 -0
- package/blockly-rc/tests/mocha/mutator_test.js +87 -0
- package/blockly-rc/tests/mocha/names_test.js +97 -0
- package/blockly-rc/tests/mocha/old_workspace_comment_test.js +256 -0
- package/blockly-rc/tests/mocha/procedure_map_test.js +57 -0
- package/blockly-rc/tests/mocha/registry_test.js +281 -0
- package/blockly-rc/tests/mocha/render_management_test.js +127 -0
- package/blockly-rc/tests/mocha/serializer_test.js +2104 -0
- package/blockly-rc/tests/mocha/shortcut_registry_test.js +450 -0
- package/blockly-rc/tests/mocha/test_helpers/block_definitions.js +204 -0
- package/blockly-rc/tests/mocha/test_helpers/code_generation.js +115 -0
- package/blockly-rc/tests/mocha/test_helpers/common.js +106 -0
- package/blockly-rc/tests/mocha/test_helpers/events.js +290 -0
- package/blockly-rc/tests/mocha/test_helpers/fields.js +310 -0
- package/blockly-rc/tests/mocha/test_helpers/icon_mocks.js +81 -0
- package/blockly-rc/tests/mocha/test_helpers/procedures.js +302 -0
- package/blockly-rc/tests/mocha/test_helpers/serialization.js +124 -0
- package/blockly-rc/tests/mocha/test_helpers/setup_teardown.js +209 -0
- package/blockly-rc/tests/mocha/test_helpers/toolbox_definitions.js +271 -0
- package/blockly-rc/tests/mocha/test_helpers/user_input.js +62 -0
- package/blockly-rc/tests/mocha/test_helpers/variables.js +23 -0
- package/blockly-rc/tests/mocha/test_helpers/warnings.js +83 -0
- package/blockly-rc/tests/mocha/test_helpers/workspace.js +1691 -0
- package/blockly-rc/tests/mocha/theme_test.js +307 -0
- package/blockly-rc/tests/mocha/toolbox_test.js +761 -0
- package/blockly-rc/tests/mocha/tooltip_test.js +276 -0
- package/blockly-rc/tests/mocha/touch_test.js +109 -0
- package/blockly-rc/tests/mocha/trashcan_test.js +375 -0
- package/blockly-rc/tests/mocha/utils_test.js +536 -0
- package/blockly-rc/tests/mocha/variable_map_test.js +509 -0
- package/blockly-rc/tests/mocha/variable_model_test.js +85 -0
- package/blockly-rc/tests/mocha/webdriver.js +96 -0
- package/blockly-rc/tests/mocha/widget_div_test.js +272 -0
- package/blockly-rc/tests/mocha/workspace_comment_test.js +171 -0
- package/blockly-rc/tests/mocha/workspace_svg_test.js +414 -0
- package/blockly-rc/tests/mocha/workspace_test.js +27 -0
- package/blockly-rc/tests/mocha/xml_test.js +951 -0
- package/blockly-rc/tests/mocha/zoom_controls_test.js +81 -0
- package/blockly-rc/tests/multi_playground.html +482 -0
- package/blockly-rc/tests/node/.eslintrc.json +12 -0
- package/blockly-rc/tests/node/.mocharc.js +6 -0
- package/blockly-rc/tests/node/run_node_test.mjs +72 -0
- package/blockly-rc/tests/playground.html +1280 -0
- package/blockly-rc/tests/playgrounds/advanced_playground.html +158 -0
- package/blockly-rc/tests/playgrounds/iframe.html +40 -0
- package/blockly-rc/tests/playgrounds/screenshot.js +123 -0
- package/blockly-rc/tests/scripts/check_metadata.sh +166 -0
- package/blockly-rc/tests/scripts/compile_typings.sh +32 -0
- package/blockly-rc/tests/scripts/load.mjs +140 -0
- package/blockly-rc/tests/scripts/setup_linux_env.sh +7 -0
- package/blockly-rc/tests/scripts/update_metadata.sh +46 -0
- package/blockly-rc/tests/themes/test_themes.js +62 -0
- package/blockly-rc/tests/typescript/README.md +4 -0
- package/blockly-rc/tests/typescript/src/field/different_user_input.ts +81 -0
- package/blockly-rc/tests/typescript/src/generators/dart.ts +24 -0
- package/blockly-rc/tests/typescript/src/generators/javascript.ts +28 -0
- package/blockly-rc/tests/typescript/src/generators/lua.ts +24 -0
- package/blockly-rc/tests/typescript/src/generators/php.ts +24 -0
- package/blockly-rc/tests/typescript/src/generators/python.ts +24 -0
- package/blockly-rc/tests/typescript/src/generators.ts +31 -0
- package/blockly-rc/tests/typescript/src/msg.ts +20 -0
- package/blockly-rc/tests/typescript/tsconfig.json +20 -0
- package/blockly-rc/tests/xml/README.txt +11 -0
- package/blockly-rc/tests/xml/blockly.xsd +178 -0
- package/blockly-rc/tests/xml/invalid.xml +6 -0
- package/blockly-rc/tests/xml/toolbox.xml +311 -0
- package/blockly-rc/tests/xml/workspace.xml +114 -0
- package/blockly-rc/tsconfig.json +37 -0
- package/blockly-rc/tsdoc.json +35 -0
- package/blockly-rc/typings/README.md +5 -0
- package/blockly-rc/typings/blocks.d.ts +17 -0
- package/blockly-rc/typings/core.d.ts +7 -0
- package/blockly-rc/typings/dart.d.ts +7 -0
- package/blockly-rc/typings/index.d.ts +10 -0
- package/blockly-rc/typings/javascript.d.ts +7 -0
- package/blockly-rc/typings/lua.d.ts +7 -0
- package/blockly-rc/typings/msg/ab.d.ts +8 -0
- package/blockly-rc/typings/msg/ace.d.ts +8 -0
- package/blockly-rc/typings/msg/af.d.ts +8 -0
- package/blockly-rc/typings/msg/am.d.ts +8 -0
- package/blockly-rc/typings/msg/ar.d.ts +8 -0
- package/blockly-rc/typings/msg/ast.d.ts +8 -0
- package/blockly-rc/typings/msg/az.d.ts +8 -0
- package/blockly-rc/typings/msg/ba.d.ts +8 -0
- package/blockly-rc/typings/msg/bcc.d.ts +8 -0
- package/blockly-rc/typings/msg/be-tarask.d.ts +8 -0
- package/blockly-rc/typings/msg/be.d.ts +8 -0
- package/blockly-rc/typings/msg/bg.d.ts +8 -0
- package/blockly-rc/typings/msg/bn.d.ts +8 -0
- package/blockly-rc/typings/msg/br.d.ts +8 -0
- package/blockly-rc/typings/msg/bs.d.ts +8 -0
- package/blockly-rc/typings/msg/ca.d.ts +8 -0
- package/blockly-rc/typings/msg/cdo.d.ts +8 -0
- package/blockly-rc/typings/msg/ce.d.ts +8 -0
- package/blockly-rc/typings/msg/cs.d.ts +8 -0
- package/blockly-rc/typings/msg/da.d.ts +8 -0
- package/blockly-rc/typings/msg/de.d.ts +8 -0
- package/blockly-rc/typings/msg/diq.d.ts +8 -0
- package/blockly-rc/typings/msg/dtp.d.ts +8 -0
- package/blockly-rc/typings/msg/dty.d.ts +8 -0
- package/blockly-rc/typings/msg/ee.d.ts +8 -0
- package/blockly-rc/typings/msg/el.d.ts +8 -0
- package/blockly-rc/typings/msg/en-gb.d.ts +8 -0
- package/blockly-rc/typings/msg/en.d.ts +8 -0
- package/blockly-rc/typings/msg/eo.d.ts +8 -0
- package/blockly-rc/typings/msg/es.d.ts +8 -0
- package/blockly-rc/typings/msg/et.d.ts +8 -0
- package/blockly-rc/typings/msg/eu.d.ts +8 -0
- package/blockly-rc/typings/msg/fa.d.ts +8 -0
- package/blockly-rc/typings/msg/fi.d.ts +8 -0
- package/blockly-rc/typings/msg/fo.d.ts +8 -0
- package/blockly-rc/typings/msg/fr.d.ts +8 -0
- package/blockly-rc/typings/msg/frr.d.ts +8 -0
- package/blockly-rc/typings/msg/gl.d.ts +8 -0
- package/blockly-rc/typings/msg/gn.d.ts +8 -0
- package/blockly-rc/typings/msg/gor.d.ts +8 -0
- package/blockly-rc/typings/msg/ha.d.ts +8 -0
- package/blockly-rc/typings/msg/hak.d.ts +8 -0
- package/blockly-rc/typings/msg/he.d.ts +8 -0
- package/blockly-rc/typings/msg/hi.d.ts +8 -0
- package/blockly-rc/typings/msg/hr.d.ts +8 -0
- package/blockly-rc/typings/msg/hrx.d.ts +8 -0
- package/blockly-rc/typings/msg/hsb.d.ts +8 -0
- package/blockly-rc/typings/msg/hu.d.ts +8 -0
- package/blockly-rc/typings/msg/hy.d.ts +8 -0
- package/blockly-rc/typings/msg/ia.d.ts +8 -0
- package/blockly-rc/typings/msg/id.d.ts +8 -0
- package/blockly-rc/typings/msg/ig.d.ts +8 -0
- package/blockly-rc/typings/msg/inh.d.ts +8 -0
- package/blockly-rc/typings/msg/is.d.ts +8 -0
- package/blockly-rc/typings/msg/it.d.ts +8 -0
- package/blockly-rc/typings/msg/ja.d.ts +8 -0
- package/blockly-rc/typings/msg/ka.d.ts +8 -0
- package/blockly-rc/typings/msg/kab.d.ts +8 -0
- package/blockly-rc/typings/msg/kbd-cyrl.d.ts +8 -0
- package/blockly-rc/typings/msg/km.d.ts +8 -0
- package/blockly-rc/typings/msg/kn.d.ts +8 -0
- package/blockly-rc/typings/msg/ko.d.ts +8 -0
- package/blockly-rc/typings/msg/ksh.d.ts +8 -0
- package/blockly-rc/typings/msg/ku-latn.d.ts +8 -0
- package/blockly-rc/typings/msg/ky.d.ts +8 -0
- package/blockly-rc/typings/msg/la.d.ts +8 -0
- package/blockly-rc/typings/msg/lb.d.ts +8 -0
- package/blockly-rc/typings/msg/lki.d.ts +8 -0
- package/blockly-rc/typings/msg/lo.d.ts +8 -0
- package/blockly-rc/typings/msg/lrc.d.ts +8 -0
- package/blockly-rc/typings/msg/lt.d.ts +8 -0
- package/blockly-rc/typings/msg/lv.d.ts +8 -0
- package/blockly-rc/typings/msg/mg.d.ts +8 -0
- package/blockly-rc/typings/msg/mk.d.ts +8 -0
- package/blockly-rc/typings/msg/ml.d.ts +8 -0
- package/blockly-rc/typings/msg/mnw.d.ts +8 -0
- package/blockly-rc/typings/msg/ms.d.ts +8 -0
- package/blockly-rc/typings/msg/msg.d.ts +440 -0
- package/blockly-rc/typings/msg/my.d.ts +8 -0
- package/blockly-rc/typings/msg/mzn.d.ts +8 -0
- package/blockly-rc/typings/msg/nb.d.ts +8 -0
- package/blockly-rc/typings/msg/ne.d.ts +8 -0
- package/blockly-rc/typings/msg/nl.d.ts +8 -0
- package/blockly-rc/typings/msg/oc.d.ts +8 -0
- package/blockly-rc/typings/msg/olo.d.ts +8 -0
- package/blockly-rc/typings/msg/pa.d.ts +8 -0
- package/blockly-rc/typings/msg/pl.d.ts +8 -0
- package/blockly-rc/typings/msg/pms.d.ts +8 -0
- package/blockly-rc/typings/msg/ps.d.ts +8 -0
- package/blockly-rc/typings/msg/pt-br.d.ts +8 -0
- package/blockly-rc/typings/msg/pt.d.ts +8 -0
- package/blockly-rc/typings/msg/ro.d.ts +8 -0
- package/blockly-rc/typings/msg/ru.d.ts +8 -0
- package/blockly-rc/typings/msg/sc.d.ts +8 -0
- package/blockly-rc/typings/msg/sco.d.ts +8 -0
- package/blockly-rc/typings/msg/sd.d.ts +8 -0
- package/blockly-rc/typings/msg/shn.d.ts +8 -0
- package/blockly-rc/typings/msg/si.d.ts +8 -0
- package/blockly-rc/typings/msg/sk.d.ts +8 -0
- package/blockly-rc/typings/msg/skr-arab.d.ts +8 -0
- package/blockly-rc/typings/msg/sl.d.ts +8 -0
- package/blockly-rc/typings/msg/smn.d.ts +8 -0
- package/blockly-rc/typings/msg/sq.d.ts +8 -0
- package/blockly-rc/typings/msg/sr-latn.d.ts +8 -0
- package/blockly-rc/typings/msg/sr.d.ts +8 -0
- package/blockly-rc/typings/msg/sv.d.ts +8 -0
- package/blockly-rc/typings/msg/sw.d.ts +8 -0
- package/blockly-rc/typings/msg/ta.d.ts +8 -0
- package/blockly-rc/typings/msg/tcy.d.ts +8 -0
- package/blockly-rc/typings/msg/tdd.d.ts +8 -0
- package/blockly-rc/typings/msg/te.d.ts +8 -0
- package/blockly-rc/typings/msg/th.d.ts +8 -0
- package/blockly-rc/typings/msg/ti.d.ts +8 -0
- package/blockly-rc/typings/msg/tl.d.ts +8 -0
- package/blockly-rc/typings/msg/tlh.d.ts +8 -0
- package/blockly-rc/typings/msg/tr.d.ts +8 -0
- package/blockly-rc/typings/msg/ug-arab.d.ts +8 -0
- package/blockly-rc/typings/msg/uk.d.ts +8 -0
- package/blockly-rc/typings/msg/ur.d.ts +8 -0
- package/blockly-rc/typings/msg/uz.d.ts +8 -0
- package/blockly-rc/typings/msg/vi.d.ts +8 -0
- package/blockly-rc/typings/msg/xmf.d.ts +8 -0
- package/blockly-rc/typings/msg/yo.d.ts +8 -0
- package/blockly-rc/typings/msg/zgh.d.ts +8 -0
- package/blockly-rc/typings/msg/zh-hans.d.ts +8 -0
- package/blockly-rc/typings/msg/zh-hant.d.ts +8 -0
- package/blockly-rc/typings/php.d.ts +7 -0
- package/blockly-rc/typings/python.d.ts +7 -0
- package/blockly-rc/typings/templates/blockly-header.template +11 -0
- package/blockly-rc/typings/templates/blockly-interfaces.template +83 -0
- package/blockly-rc/typings/templates/msg.template +15 -0
- package/blockly-rc/typings/tsconfig.json +23 -0
- package/continuous-toolbox.d.ts +1 -0
- package/dist/main.js +2 -0
- package/dist/main.js.LICENSE.txt +163 -0
- package/media/delete-icon.svg +10 -0
- package/media/resize-handle.svg +3 -0
- package/msg/scratch_msgs.js +184 -164
- package/package.json +25 -40
- package/release.config.js +8 -0
- package/src/block_reporting.js +31 -0
- package/src/blocks/colour.js +56 -0
- package/src/blocks/control.js +492 -0
- package/src/blocks/data.js +690 -0
- package/src/blocks/event.js +305 -0
- package/src/blocks/looks.js +537 -0
- package/src/blocks/math.js +137 -0
- package/src/blocks/matrix.js +47 -0
- package/src/blocks/motion.js +513 -0
- package/src/blocks/note.js +48 -0
- package/src/blocks/operators.js +463 -0
- package/src/blocks/procedures.js +1009 -0
- package/src/blocks/sensing.js +441 -0
- package/src/blocks/sound.js +205 -0
- package/src/blocks/text.js +45 -0
- package/src/blocks/vertical_extensions.js +309 -0
- package/src/categories.js +15 -0
- package/src/checkable_continuous_flyout.js +138 -0
- package/src/checkbox_bubble.js +282 -0
- package/src/colours.js +77 -0
- package/src/constants.js +63 -0
- package/src/context_menu_items.js +150 -0
- package/src/css.js +1197 -0
- package/src/data_category.js +556 -0
- package/src/events/events_block_comment_base.js +35 -0
- package/src/events/events_block_comment_change.js +43 -0
- package/src/events/events_block_comment_collapse.js +43 -0
- package/src/events/events_block_comment_create.js +52 -0
- package/src/events/events_block_comment_delete.js +27 -0
- package/src/events/events_block_comment_move.js +54 -0
- package/src/events/events_block_comment_resize.js +52 -0
- package/src/events/events_block_drag_end.js +33 -0
- package/src/events/events_block_drag_outside.js +30 -0
- package/src/events/events_scratch_variable_create.js +67 -0
- package/src/fields/field_angle.js +433 -0
- package/src/fields/field_colour_slider.js +388 -0
- package/src/fields/field_dropdown.js +42 -0
- package/src/fields/field_matrix.js +634 -0
- package/src/fields/field_note.js +937 -0
- package/src/fields/field_number.js +380 -0
- package/src/fields/field_textinput_removable.js +107 -0
- package/src/fields/field_variable.js +171 -0
- package/src/fields/field_variable_getter.js +109 -0
- package/src/fields/field_vertical_separator.js +139 -0
- package/src/flyout_checkbox_icon.js +88 -0
- package/src/glows.js +98 -0
- package/src/index.ts +137 -0
- package/src/procedures.js +425 -0
- package/src/recyclable_block_flyout_inflater.js +194 -0
- package/src/renderer/bowler_hat.js +17 -0
- package/src/renderer/constants.js +45 -0
- package/src/renderer/drawer.js +51 -0
- package/src/renderer/path_object.js +35 -0
- package/src/renderer/render_info.js +98 -0
- package/src/renderer/renderer.js +74 -0
- package/src/scratch_block_paster.js +46 -0
- package/src/scratch_blocks_utils.js +148 -0
- package/src/scratch_comment_bubble.js +169 -0
- package/src/scratch_comment_icon.js +195 -0
- package/src/scratch_connection_checker.js +29 -0
- package/src/scratch_continuous_category.js +80 -0
- package/src/scratch_continuous_toolbox.js +78 -0
- package/src/scratch_dragger.js +142 -0
- package/src/scratch_variable_map.js +25 -0
- package/src/scratch_variable_model.js +24 -0
- package/src/shadows.js +61 -0
- package/src/status_indicator_label.js +186 -0
- package/src/status_indicator_label_flyout_inflater.js +42 -0
- package/src/variables.js +355 -0
- package/temp-use-blockly-v12-rc.sh +26 -0
- package/tsconfig.json +13 -0
- package/blockly_compressed_horizontal.js +0 -2255
- package/blockly_compressed_vertical.js +0 -2283
- package/blockly_uncompressed_horizontal.js +0 -1210
- package/blockly_uncompressed_vertical.js +0 -1210
- package/blocks_common/colour.js +0 -61
- package/blocks_common/math.js +0 -159
- package/blocks_common/matrix.js +0 -54
- package/blocks_common/note.js +0 -58
- package/blocks_common/text.js +0 -57
- package/blocks_compressed.js +0 -36
- package/blocks_compressed_horizontal.js +0 -67
- package/blocks_compressed_vertical.js +0 -208
- package/blocks_horizontal/control.js +0 -212
- package/blocks_horizontal/default_toolbox.js +0 -139
- package/blocks_horizontal/event.js +0 -190
- package/blocks_horizontal/wedo.js +0 -325
- package/blocks_vertical/control.js +0 -532
- package/blocks_vertical/data.js +0 -666
- package/blocks_vertical/default_toolbox.js +0 -564
- package/blocks_vertical/event.js +0 -329
- package/blocks_vertical/extensions.js +0 -294
- package/blocks_vertical/looks.js +0 -591
- package/blocks_vertical/motion.js +0 -587
- package/blocks_vertical/operators.js +0 -470
- package/blocks_vertical/procedures.js +0 -973
- package/blocks_vertical/sensing.js +0 -539
- package/blocks_vertical/sound.js +0 -246
- package/blocks_vertical/vertical_extensions.js +0 -266
- package/build/gen_blocks.js +0 -1
- package/build/test_expect.js +0 -1
- package/build/test_input.js +0 -1
- package/build.py +0 -636
- package/cleanup.sh +0 -101
- package/core/block.js +0 -1837
- package/core/block_animations.js +0 -107
- package/core/block_drag_surface.js +0 -299
- package/core/block_dragger.js +0 -421
- package/core/block_events.js +0 -531
- package/core/block_render_svg_horizontal.js +0 -890
- package/core/block_render_svg_vertical.js +0 -1732
- package/core/block_svg.js +0 -1316
- package/core/blockly.js +0 -622
- package/core/blocks.js +0 -37
- package/core/bubble.js +0 -664
- package/core/bubble_dragger.js +0 -285
- package/core/colours.js +0 -160
- package/core/comment.js +0 -293
- package/core/comment_events.js +0 -539
- package/core/connection.js +0 -766
- package/core/connection_db.js +0 -300
- package/core/constants.js +0 -387
- package/core/contextmenu.js +0 -519
- package/core/css.js +0 -1351
- package/core/data_category.js +0 -490
- package/core/dragged_connection_manager.js +0 -260
- package/core/dropdowndiv.js +0 -408
- package/core/events.js +0 -429
- package/core/events_abstract.js +0 -113
- package/core/extensions.js +0 -450
- package/core/field.js +0 -807
- package/core/field_angle.js +0 -398
- package/core/field_checkbox.js +0 -133
- package/core/field_colour.js +0 -253
- package/core/field_colour_slider.js +0 -387
- package/core/field_date.js +0 -353
- package/core/field_dropdown.js +0 -483
- package/core/field_iconmenu.js +0 -309
- package/core/field_image.js +0 -193
- package/core/field_label.js +0 -136
- package/core/field_label_serializable.js +0 -125
- package/core/field_matrix.js +0 -566
- package/core/field_note.js +0 -850
- package/core/field_number.js +0 -366
- package/core/field_numberdropdown.js +0 -77
- package/core/field_textdropdown.js +0 -164
- package/core/field_textinput.js +0 -675
- package/core/field_textinput_removable.js +0 -105
- package/core/field_variable.js +0 -385
- package/core/field_variable_getter.js +0 -185
- package/core/field_vertical_separator.js +0 -161
- package/core/flyout_base.js +0 -923
- package/core/flyout_button.js +0 -322
- package/core/flyout_dragger.js +0 -83
- package/core/flyout_extension_category_header.js +0 -159
- package/core/flyout_horizontal.js +0 -475
- package/core/flyout_vertical.js +0 -770
- package/core/generator.js +0 -426
- package/core/gesture.js +0 -1011
- package/core/grid.js +0 -227
- package/core/icon.js +0 -205
- package/core/inject.js +0 -491
- package/core/input.js +0 -285
- package/core/insertion_marker_manager.js +0 -678
- package/core/msg.js +0 -62
- package/core/mutator.js +0 -426
- package/core/names.js +0 -198
- package/core/options.js +0 -244
- package/core/procedures.js +0 -577
- package/core/rendered_connection.js +0 -417
- package/core/scratch_block_comment.js +0 -653
- package/core/scratch_blocks_utils.js +0 -244
- package/core/scratch_bubble.js +0 -696
- package/core/scratch_events.js +0 -131
- package/core/scratch_msgs.js +0 -85
- package/core/scrollbar.js +0 -875
- package/core/toolbox.js +0 -801
- package/core/tooltip.js +0 -337
- package/core/touch.js +0 -226
- package/core/trashcan.js +0 -343
- package/core/ui_events.js +0 -91
- package/core/ui_menu_utils.js +0 -68
- package/core/utils.js +0 -948
- package/core/variable_events.js +0 -259
- package/core/variable_map.js +0 -415
- package/core/variable_model.js +0 -116
- package/core/variables.js +0 -674
- package/core/warning.js +0 -199
- package/core/widgetdiv.js +0 -344
- package/core/workspace.js +0 -673
- package/core/workspace_audio.js +0 -170
- package/core/workspace_comment.js +0 -432
- package/core/workspace_comment_render_svg.js +0 -723
- package/core/workspace_comment_svg.js +0 -611
- package/core/workspace_drag_surface_svg.js +0 -195
- package/core/workspace_dragger.js +0 -132
- package/core/workspace_svg.js +0 -2267
- package/core/xml.js +0 -919
- package/core/zoom_controls.js +0 -301
- package/dist/horizontal.js +0 -222
- package/dist/vertical.js +0 -222
- package/dist/web/horizontal.js +0 -232
- package/dist/web/vertical.js +0 -232
- package/local_build.sh +0 -70
- package/pack/scratch-blocks-1.1.206.tgz +0 -0
- package/pull_from_blockly.sh +0 -151
- package/shim/blockly_compressed_horizontal-blocks_compressed.js +0 -1
- package/shim/blockly_compressed_horizontal.Blockly.js +0 -1
- package/shim/blockly_compressed_horizontal.goog.js +0 -1
- package/shim/blockly_compressed_horizontal.js +0 -1
- package/shim/blockly_compressed_vertical-blocks_compressed.js +0 -1
- package/shim/blockly_compressed_vertical.Blockly.js +0 -1
- package/shim/blockly_compressed_vertical.goog.js +0 -1
- package/shim/blockly_compressed_vertical.js +0 -1
- package/shim/blocks_compressed_horizontal-blockly_compressed_horizontal-messages.js +0 -1
- package/shim/blocks_compressed_horizontal.js +0 -1
- package/shim/blocks_compressed_vertical-blockly_compressed_vertical-messages.js +0 -1
- package/shim/blocks_compressed_vertical.js +0 -1
- package/shim/gh-pages.js +0 -1
- package/shim/horizontal.js +0 -1
- package/shim/index.js +0 -17
- package/shim/vertical.js +0 -1
- /package/media/{comment-arrow-down.svg → foldout-icon.svg} +0 -0
|
@@ -0,0 +1,968 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2011 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Flyout tray containing blocks which may be created.
|
|
9
|
+
*
|
|
10
|
+
* @class
|
|
11
|
+
*/
|
|
12
|
+
// Former goog.module ID: Blockly.Flyout
|
|
13
|
+
|
|
14
|
+
import type {Abstract as AbstractEvent} from './events/events_abstract.js';
|
|
15
|
+
import {BlockSvg} from './block_svg.js';
|
|
16
|
+
import * as browserEvents from './browser_events.js';
|
|
17
|
+
import {ComponentManager} from './component_manager.js';
|
|
18
|
+
import {DeleteArea} from './delete_area.js';
|
|
19
|
+
import * as eventUtils from './events/utils.js';
|
|
20
|
+
import {FlyoutMetricsManager} from './flyout_metrics_manager.js';
|
|
21
|
+
import type {IFlyout} from './interfaces/i_flyout.js';
|
|
22
|
+
import type {IFlyoutInflater} from './interfaces/i_flyout_inflater.js';
|
|
23
|
+
import type {IBoundedElement} from './interfaces/i_bounded_element.js';
|
|
24
|
+
import type {Options} from './options.js';
|
|
25
|
+
import {ScrollbarPair} from './scrollbar_pair.js';
|
|
26
|
+
import * as blocks from './serialization/blocks.js';
|
|
27
|
+
import {Coordinate} from './utils/coordinate.js';
|
|
28
|
+
import * as dom from './utils/dom.js';
|
|
29
|
+
import * as idGenerator from './utils/idgenerator.js';
|
|
30
|
+
import {Svg} from './utils/svg.js';
|
|
31
|
+
import * as toolbox from './utils/toolbox.js';
|
|
32
|
+
import * as Variables from './variables.js';
|
|
33
|
+
import {WorkspaceSvg} from './workspace_svg.js';
|
|
34
|
+
import * as registry from './registry.js';
|
|
35
|
+
import * as renderManagement from './render_management.js';
|
|
36
|
+
import {IAutoHideable} from './interfaces/i_autohideable.js';
|
|
37
|
+
import {FlyoutSeparator, SeparatorAxis} from './flyout_separator.js';
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Class for a flyout.
|
|
41
|
+
*/
|
|
42
|
+
export abstract class Flyout
|
|
43
|
+
extends DeleteArea
|
|
44
|
+
implements IAutoHideable, IFlyout
|
|
45
|
+
{
|
|
46
|
+
/**
|
|
47
|
+
* Position the flyout.
|
|
48
|
+
*/
|
|
49
|
+
abstract position(): void;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Determine if a drag delta is toward the workspace, based on the position
|
|
53
|
+
* and orientation of the flyout. This is used in determineDragIntention_ to
|
|
54
|
+
* determine if a new block should be created or if the flyout should scroll.
|
|
55
|
+
*
|
|
56
|
+
* @param currentDragDeltaXY How far the pointer has
|
|
57
|
+
* moved from the position at mouse down, in pixel units.
|
|
58
|
+
* @returns True if the drag is toward the workspace.
|
|
59
|
+
*/
|
|
60
|
+
abstract isDragTowardWorkspace(currentDragDeltaXY: Coordinate): boolean;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Sets the translation of the flyout to match the scrollbars.
|
|
64
|
+
*
|
|
65
|
+
* @param xyRatio Contains a y property which is a float
|
|
66
|
+
* between 0 and 1 specifying the degree of scrolling and a
|
|
67
|
+
* similar x property.
|
|
68
|
+
*/
|
|
69
|
+
protected abstract setMetrics_(xyRatio: {x?: number; y?: number}): void;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Lay out the elements in the flyout.
|
|
73
|
+
*
|
|
74
|
+
* @param contents The flyout elements to lay out.
|
|
75
|
+
*/
|
|
76
|
+
protected abstract layout_(contents: FlyoutItem[]): void;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Scroll the flyout.
|
|
80
|
+
*
|
|
81
|
+
* @param e Mouse wheel scroll event.
|
|
82
|
+
*/
|
|
83
|
+
protected abstract wheel_(e: WheelEvent): void;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Compute bounds of flyout.
|
|
87
|
+
* For RTL: Lay out the elements right-aligned.
|
|
88
|
+
*/
|
|
89
|
+
protected abstract reflowInternal_(): void;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Calculates the x coordinate for the flyout position.
|
|
93
|
+
*
|
|
94
|
+
* @returns X coordinate.
|
|
95
|
+
*/
|
|
96
|
+
abstract getX(): number;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Calculates the y coordinate for the flyout position.
|
|
100
|
+
*
|
|
101
|
+
* @returns Y coordinate.
|
|
102
|
+
*/
|
|
103
|
+
abstract getY(): number;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Scroll the flyout to the beginning of its contents.
|
|
107
|
+
*/
|
|
108
|
+
abstract scrollToStart(): void;
|
|
109
|
+
|
|
110
|
+
protected workspace_: WorkspaceSvg;
|
|
111
|
+
RTL: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Whether the flyout should be laid out horizontally or not.
|
|
114
|
+
*
|
|
115
|
+
* @internal
|
|
116
|
+
*/
|
|
117
|
+
horizontalLayout = false;
|
|
118
|
+
protected toolboxPosition_: number;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Array holding info needed to unbind events.
|
|
122
|
+
* Used for disposing.
|
|
123
|
+
* Ex: [[node, name, func], [node, name, func]].
|
|
124
|
+
*/
|
|
125
|
+
private boundEvents: browserEvents.Data[] = [];
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Function that will be registered as a change listener on the workspace
|
|
129
|
+
* to reflow when elements in the flyout workspace change.
|
|
130
|
+
*/
|
|
131
|
+
private reflowWrapper: ((e: AbstractEvent) => void) | null = null;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* List of flyout elements.
|
|
135
|
+
*/
|
|
136
|
+
protected contents: FlyoutItem[] = [];
|
|
137
|
+
|
|
138
|
+
protected readonly tabWidth_: number;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* The target workspace.
|
|
142
|
+
*
|
|
143
|
+
* @internal
|
|
144
|
+
*/
|
|
145
|
+
targetWorkspace!: WorkspaceSvg;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Does the flyout automatically close when a block is created?
|
|
149
|
+
*/
|
|
150
|
+
autoClose = true;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Whether the flyout is visible.
|
|
154
|
+
*/
|
|
155
|
+
private isVisible_ = false;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Whether the workspace containing this flyout is visible.
|
|
159
|
+
*/
|
|
160
|
+
private containerVisible = true;
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Corner radius of the flyout background.
|
|
164
|
+
*/
|
|
165
|
+
readonly CORNER_RADIUS: number = 8;
|
|
166
|
+
readonly MARGIN: number;
|
|
167
|
+
readonly GAP_X: number;
|
|
168
|
+
readonly GAP_Y: number;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Top/bottom padding between scrollbar and edge of flyout background.
|
|
172
|
+
*/
|
|
173
|
+
readonly SCROLLBAR_MARGIN: number = 2.5;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Width of flyout.
|
|
177
|
+
*/
|
|
178
|
+
protected width_ = 0;
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Height of flyout.
|
|
182
|
+
*/
|
|
183
|
+
protected height_ = 0;
|
|
184
|
+
// clang-format off
|
|
185
|
+
/**
|
|
186
|
+
* Range of a drag angle from a flyout considered "dragging toward
|
|
187
|
+
* workspace". Drags that are within the bounds of this many degrees from
|
|
188
|
+
* the orthogonal line to the flyout edge are considered to be "drags toward
|
|
189
|
+
* the workspace".
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
*
|
|
193
|
+
* ```
|
|
194
|
+
* Flyout Edge Workspace
|
|
195
|
+
* [block] / <-within this angle, drags "toward workspace" |
|
|
196
|
+
* [block] ---- orthogonal to flyout boundary ---- |
|
|
197
|
+
* [block] \ |
|
|
198
|
+
* ```
|
|
199
|
+
*
|
|
200
|
+
* The angle is given in degrees from the orthogonal.
|
|
201
|
+
*
|
|
202
|
+
* This is used to know when to create a new block and when to scroll the
|
|
203
|
+
* flyout. Setting it to 360 means that all drags create a new block.
|
|
204
|
+
*/
|
|
205
|
+
// clang-format on
|
|
206
|
+
protected dragAngleRange_ = 70;
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* The path around the background of the flyout, which will be filled with a
|
|
210
|
+
* background colour.
|
|
211
|
+
*/
|
|
212
|
+
protected svgBackground_: SVGPathElement | null = null;
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* The root SVG group for the button or label.
|
|
216
|
+
*/
|
|
217
|
+
protected svgGroup_: SVGGElement | null = null;
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Map from flyout content type to the corresponding inflater class
|
|
221
|
+
* responsible for creating concrete instances of the content type.
|
|
222
|
+
*/
|
|
223
|
+
protected inflaters = new Map<string, IFlyoutInflater>();
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* @param workspaceOptions Dictionary of options for the
|
|
227
|
+
* workspace.
|
|
228
|
+
*/
|
|
229
|
+
constructor(workspaceOptions: Options) {
|
|
230
|
+
super();
|
|
231
|
+
workspaceOptions.setMetrics = this.setMetrics_.bind(this);
|
|
232
|
+
|
|
233
|
+
this.workspace_ = new WorkspaceSvg(workspaceOptions);
|
|
234
|
+
this.workspace_.setMetricsManager(
|
|
235
|
+
new FlyoutMetricsManager(this.workspace_, this),
|
|
236
|
+
);
|
|
237
|
+
|
|
238
|
+
this.workspace_.internalIsFlyout = true;
|
|
239
|
+
// Keep the workspace visibility consistent with the flyout's visibility.
|
|
240
|
+
this.workspace_.setVisible(this.isVisible_);
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* The unique id for this component that is used to register with the
|
|
244
|
+
* ComponentManager.
|
|
245
|
+
*/
|
|
246
|
+
this.id = idGenerator.genUid();
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Is RTL vs LTR.
|
|
250
|
+
*/
|
|
251
|
+
this.RTL = !!workspaceOptions.RTL;
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Position of the toolbox and flyout relative to the workspace.
|
|
255
|
+
*/
|
|
256
|
+
this.toolboxPosition_ = workspaceOptions.toolboxPosition;
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Width of output tab.
|
|
260
|
+
*/
|
|
261
|
+
this.tabWidth_ = this.workspace_.getRenderer().getConstants().TAB_WIDTH;
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Margin around the edges of the elements in the flyout.
|
|
265
|
+
*/
|
|
266
|
+
this.MARGIN = this.CORNER_RADIUS;
|
|
267
|
+
|
|
268
|
+
// TODO: Move GAP_X and GAP_Y to their appropriate files.
|
|
269
|
+
/**
|
|
270
|
+
* Gap between items in horizontal flyouts. Can be overridden with the "sep"
|
|
271
|
+
* element.
|
|
272
|
+
*/
|
|
273
|
+
this.GAP_X = this.MARGIN * 3;
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Gap between items in vertical flyouts. Can be overridden with the "sep"
|
|
277
|
+
* element.
|
|
278
|
+
*/
|
|
279
|
+
this.GAP_Y = this.MARGIN * 3;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Creates the flyout's DOM. Only needs to be called once. The flyout can
|
|
284
|
+
* either exist as its own SVG element or be a g element nested inside a
|
|
285
|
+
* separate SVG element.
|
|
286
|
+
*
|
|
287
|
+
* @param tagName The type of tag to
|
|
288
|
+
* put the flyout in. This should be <svg> or <g>.
|
|
289
|
+
* @returns The flyout's SVG group.
|
|
290
|
+
*/
|
|
291
|
+
createDom(
|
|
292
|
+
tagName: string | Svg<SVGSVGElement> | Svg<SVGGElement>,
|
|
293
|
+
): SVGElement {
|
|
294
|
+
/*
|
|
295
|
+
<svg | g>
|
|
296
|
+
<path class="blocklyFlyoutBackground"/>
|
|
297
|
+
<g class="blocklyFlyout"></g>
|
|
298
|
+
</ svg | g>
|
|
299
|
+
*/
|
|
300
|
+
// Setting style to display:none to start. The toolbox and flyout
|
|
301
|
+
// hide/show code will set up proper visibility and size later.
|
|
302
|
+
this.svgGroup_ = dom.createSvgElement(tagName, {
|
|
303
|
+
'class': 'blocklyFlyout',
|
|
304
|
+
});
|
|
305
|
+
this.svgGroup_.style.display = 'none';
|
|
306
|
+
this.svgBackground_ = dom.createSvgElement(
|
|
307
|
+
Svg.PATH,
|
|
308
|
+
{'class': 'blocklyFlyoutBackground'},
|
|
309
|
+
this.svgGroup_,
|
|
310
|
+
);
|
|
311
|
+
this.svgGroup_.appendChild(this.workspace_.createDom());
|
|
312
|
+
this.workspace_
|
|
313
|
+
.getThemeManager()
|
|
314
|
+
.subscribe(this.svgBackground_, 'flyoutBackgroundColour', 'fill');
|
|
315
|
+
this.workspace_
|
|
316
|
+
.getThemeManager()
|
|
317
|
+
.subscribe(this.svgBackground_, 'flyoutOpacity', 'fill-opacity');
|
|
318
|
+
return this.svgGroup_;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Initializes the flyout.
|
|
323
|
+
*
|
|
324
|
+
* @param targetWorkspace The workspace in which to
|
|
325
|
+
* create new blocks.
|
|
326
|
+
*/
|
|
327
|
+
init(targetWorkspace: WorkspaceSvg) {
|
|
328
|
+
this.targetWorkspace = targetWorkspace;
|
|
329
|
+
this.workspace_.targetWorkspace = targetWorkspace;
|
|
330
|
+
|
|
331
|
+
this.workspace_.scrollbar = new ScrollbarPair(
|
|
332
|
+
this.workspace_,
|
|
333
|
+
this.horizontalLayout,
|
|
334
|
+
!this.horizontalLayout,
|
|
335
|
+
'blocklyFlyoutScrollbar',
|
|
336
|
+
this.SCROLLBAR_MARGIN,
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
this.hide();
|
|
340
|
+
|
|
341
|
+
this.boundEvents.push(
|
|
342
|
+
browserEvents.conditionalBind(
|
|
343
|
+
this.svgGroup_ as SVGGElement,
|
|
344
|
+
'wheel',
|
|
345
|
+
this,
|
|
346
|
+
this.wheel_,
|
|
347
|
+
),
|
|
348
|
+
);
|
|
349
|
+
|
|
350
|
+
// Dragging the flyout up and down.
|
|
351
|
+
this.boundEvents.push(
|
|
352
|
+
browserEvents.conditionalBind(
|
|
353
|
+
this.svgBackground_ as SVGPathElement,
|
|
354
|
+
'pointerdown',
|
|
355
|
+
this,
|
|
356
|
+
this.onMouseDown,
|
|
357
|
+
),
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
// A flyout connected to a workspace doesn't have its own current gesture.
|
|
361
|
+
this.workspace_.getGesture = this.targetWorkspace.getGesture.bind(
|
|
362
|
+
this.targetWorkspace,
|
|
363
|
+
);
|
|
364
|
+
|
|
365
|
+
// Get variables from the main workspace rather than the target workspace.
|
|
366
|
+
this.workspace_.setVariableMap(this.targetWorkspace.getVariableMap());
|
|
367
|
+
|
|
368
|
+
this.workspace_.createPotentialVariableMap();
|
|
369
|
+
|
|
370
|
+
targetWorkspace.getComponentManager().addComponent({
|
|
371
|
+
component: this,
|
|
372
|
+
weight: 1,
|
|
373
|
+
capabilities: [
|
|
374
|
+
ComponentManager.Capability.AUTOHIDEABLE,
|
|
375
|
+
ComponentManager.Capability.DELETE_AREA,
|
|
376
|
+
ComponentManager.Capability.DRAG_TARGET,
|
|
377
|
+
],
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Dispose of this flyout.
|
|
383
|
+
* Unlink from all DOM elements to prevent memory leaks.
|
|
384
|
+
*/
|
|
385
|
+
dispose() {
|
|
386
|
+
this.hide();
|
|
387
|
+
this.targetWorkspace.getComponentManager().removeComponent(this.id);
|
|
388
|
+
for (const event of this.boundEvents) {
|
|
389
|
+
browserEvents.unbind(event);
|
|
390
|
+
}
|
|
391
|
+
this.boundEvents.length = 0;
|
|
392
|
+
if (this.workspace_) {
|
|
393
|
+
this.workspace_.getThemeManager().unsubscribe(this.svgBackground_!);
|
|
394
|
+
this.workspace_.dispose();
|
|
395
|
+
}
|
|
396
|
+
if (this.svgGroup_) {
|
|
397
|
+
dom.removeNode(this.svgGroup_);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Get the width of the flyout.
|
|
403
|
+
*
|
|
404
|
+
* @returns The width of the flyout.
|
|
405
|
+
*/
|
|
406
|
+
getWidth(): number {
|
|
407
|
+
return this.width_;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Get the height of the flyout.
|
|
412
|
+
*
|
|
413
|
+
* @returns The width of the flyout.
|
|
414
|
+
*/
|
|
415
|
+
getHeight(): number {
|
|
416
|
+
return this.height_;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Get the scale (zoom level) of the flyout. By default,
|
|
421
|
+
* this matches the target workspace scale, but this can be overridden.
|
|
422
|
+
*
|
|
423
|
+
* @returns Flyout workspace scale.
|
|
424
|
+
*/
|
|
425
|
+
getFlyoutScale(): number {
|
|
426
|
+
return this.targetWorkspace.scale;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Get the workspace inside the flyout.
|
|
431
|
+
*
|
|
432
|
+
* @returns The workspace inside the flyout.
|
|
433
|
+
*/
|
|
434
|
+
getWorkspace(): WorkspaceSvg {
|
|
435
|
+
return this.workspace_;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* Sets whether this flyout automatically closes when blocks are dragged out,
|
|
440
|
+
* the workspace is clicked, etc, or not.
|
|
441
|
+
*/
|
|
442
|
+
setAutoClose(autoClose: boolean) {
|
|
443
|
+
this.autoClose = autoClose;
|
|
444
|
+
this.targetWorkspace.recordDragTargets();
|
|
445
|
+
this.targetWorkspace.resizeContents();
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/** Automatically hides the flyout if it is an autoclosing flyout. */
|
|
449
|
+
autoHide(onlyClosePopups: boolean): void {
|
|
450
|
+
if (
|
|
451
|
+
!onlyClosePopups &&
|
|
452
|
+
this.targetWorkspace.getFlyout(true) === this &&
|
|
453
|
+
this.autoClose
|
|
454
|
+
)
|
|
455
|
+
this.hide();
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* Get the target workspace inside the flyout.
|
|
460
|
+
*
|
|
461
|
+
* @returns The target workspace inside the flyout.
|
|
462
|
+
*/
|
|
463
|
+
getTargetWorkspace(): WorkspaceSvg {
|
|
464
|
+
return this.targetWorkspace;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Is the flyout visible?
|
|
469
|
+
*
|
|
470
|
+
* @returns True if visible.
|
|
471
|
+
*/
|
|
472
|
+
isVisible(): boolean {
|
|
473
|
+
return this.isVisible_;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Set whether the flyout is visible. A value of true does not necessarily
|
|
478
|
+
* mean that the flyout is shown. It could be hidden because its container is
|
|
479
|
+
* hidden.
|
|
480
|
+
*
|
|
481
|
+
* @param visible True if visible.
|
|
482
|
+
*/
|
|
483
|
+
setVisible(visible: boolean) {
|
|
484
|
+
const visibilityChanged = visible !== this.isVisible();
|
|
485
|
+
|
|
486
|
+
this.isVisible_ = visible;
|
|
487
|
+
if (visibilityChanged) {
|
|
488
|
+
if (!this.autoClose) {
|
|
489
|
+
// Auto-close flyouts are ignored as drag targets, so only non
|
|
490
|
+
// auto-close flyouts need to have their drag target updated.
|
|
491
|
+
this.targetWorkspace.recordDragTargets();
|
|
492
|
+
}
|
|
493
|
+
this.updateDisplay();
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/**
|
|
498
|
+
* Set whether this flyout's container is visible.
|
|
499
|
+
*
|
|
500
|
+
* @param visible Whether the container is visible.
|
|
501
|
+
*/
|
|
502
|
+
setContainerVisible(visible: boolean) {
|
|
503
|
+
const visibilityChanged = visible !== this.containerVisible;
|
|
504
|
+
this.containerVisible = visible;
|
|
505
|
+
if (visibilityChanged) {
|
|
506
|
+
this.updateDisplay();
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Get the list of elements of the current flyout.
|
|
512
|
+
*
|
|
513
|
+
* @returns The array of flyout elements.
|
|
514
|
+
*/
|
|
515
|
+
getContents(): FlyoutItem[] {
|
|
516
|
+
return this.contents;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
/**
|
|
520
|
+
* Store the list of elements on the flyout.
|
|
521
|
+
*
|
|
522
|
+
* @param contents - The array of items for the flyout.
|
|
523
|
+
*/
|
|
524
|
+
setContents(contents: FlyoutItem[]): void {
|
|
525
|
+
this.contents = contents;
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Update the display property of the flyout based whether it thinks it should
|
|
529
|
+
* be visible and whether its containing workspace is visible.
|
|
530
|
+
*/
|
|
531
|
+
private updateDisplay() {
|
|
532
|
+
let show = true;
|
|
533
|
+
if (!this.containerVisible) {
|
|
534
|
+
show = false;
|
|
535
|
+
} else {
|
|
536
|
+
show = this.isVisible();
|
|
537
|
+
}
|
|
538
|
+
if (this.svgGroup_) {
|
|
539
|
+
this.svgGroup_.style.display = show ? 'block' : 'none';
|
|
540
|
+
}
|
|
541
|
+
// Update the scrollbar's visibility too since it should mimic the
|
|
542
|
+
// flyout's visibility.
|
|
543
|
+
this.workspace_.scrollbar?.setContainerVisible(show);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
* Update the view based on coordinates calculated in position().
|
|
548
|
+
*
|
|
549
|
+
* @param width The computed width of the flyout's SVG group
|
|
550
|
+
* @param height The computed height of the flyout's SVG group.
|
|
551
|
+
* @param x The computed x origin of the flyout's SVG group.
|
|
552
|
+
* @param y The computed y origin of the flyout's SVG group.
|
|
553
|
+
*/
|
|
554
|
+
protected positionAt_(width: number, height: number, x: number, y: number) {
|
|
555
|
+
this.svgGroup_?.setAttribute('width', `${width}`);
|
|
556
|
+
this.svgGroup_?.setAttribute('height', `${height}`);
|
|
557
|
+
this.workspace_.setCachedParentSvgSize(width, height);
|
|
558
|
+
|
|
559
|
+
if (this.svgGroup_) {
|
|
560
|
+
const transform = 'translate(' + x + 'px,' + y + 'px)';
|
|
561
|
+
dom.setCssTransform(this.svgGroup_, transform);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
// Update the scrollbar (if one exists).
|
|
565
|
+
const scrollbar = this.workspace_.scrollbar;
|
|
566
|
+
if (scrollbar) {
|
|
567
|
+
// Set the scrollbars origin to be the top left of the flyout.
|
|
568
|
+
scrollbar.setOrigin(x, y);
|
|
569
|
+
scrollbar.resize();
|
|
570
|
+
// If origin changed and metrics haven't changed enough to trigger
|
|
571
|
+
// reposition in resize, we need to call setPosition. See issue #4692.
|
|
572
|
+
if (scrollbar.hScroll) {
|
|
573
|
+
scrollbar.hScroll.setPosition(
|
|
574
|
+
scrollbar.hScroll.position.x,
|
|
575
|
+
scrollbar.hScroll.position.y,
|
|
576
|
+
);
|
|
577
|
+
}
|
|
578
|
+
if (scrollbar.vScroll) {
|
|
579
|
+
scrollbar.vScroll.setPosition(
|
|
580
|
+
scrollbar.vScroll.position.x,
|
|
581
|
+
scrollbar.vScroll.position.y,
|
|
582
|
+
);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* Hide and empty the flyout.
|
|
589
|
+
*/
|
|
590
|
+
hide() {
|
|
591
|
+
if (!this.isVisible()) {
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
this.setVisible(false);
|
|
595
|
+
if (this.reflowWrapper) {
|
|
596
|
+
this.workspace_.removeChangeListener(this.reflowWrapper);
|
|
597
|
+
this.reflowWrapper = null;
|
|
598
|
+
}
|
|
599
|
+
// Do NOT delete the flyout contents here. Wait until Flyout.show.
|
|
600
|
+
// https://neil.fraser.name/news/2014/08/09/
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
/**
|
|
604
|
+
* Show and populate the flyout.
|
|
605
|
+
*
|
|
606
|
+
* @param flyoutDef Contents to display
|
|
607
|
+
* in the flyout. This is either an array of Nodes, a NodeList, a
|
|
608
|
+
* toolbox definition, or a string with the name of the dynamic category.
|
|
609
|
+
*/
|
|
610
|
+
show(flyoutDef: toolbox.FlyoutDefinition | string) {
|
|
611
|
+
this.workspace_.setResizesEnabled(false);
|
|
612
|
+
this.hide();
|
|
613
|
+
this.clearOldBlocks();
|
|
614
|
+
|
|
615
|
+
// Handle dynamic categories, represented by a name instead of a list.
|
|
616
|
+
if (typeof flyoutDef === 'string') {
|
|
617
|
+
flyoutDef = this.getDynamicCategoryContents(flyoutDef);
|
|
618
|
+
}
|
|
619
|
+
this.setVisible(true);
|
|
620
|
+
|
|
621
|
+
// Parse the Array, Node or NodeList into a a list of flyout items.
|
|
622
|
+
const parsedContent = toolbox.convertFlyoutDefToJsonArray(flyoutDef);
|
|
623
|
+
const flyoutInfo = this.createFlyoutInfo(parsedContent);
|
|
624
|
+
|
|
625
|
+
renderManagement.triggerQueuedRenders(this.workspace_);
|
|
626
|
+
|
|
627
|
+
this.setContents(flyoutInfo);
|
|
628
|
+
|
|
629
|
+
this.layout_(flyoutInfo);
|
|
630
|
+
|
|
631
|
+
if (this.horizontalLayout) {
|
|
632
|
+
this.height_ = 0;
|
|
633
|
+
} else {
|
|
634
|
+
this.width_ = 0;
|
|
635
|
+
}
|
|
636
|
+
this.workspace_.setResizesEnabled(true);
|
|
637
|
+
this.reflow();
|
|
638
|
+
|
|
639
|
+
// Listen for block change events, and reflow the flyout in response. This
|
|
640
|
+
// accommodates e.g. resizing a non-autoclosing flyout in response to the
|
|
641
|
+
// user typing long strings into fields on the blocks in the flyout.
|
|
642
|
+
this.reflowWrapper = (event) => {
|
|
643
|
+
if (
|
|
644
|
+
event.type === eventUtils.BLOCK_CHANGE ||
|
|
645
|
+
event.type === eventUtils.BLOCK_FIELD_INTERMEDIATE_CHANGE
|
|
646
|
+
) {
|
|
647
|
+
this.reflow();
|
|
648
|
+
}
|
|
649
|
+
};
|
|
650
|
+
this.workspace_.addChangeListener(this.reflowWrapper);
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
/**
|
|
654
|
+
* Create the contents array and gaps array necessary to create the layout for
|
|
655
|
+
* the flyout.
|
|
656
|
+
*
|
|
657
|
+
* @param parsedContent The array
|
|
658
|
+
* of objects to show in the flyout.
|
|
659
|
+
* @returns The list of contents needed to lay out the flyout.
|
|
660
|
+
*/
|
|
661
|
+
private createFlyoutInfo(
|
|
662
|
+
parsedContent: toolbox.FlyoutItemInfoArray,
|
|
663
|
+
): FlyoutItem[] {
|
|
664
|
+
const contents: FlyoutItem[] = [];
|
|
665
|
+
const defaultGap = this.horizontalLayout ? this.GAP_X : this.GAP_Y;
|
|
666
|
+
for (const info of parsedContent) {
|
|
667
|
+
if ('custom' in info) {
|
|
668
|
+
const customInfo = info as toolbox.DynamicCategoryInfo;
|
|
669
|
+
const categoryName = customInfo['custom'];
|
|
670
|
+
const flyoutDef = this.getDynamicCategoryContents(categoryName);
|
|
671
|
+
const parsedDynamicContent =
|
|
672
|
+
toolbox.convertFlyoutDefToJsonArray(flyoutDef);
|
|
673
|
+
contents.push(...this.createFlyoutInfo(parsedDynamicContent));
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
const type = info['kind'].toLowerCase();
|
|
677
|
+
const inflater = this.getInflaterForType(type);
|
|
678
|
+
if (inflater) {
|
|
679
|
+
const element = inflater.load(info, this.getWorkspace());
|
|
680
|
+
contents.push({
|
|
681
|
+
type,
|
|
682
|
+
element,
|
|
683
|
+
});
|
|
684
|
+
const gap = inflater.gapForElement(info, defaultGap);
|
|
685
|
+
if (gap) {
|
|
686
|
+
contents.push({
|
|
687
|
+
type: 'sep',
|
|
688
|
+
element: new FlyoutSeparator(
|
|
689
|
+
gap,
|
|
690
|
+
this.horizontalLayout ? SeparatorAxis.X : SeparatorAxis.Y,
|
|
691
|
+
),
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
return this.normalizeSeparators(contents);
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
/**
|
|
701
|
+
* Updates and returns the provided list of flyout contents to flatten
|
|
702
|
+
* separators as needed.
|
|
703
|
+
*
|
|
704
|
+
* When multiple separators occur one after another, the value of the last one
|
|
705
|
+
* takes precedence and the earlier separators in the group are removed.
|
|
706
|
+
*
|
|
707
|
+
* @param contents The list of flyout contents to flatten separators in.
|
|
708
|
+
* @returns An updated list of flyout contents with only one separator between
|
|
709
|
+
* each non-separator item.
|
|
710
|
+
*/
|
|
711
|
+
protected normalizeSeparators(contents: FlyoutItem[]): FlyoutItem[] {
|
|
712
|
+
for (let i = contents.length - 1; i > 0; i--) {
|
|
713
|
+
const elementType = contents[i].type.toLowerCase();
|
|
714
|
+
const previousElementType = contents[i - 1].type.toLowerCase();
|
|
715
|
+
if (elementType === 'sep' && previousElementType === 'sep') {
|
|
716
|
+
// Remove previousElement from the array, shifting the current element
|
|
717
|
+
// forward as a result. This preserves the behavior where explicit
|
|
718
|
+
// separator elements override the value of prior implicit (or explicit)
|
|
719
|
+
// separator elements.
|
|
720
|
+
contents.splice(i - 1, 1);
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
return contents;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
/**
|
|
728
|
+
* Gets the flyout definition for the dynamic category.
|
|
729
|
+
*
|
|
730
|
+
* @param categoryName The name of the dynamic category.
|
|
731
|
+
* @returns The definition of the
|
|
732
|
+
* flyout in one of its many forms.
|
|
733
|
+
*/
|
|
734
|
+
private getDynamicCategoryContents(
|
|
735
|
+
categoryName: string,
|
|
736
|
+
): toolbox.FlyoutDefinition {
|
|
737
|
+
// Look up the correct category generation function and call that to get a
|
|
738
|
+
// valid XML list.
|
|
739
|
+
const fnToApply =
|
|
740
|
+
this.workspace_.targetWorkspace!.getToolboxCategoryCallback(categoryName);
|
|
741
|
+
if (typeof fnToApply !== 'function') {
|
|
742
|
+
throw TypeError(
|
|
743
|
+
"Couldn't find a callback function when opening" +
|
|
744
|
+
' a toolbox category.',
|
|
745
|
+
);
|
|
746
|
+
}
|
|
747
|
+
return fnToApply(this.workspace_.targetWorkspace!);
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
/**
|
|
751
|
+
* Delete elements from a previous showing of the flyout.
|
|
752
|
+
*/
|
|
753
|
+
private clearOldBlocks() {
|
|
754
|
+
this.getContents().forEach((element) => {
|
|
755
|
+
const inflater = this.getInflaterForType(element.type);
|
|
756
|
+
inflater?.disposeElement(element.element);
|
|
757
|
+
});
|
|
758
|
+
|
|
759
|
+
// Clear potential variables from the previous showing.
|
|
760
|
+
this.workspace_.getPotentialVariableMap()?.clear();
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
/**
|
|
764
|
+
* Pointer down on the flyout background. Start a vertical scroll drag.
|
|
765
|
+
*
|
|
766
|
+
* @param e Pointer down event.
|
|
767
|
+
*/
|
|
768
|
+
private onMouseDown(e: PointerEvent) {
|
|
769
|
+
const gesture = this.targetWorkspace.getGesture(e);
|
|
770
|
+
if (gesture) {
|
|
771
|
+
gesture.handleFlyoutStart(e, this);
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
/**
|
|
776
|
+
* Does this flyout allow you to create a new instance of the given block?
|
|
777
|
+
* Used for deciding if a block can be "dragged out of" the flyout.
|
|
778
|
+
*
|
|
779
|
+
* @param block The block to copy from the flyout.
|
|
780
|
+
* @returns True if you can create a new instance of the block, false
|
|
781
|
+
* otherwise.
|
|
782
|
+
* @internal
|
|
783
|
+
*/
|
|
784
|
+
isBlockCreatable(block: BlockSvg): boolean {
|
|
785
|
+
return block.isEnabled();
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
/**
|
|
789
|
+
* Create a copy of this block on the workspace.
|
|
790
|
+
*
|
|
791
|
+
* @param originalBlock The block to copy from the flyout.
|
|
792
|
+
* @returns The newly created block.
|
|
793
|
+
* @throws {Error} if something went wrong with deserialization.
|
|
794
|
+
* @internal
|
|
795
|
+
*/
|
|
796
|
+
createBlock(originalBlock: BlockSvg): BlockSvg {
|
|
797
|
+
let newBlock = null;
|
|
798
|
+
eventUtils.disable();
|
|
799
|
+
const variablesBeforeCreation = this.targetWorkspace.getAllVariables();
|
|
800
|
+
this.targetWorkspace.setResizesEnabled(false);
|
|
801
|
+
try {
|
|
802
|
+
newBlock = this.placeNewBlock(originalBlock);
|
|
803
|
+
} finally {
|
|
804
|
+
eventUtils.enable();
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
// Close the flyout.
|
|
808
|
+
this.targetWorkspace.hideChaff();
|
|
809
|
+
|
|
810
|
+
const newVariables = Variables.getAddedVariables(
|
|
811
|
+
this.targetWorkspace,
|
|
812
|
+
variablesBeforeCreation,
|
|
813
|
+
);
|
|
814
|
+
|
|
815
|
+
if (eventUtils.isEnabled()) {
|
|
816
|
+
eventUtils.setGroup(true);
|
|
817
|
+
// Fire a VarCreate event for each (if any) new variable created.
|
|
818
|
+
for (let i = 0; i < newVariables.length; i++) {
|
|
819
|
+
const thisVariable = newVariables[i];
|
|
820
|
+
eventUtils.fire(
|
|
821
|
+
new (eventUtils.get(eventUtils.VAR_CREATE))(thisVariable),
|
|
822
|
+
);
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
// Block events come after var events, in case they refer to newly created
|
|
826
|
+
// variables.
|
|
827
|
+
eventUtils.fire(new (eventUtils.get(eventUtils.BLOCK_CREATE))(newBlock));
|
|
828
|
+
}
|
|
829
|
+
if (this.autoClose) {
|
|
830
|
+
this.hide();
|
|
831
|
+
}
|
|
832
|
+
return newBlock;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
/**
|
|
836
|
+
* Reflow flyout contents.
|
|
837
|
+
*/
|
|
838
|
+
reflow() {
|
|
839
|
+
if (this.reflowWrapper) {
|
|
840
|
+
this.workspace_.removeChangeListener(this.reflowWrapper);
|
|
841
|
+
}
|
|
842
|
+
this.reflowInternal_();
|
|
843
|
+
if (this.reflowWrapper) {
|
|
844
|
+
this.workspace_.addChangeListener(this.reflowWrapper);
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
/**
|
|
849
|
+
* @returns True if this flyout may be scrolled with a scrollbar or
|
|
850
|
+
* by dragging.
|
|
851
|
+
* @internal
|
|
852
|
+
*/
|
|
853
|
+
isScrollable(): boolean {
|
|
854
|
+
return this.workspace_.scrollbar
|
|
855
|
+
? this.workspace_.scrollbar.isVisible()
|
|
856
|
+
: false;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
/**
|
|
860
|
+
* Copy a block from the flyout to the workspace and position it correctly.
|
|
861
|
+
*
|
|
862
|
+
* @param oldBlock The flyout block to copy.
|
|
863
|
+
* @returns The new block in the main workspace.
|
|
864
|
+
*/
|
|
865
|
+
private placeNewBlock(oldBlock: BlockSvg): BlockSvg {
|
|
866
|
+
const targetWorkspace = this.targetWorkspace;
|
|
867
|
+
const svgRootOld = oldBlock.getSvgRoot();
|
|
868
|
+
if (!svgRootOld) {
|
|
869
|
+
throw Error('oldBlock is not rendered');
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
// Clone the block.
|
|
873
|
+
const json = this.serializeBlock(oldBlock);
|
|
874
|
+
// Normally this resizes leading to weird jumps. Save it for terminateDrag.
|
|
875
|
+
targetWorkspace.setResizesEnabled(false);
|
|
876
|
+
const block = blocks.append(json, targetWorkspace) as BlockSvg;
|
|
877
|
+
|
|
878
|
+
this.positionNewBlock(oldBlock, block);
|
|
879
|
+
|
|
880
|
+
return block;
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
/**
|
|
884
|
+
* Serialize a block to JSON.
|
|
885
|
+
*
|
|
886
|
+
* @param block The block to serialize.
|
|
887
|
+
* @returns A serialized representation of the block.
|
|
888
|
+
*/
|
|
889
|
+
protected serializeBlock(block: BlockSvg): blocks.State {
|
|
890
|
+
return blocks.save(block) as blocks.State;
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
/**
|
|
894
|
+
* Positions a block on the target workspace.
|
|
895
|
+
*
|
|
896
|
+
* @param oldBlock The flyout block being copied.
|
|
897
|
+
* @param block The block to posiiton.
|
|
898
|
+
*/
|
|
899
|
+
private positionNewBlock(oldBlock: BlockSvg, block: BlockSvg) {
|
|
900
|
+
const targetWorkspace = this.targetWorkspace;
|
|
901
|
+
|
|
902
|
+
// The offset in pixels between the main workspace's origin and the upper
|
|
903
|
+
// left corner of the injection div.
|
|
904
|
+
const mainOffsetPixels = targetWorkspace.getOriginOffsetInPixels();
|
|
905
|
+
|
|
906
|
+
// The offset in pixels between the flyout workspace's origin and the upper
|
|
907
|
+
// left corner of the injection div.
|
|
908
|
+
const flyoutOffsetPixels = this.workspace_.getOriginOffsetInPixels();
|
|
909
|
+
|
|
910
|
+
// The position of the old block in flyout workspace coordinates.
|
|
911
|
+
const oldBlockPos = oldBlock.getRelativeToSurfaceXY();
|
|
912
|
+
// The position of the old block in pixels relative to the flyout
|
|
913
|
+
// workspace's origin.
|
|
914
|
+
oldBlockPos.scale(this.workspace_.scale);
|
|
915
|
+
|
|
916
|
+
// The position of the old block in pixels relative to the upper left corner
|
|
917
|
+
// of the injection div.
|
|
918
|
+
const oldBlockOffsetPixels = Coordinate.sum(
|
|
919
|
+
flyoutOffsetPixels,
|
|
920
|
+
oldBlockPos,
|
|
921
|
+
);
|
|
922
|
+
|
|
923
|
+
// The position of the old block in pixels relative to the origin of the
|
|
924
|
+
// main workspace.
|
|
925
|
+
const finalOffset = Coordinate.difference(
|
|
926
|
+
oldBlockOffsetPixels,
|
|
927
|
+
mainOffsetPixels,
|
|
928
|
+
);
|
|
929
|
+
// The position of the old block in main workspace coordinates.
|
|
930
|
+
finalOffset.scale(1 / targetWorkspace.scale);
|
|
931
|
+
|
|
932
|
+
// No 'reason' provided since events are disabled.
|
|
933
|
+
block.moveTo(new Coordinate(finalOffset.x, finalOffset.y));
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
/**
|
|
937
|
+
* Returns the inflater responsible for constructing items of the given type.
|
|
938
|
+
*
|
|
939
|
+
* @param type The type of flyout content item to provide an inflater for.
|
|
940
|
+
* @returns An inflater object for the given type, or null if no inflater
|
|
941
|
+
* is registered for that type.
|
|
942
|
+
*/
|
|
943
|
+
protected getInflaterForType(type: string): IFlyoutInflater | null {
|
|
944
|
+
if (this.inflaters.has(type)) {
|
|
945
|
+
return this.inflaters.get(type) ?? null;
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
const InflaterClass = registry.getClass(
|
|
949
|
+
registry.Type.FLYOUT_INFLATER,
|
|
950
|
+
type,
|
|
951
|
+
);
|
|
952
|
+
if (InflaterClass) {
|
|
953
|
+
const inflater = new InflaterClass();
|
|
954
|
+
this.inflaters.set(type, inflater);
|
|
955
|
+
return inflater;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
return null;
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
/**
|
|
963
|
+
* A flyout content item.
|
|
964
|
+
*/
|
|
965
|
+
export interface FlyoutItem {
|
|
966
|
+
type: string;
|
|
967
|
+
element: IBoundedElement;
|
|
968
|
+
}
|