blockly 8.0.4-beta.0 → 8.0.5-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blockly.min.js +2421 -2688
- package/blockly_compressed.js +1499 -1994
- package/blockly_compressed.js.map +1 -1
- package/blocks/blocks.js +3 -2
- package/blocks/colour.js +3 -1
- package/blocks/lists.js +94 -22
- package/blocks/logic.js +14 -6
- package/blocks/loops.js +5 -3
- package/blocks/math.js +3 -1
- package/blocks/procedures.js +3 -1
- package/blocks/text.js +14 -6
- package/blocks/variables.js +3 -1
- package/blocks/variables_dynamic.js +3 -1
- package/blocks.d.ts +0 -2
- package/blocks_compressed.js +189 -171
- package/blocks_compressed.js.map +1 -1
- package/closure/goog/base.d.ts +1 -0
- package/closure/goog/base_minimal.d.ts +18 -0
- package/closure/goog/goog.d.ts +25 -0
- package/core/any_aliases.d.ts +1 -0
- package/core/any_aliases.ts +1 -0
- package/core/block.d.ts +779 -0
- package/core/{block.js → block.ts} +610 -719
- package/core/block_animations.d.ts +33 -0
- package/core/{block_animations.js → block_animations.ts} +75 -79
- package/core/block_drag_surface.d.ts +111 -0
- package/core/{block_drag_surface.js → block_drag_surface.ts} +85 -117
- package/core/block_dragger.d.ts +143 -0
- package/core/{block_dragger.js → block_dragger.ts} +139 -176
- package/core/block_svg.d.ts +588 -0
- package/core/{block_svg.js → block_svg.ts} +494 -630
- package/core/blockly.d.ts +562 -0
- package/core/blockly.js +1 -1
- package/core/blockly.ts +749 -0
- package/core/blockly_options.d.ts +69 -0
- package/core/blockly_options.ts +81 -0
- package/core/blocks.d.ts +17 -0
- package/core/{blocks.js → blocks.ts} +4 -8
- package/core/browser_events.d.ts +85 -0
- package/core/{browser_events.js → browser_events.ts} +98 -93
- package/core/bubble.d.ts +279 -0
- package/core/{bubble.js → bubble.ts} +277 -370
- package/core/bubble_dragger.d.ts +73 -0
- package/core/bubble_dragger.ts +229 -0
- package/core/bump_objects.d.ts +34 -0
- package/core/{bump_objects.js → bump_objects.ts} +54 -52
- package/core/clipboard.d.ts +42 -0
- package/core/clipboard.ts +91 -0
- package/core/comment.d.ts +113 -0
- package/core/{comment.js → comment.ts} +135 -185
- package/core/common.d.ts +129 -0
- package/core/{common.js → common.ts} +105 -82
- package/core/component_manager.d.ts +91 -0
- package/core/component_manager.ts +211 -0
- package/core/config.d.ts +23 -0
- package/core/{config.js → config.ts} +12 -19
- package/core/connection.d.ts +232 -0
- package/core/{connection.js → connection.ts} +187 -237
- package/core/connection_checker.d.ts +78 -0
- package/core/{connection_checker.js → connection_checker.ts} +66 -77
- package/core/connection_db.d.ts +91 -0
- package/core/{connection_db.js → connection_db.ts} +62 -87
- package/core/connection_type.d.ts +15 -0
- package/core/{connection_type.js → connection_type.ts} +8 -12
- package/core/constants.d.ts +15 -0
- package/core/{constants.js → constants.ts} +4 -8
- package/core/contextmenu.d.ts +80 -0
- package/core/{contextmenu.js → contextmenu.ts} +118 -153
- package/core/contextmenu_items.d.ts +77 -0
- package/core/contextmenu_items.ts +576 -0
- package/core/contextmenu_registry.d.ts +105 -0
- package/core/contextmenu_registry.ts +179 -0
- package/core/css.d.ts +24 -0
- package/core/{css.js → css.ts} +16 -24
- package/core/delete_area.d.ts +47 -0
- package/core/delete_area.ts +82 -0
- package/core/dialog.d.ts +61 -0
- package/core/dialog.ts +127 -0
- package/core/drag_target.d.ts +63 -0
- package/core/drag_target.ts +94 -0
- package/core/dropdowndiv.d.ts +155 -0
- package/core/{dropdowndiv.js → dropdowndiv.ts} +262 -333
- package/core/events/events.d.ts +102 -0
- package/core/events/events.ts +123 -0
- package/core/events/events_abstract.d.ts +51 -0
- package/core/events/events_abstract.ts +112 -0
- package/core/events/events_block_base.d.ts +31 -0
- package/core/events/events_block_base.ts +65 -0
- package/core/events/events_block_change.d.ts +55 -0
- package/core/events/{events_block_change.js → events_block_change.ts} +45 -48
- package/core/events/events_block_create.d.ts +35 -0
- package/core/events/{events_block_create.js → events_block_create.ts} +30 -35
- package/core/events/events_block_delete.d.ts +36 -0
- package/core/events/{events_block_delete.js → events_block_delete.ts} +34 -39
- package/core/events/events_block_drag.d.ts +36 -0
- package/core/events/events_block_drag.ts +82 -0
- package/core/events/events_block_move.d.ts +51 -0
- package/core/events/{events_block_move.js → events_block_move.ts} +54 -50
- package/core/events/events_bubble_open.d.ts +35 -0
- package/core/events/events_bubble_open.ts +82 -0
- package/core/events/events_click.d.ts +36 -0
- package/core/events/{events_click.js → events_click.ts} +27 -30
- package/core/events/events_comment_base.d.ts +39 -0
- package/core/events/events_comment_base.ts +107 -0
- package/core/events/events_comment_change.d.ts +43 -0
- package/core/events/{events_comment_change.js → events_comment_change.ts} +31 -28
- package/core/events/events_comment_create.d.ts +35 -0
- package/core/events/{events_comment_create.js → events_comment_create.ts} +24 -26
- package/core/events/events_comment_delete.d.ts +35 -0
- package/core/events/{events_comment_delete.js → events_comment_delete.ts} +20 -24
- package/core/events/events_comment_move.d.ts +55 -0
- package/core/events/{events_comment_move.js → events_comment_move.ts} +39 -42
- package/core/events/events_marker_move.d.ts +40 -0
- package/core/events/events_marker_move.ts +99 -0
- package/core/events/events_selected.d.ts +34 -0
- package/core/events/events_selected.ts +78 -0
- package/core/events/events_theme_change.d.ts +30 -0
- package/core/events/{events_theme_change.js → events_theme_change.ts} +19 -24
- package/core/events/events_toolbox_item_select.d.ts +34 -0
- package/core/events/events_toolbox_item_select.ts +79 -0
- package/core/events/events_trashcan_open.d.ts +31 -0
- package/core/events/events_trashcan_open.ts +68 -0
- package/core/events/events_ui.d.ts +37 -0
- package/core/events/{events_ui.js → events_ui.ts} +27 -26
- package/core/events/events_ui_base.d.ts +26 -0
- package/core/events/{events_ui_base.js → events_ui_base.ts} +17 -26
- package/core/events/events_var_base.d.ts +31 -0
- package/core/events/events_var_base.ts +65 -0
- package/core/events/events_var_create.d.ts +35 -0
- package/core/events/{events_var_create.js → events_var_create.ts} +24 -25
- package/core/events/events_var_delete.d.ts +35 -0
- package/core/events/{events_var_delete.js → events_var_delete.ts} +24 -25
- package/core/events/events_var_rename.d.ts +36 -0
- package/core/events/{events_var_rename.js → events_var_rename.ts} +25 -26
- package/core/events/events_viewport.d.ts +39 -0
- package/core/events/events_viewport.ts +100 -0
- package/core/events/utils.d.ts +272 -0
- package/core/events/{utils.js → utils.ts} +148 -219
- package/core/events/workspace_events.d.ts +36 -0
- package/core/events/workspace_events.ts +86 -0
- package/core/extensions.d.ts +107 -0
- package/core/{extensions.js → extensions.ts} +153 -172
- package/core/field.d.ts +534 -0
- package/core/{field.js → field.ts} +413 -489
- package/core/field_angle.d.ts +176 -0
- package/core/field_angle.ts +563 -0
- package/core/field_checkbox.d.ts +124 -0
- package/core/field_checkbox.ts +243 -0
- package/core/field_colour.d.ts +200 -0
- package/core/field_colour.ts +632 -0
- package/core/field_dropdown.d.ts +222 -0
- package/core/{field_dropdown.js → field_dropdown.ts} +277 -299
- package/core/field_image.d.ts +134 -0
- package/core/field_image.ts +282 -0
- package/core/field_label.d.ts +71 -0
- package/core/field_label.ts +152 -0
- package/core/field_label_serializable.d.ts +42 -0
- package/core/field_label_serializable.ts +76 -0
- package/core/field_multilineinput.d.ts +146 -0
- package/core/{field_multilineinput.js → field_multilineinput.ts} +166 -163
- package/core/field_number.d.ts +156 -0
- package/core/{field_number.js → field_number.ts} +110 -123
- package/core/field_registry.d.ts +45 -0
- package/core/{field_registry.js → field_registry.ts} +37 -30
- package/core/field_textinput.d.ts +219 -0
- package/core/field_textinput.ts +591 -0
- package/core/field_variable.d.ts +217 -0
- package/core/{field_variable.js → field_variable.ts} +174 -187
- package/core/flyout_base.d.ts +459 -0
- package/core/{flyout_base.js → flyout_base.ts} +429 -518
- package/core/flyout_button.d.ts +81 -0
- package/core/flyout_button.ts +292 -0
- package/core/flyout_horizontal.d.ts +82 -0
- package/core/{flyout_horizontal.js → flyout_horizontal.ts} +97 -107
- package/core/flyout_metrics_manager.d.ts +40 -0
- package/core/{flyout_metrics_manager.js → flyout_metrics_manager.ts} +22 -34
- package/core/flyout_vertical.d.ts +83 -0
- package/core/{flyout_vertical.js → flyout_vertical.ts} +106 -117
- package/core/generator.d.ts +205 -0
- package/core/{generator.js → generator.ts} +168 -193
- package/core/gesture.d.ts +357 -0
- package/core/{gesture.js → gesture.ts} +289 -369
- package/core/grid.d.ts +83 -0
- package/core/grid.ts +192 -0
- package/core/icon.d.ts +78 -0
- package/core/icon.ts +189 -0
- package/core/inject.d.ts +15 -0
- package/core/{inject.js → inject.ts} +101 -100
- package/core/input.d.ts +128 -0
- package/core/input.ts +309 -0
- package/core/input_types.d.ts +14 -0
- package/core/{input_types.js → input_types.ts} +8 -12
- package/core/insertion_marker_manager.d.ts +212 -0
- package/core/{insertion_marker_manager.js → insertion_marker_manager.ts} +234 -236
- package/core/interfaces/i_ast_node_location.d.ts +11 -0
- package/core/interfaces/{i_ast_node_location.js → i_ast_node_location.ts} +4 -7
- package/core/interfaces/i_ast_node_location_svg.d.ts +22 -0
- package/core/interfaces/i_ast_node_location_svg.ts +37 -0
- package/core/interfaces/i_ast_node_location_with_block.d.ts +18 -0
- package/core/interfaces/i_ast_node_location_with_block.ts +38 -0
- package/core/interfaces/i_autohideable.d.ts +18 -0
- package/core/interfaces/i_autohideable.ts +34 -0
- package/core/interfaces/i_block_dragger.d.ts +43 -0
- package/core/interfaces/i_block_dragger.ts +67 -0
- package/core/interfaces/i_bounded_element.d.ts +24 -0
- package/core/interfaces/i_bounded_element.ts +42 -0
- package/core/interfaces/i_bubble.d.ts +59 -0
- package/core/interfaces/i_bubble.ts +88 -0
- package/core/interfaces/i_collapsible_toolbox_item.d.ts +26 -0
- package/core/interfaces/i_collapsible_toolbox_item.ts +47 -0
- package/core/interfaces/i_component.d.ts +17 -0
- package/core/interfaces/{i_component.js → i_component.ts} +9 -14
- package/core/interfaces/i_connection_checker.d.ts +69 -0
- package/core/interfaces/i_connection_checker.ts +102 -0
- package/core/interfaces/i_contextmenu.d.ts +13 -0
- package/core/interfaces/i_contextmenu.ts +26 -0
- package/core/interfaces/i_copyable.d.ts +24 -0
- package/core/interfaces/i_copyable.ts +40 -0
- package/core/interfaces/i_deletable.d.ts +16 -0
- package/core/interfaces/{i_deletable.js → i_deletable.ts} +9 -13
- package/core/interfaces/i_delete_area.d.ts +25 -0
- package/core/interfaces/i_delete_area.ts +46 -0
- package/core/interfaces/i_drag_target.d.ts +53 -0
- package/core/interfaces/i_drag_target.ts +84 -0
- package/core/interfaces/i_draggable.d.ts +12 -0
- package/core/interfaces/{i_draggable.js → i_draggable.ts} +4 -10
- package/core/interfaces/i_flyout.d.ts +134 -0
- package/core/interfaces/i_flyout.ts +186 -0
- package/core/interfaces/i_keyboard_accessible.d.ts +18 -0
- package/core/interfaces/i_keyboard_accessible.ts +35 -0
- package/core/interfaces/i_metrics_manager.d.ts +117 -0
- package/core/interfaces/i_metrics_manager.ts +151 -0
- package/core/interfaces/i_movable.d.ts +16 -0
- package/core/interfaces/{i_movable.js → i_movable.ts} +9 -13
- package/core/interfaces/i_positionable.d.ts +27 -0
- package/core/interfaces/i_positionable.ts +50 -0
- package/core/interfaces/i_registrable.d.ts +11 -0
- package/core/interfaces/{i_registrable.js → i_registrable.ts} +3 -7
- package/core/interfaces/i_registrable_field.d.ts +17 -0
- package/core/interfaces/{i_registrable_field.js → i_registrable_field.ts} +8 -16
- package/core/interfaces/i_selectable.d.ts +18 -0
- package/core/interfaces/i_selectable.ts +34 -0
- package/core/interfaces/i_selectable_toolbox_item.d.ts +42 -0
- package/core/interfaces/i_selectable_toolbox_item.ts +64 -0
- package/core/interfaces/i_serializer.d.ts +42 -0
- package/core/interfaces/i_serializer.ts +65 -0
- package/core/interfaces/i_styleable.d.ts +21 -0
- package/core/interfaces/i_styleable.ts +35 -0
- package/core/interfaces/i_toolbox.d.ts +85 -0
- package/core/interfaces/i_toolbox.ts +127 -0
- package/core/interfaces/i_toolbox_item.d.ts +62 -0
- package/core/interfaces/i_toolbox_item.ts +84 -0
- package/core/internal_constants.d.ts +40 -0
- package/core/{internal_constants.js → internal_constants.ts} +13 -18
- package/core/keyboard_nav/ast_node.d.ts +239 -0
- package/core/keyboard_nav/{ast_node.js → ast_node.ts} +207 -231
- package/core/keyboard_nav/basic_cursor.d.ts +88 -0
- package/core/keyboard_nav/{basic_cursor.js → basic_cursor.ts} +55 -66
- package/core/keyboard_nav/cursor.d.ts +41 -0
- package/core/keyboard_nav/{cursor.js → cursor.ts} +25 -35
- package/core/keyboard_nav/marker.d.ts +58 -0
- package/core/keyboard_nav/{marker.js → marker.ts} +36 -55
- package/core/keyboard_nav/tab_navigate_cursor.d.ts +19 -0
- package/core/keyboard_nav/{tab_navigate_cursor.js → tab_navigate_cursor.ts} +11 -15
- package/core/main.d.ts +11 -0
- package/core/main.js +303 -0
- package/core/marker_manager.d.ts +85 -0
- package/core/marker_manager.ts +181 -0
- package/core/menu.d.ts +149 -0
- package/core/{menu.js → menu.ts} +141 -174
- package/core/menuitem.d.ts +118 -0
- package/core/menuitem.ts +240 -0
- package/core/metrics_manager.d.ts +201 -0
- package/core/{metrics_manager.js → metrics_manager.ts} +117 -156
- package/core/msg.d.ts +9 -0
- package/core/{msg.js → msg.ts} +4 -8
- package/core/mutator.d.ts +128 -0
- package/core/{mutator.js → mutator.ts} +196 -211
- package/core/names.d.ts +124 -0
- package/core/names.ts +267 -0
- package/core/options.d.ts +137 -0
- package/core/{options.js → options.ts} +147 -173
- package/core/positionable_helpers.d.ts +88 -0
- package/core/{positionable_helpers.js → positionable_helpers.ts} +63 -70
- package/core/procedures.d.ts +108 -0
- package/core/{procedures.js → procedures.ts} +143 -152
- package/core/registry.d.ts +137 -0
- package/core/registry.ts +339 -0
- package/core/rendered_connection.d.ts +191 -0
- package/core/{rendered_connection.js → rendered_connection.ts} +164 -184
- package/core/renderers/common/block_rendering.d.ts +114 -0
- package/core/renderers/common/block_rendering.ts +164 -0
- package/core/renderers/common/constants.d.ts +458 -0
- package/core/renderers/common/constants.ts +1124 -0
- package/core/renderers/common/debug.d.ts +28 -0
- package/core/renderers/common/{debug.js → debug.ts} +14 -20
- package/core/renderers/common/debugger.d.ts +120 -0
- package/core/renderers/common/{debugger.js → debugger.ts} +100 -124
- package/core/renderers/common/drawer.d.ts +132 -0
- package/core/renderers/common/{drawer.js → drawer.ts} +112 -137
- package/core/renderers/common/i_path_object.d.ts +117 -0
- package/core/renderers/common/i_path_object.ts +161 -0
- package/core/renderers/common/info.d.ts +194 -0
- package/core/renderers/common/{info.js → info.ts} +165 -222
- package/core/renderers/common/marker_svg.d.ts +220 -0
- package/core/renderers/common/marker_svg.ts +680 -0
- package/core/renderers/common/path_object.d.ts +146 -0
- package/core/renderers/common/path_object.ts +272 -0
- package/core/renderers/common/renderer.d.ts +157 -0
- package/core/renderers/common/renderer.ts +271 -0
- package/core/renderers/geras/constants.d.ts +23 -0
- package/core/renderers/geras/constants.ts +61 -0
- package/core/renderers/geras/drawer.d.ts +43 -0
- package/core/renderers/geras/{drawer.js → drawer.ts} +40 -84
- package/core/renderers/geras/geras.d.ts +11 -0
- package/core/renderers/geras/geras.ts +37 -0
- package/core/renderers/geras/highlight_constants.d.ts +108 -0
- package/core/renderers/geras/{highlight_constants.js → highlight_constants.ts} +107 -69
- package/core/renderers/geras/highlighter.d.ts +98 -0
- package/core/renderers/geras/{highlighter.js → highlighter.ts} +81 -86
- package/core/renderers/geras/info.d.ts +45 -0
- package/core/renderers/geras/{info.js → info.ts} +61 -99
- package/core/renderers/geras/measurables/inline_input.d.ts +23 -0
- package/core/renderers/geras/measurables/inline_input.ts +51 -0
- package/core/renderers/geras/measurables/statement_input.d.ts +23 -0
- package/core/renderers/geras/measurables/statement_input.ts +50 -0
- package/core/renderers/geras/path_object.d.ts +47 -0
- package/core/renderers/geras/{path_object.js → path_object.ts} +46 -74
- package/core/renderers/geras/renderer.d.ts +69 -0
- package/core/renderers/geras/renderer.ts +126 -0
- package/core/renderers/measurables/base.d.ts +27 -0
- package/core/renderers/measurables/base.ts +53 -0
- package/core/renderers/measurables/bottom_row.d.ts +61 -0
- package/core/renderers/measurables/bottom_row.ts +120 -0
- package/core/renderers/measurables/connection.d.ts +25 -0
- package/core/renderers/measurables/connection.ts +52 -0
- package/core/renderers/measurables/external_value_input.d.ts +27 -0
- package/core/renderers/measurables/external_value_input.ts +65 -0
- package/core/renderers/measurables/field.d.ts +30 -0
- package/core/renderers/measurables/field.ts +63 -0
- package/core/renderers/measurables/hat.d.ts +21 -0
- package/core/renderers/measurables/{hat.js → hat.ts} +12 -14
- package/core/renderers/measurables/icon.d.ts +26 -0
- package/core/renderers/measurables/{icon.js → icon.ts} +14 -18
- package/core/renderers/measurables/in_row_spacer.d.ts +21 -0
- package/core/renderers/measurables/in_row_spacer.ts +44 -0
- package/core/renderers/measurables/inline_input.d.ts +24 -0
- package/core/renderers/measurables/{inline_input.js → inline_input.ts} +22 -26
- package/core/renderers/measurables/input_connection.d.ts +29 -0
- package/core/renderers/measurables/input_connection.ts +66 -0
- package/core/renderers/measurables/input_row.d.ts +30 -0
- package/core/renderers/measurables/{input_row.js → input_row.ts} +24 -31
- package/core/renderers/measurables/jagged_edge.d.ts +20 -0
- package/core/renderers/measurables/{jagged_edge.js → jagged_edge.ts} +10 -13
- package/core/renderers/measurables/next_connection.d.ts +23 -0
- package/core/renderers/measurables/next_connection.ts +47 -0
- package/core/renderers/measurables/output_connection.d.ts +26 -0
- package/core/renderers/measurables/output_connection.ts +56 -0
- package/core/renderers/measurables/previous_connection.d.ts +23 -0
- package/core/renderers/measurables/previous_connection.ts +47 -0
- package/core/renderers/measurables/round_corner.d.ts +21 -0
- package/core/renderers/measurables/round_corner.ts +49 -0
- package/core/renderers/measurables/row.d.ts +141 -0
- package/core/renderers/measurables/row.ts +225 -0
- package/core/renderers/measurables/spacer_row.d.ts +29 -0
- package/core/renderers/measurables/spacer_row.ts +55 -0
- package/core/renderers/measurables/square_corner.d.ts +21 -0
- package/core/renderers/measurables/square_corner.ts +47 -0
- package/core/renderers/measurables/statement_input.d.ts +22 -0
- package/core/renderers/measurables/{statement_input.js → statement_input.ts} +14 -18
- package/core/renderers/measurables/top_row.d.ts +56 -0
- package/core/renderers/measurables/top_row.ts +122 -0
- package/core/renderers/measurables/types.d.ts +235 -0
- package/core/renderers/measurables/types.ts +332 -0
- package/core/renderers/minimalist/constants.d.ts +14 -0
- package/core/renderers/minimalist/{constants.js → constants.ts} +5 -10
- package/core/renderers/minimalist/drawer.d.ts +21 -0
- package/core/renderers/minimalist/drawer.ts +38 -0
- package/core/renderers/minimalist/info.d.ts +30 -0
- package/core/renderers/minimalist/info.ts +52 -0
- package/core/renderers/minimalist/minimalist.d.ts +6 -0
- package/core/renderers/minimalist/minimalist.ts +22 -0
- package/core/renderers/minimalist/renderer.d.ts +41 -0
- package/core/renderers/minimalist/renderer.ts +71 -0
- package/core/renderers/thrasos/info.d.ts +40 -0
- package/core/renderers/thrasos/{info.js → info.ts} +66 -67
- package/core/renderers/thrasos/renderer.d.ts +25 -0
- package/core/renderers/thrasos/renderer.ts +48 -0
- package/core/renderers/thrasos/thrasos.d.ts +4 -0
- package/core/renderers/thrasos/thrasos.ts +20 -0
- package/core/renderers/zelos/constants.d.ts +186 -0
- package/core/renderers/zelos/{constants.js → constants.ts} +294 -441
- package/core/renderers/zelos/drawer.d.ts +47 -0
- package/core/renderers/zelos/{drawer.js → drawer.ts} +73 -95
- package/core/renderers/zelos/info.d.ts +88 -0
- package/core/renderers/zelos/{info.js → info.ts} +111 -142
- package/core/renderers/zelos/marker_svg.d.ts +46 -0
- package/core/renderers/zelos/marker_svg.ts +151 -0
- package/core/renderers/zelos/measurables/bottom_row.d.ts +27 -0
- package/core/renderers/zelos/measurables/bottom_row.ts +53 -0
- package/core/renderers/zelos/measurables/inputs.d.ts +23 -0
- package/core/renderers/zelos/measurables/{inputs.js → inputs.ts} +14 -15
- package/core/renderers/zelos/measurables/row_elements.d.ts +21 -0
- package/core/renderers/zelos/measurables/row_elements.ts +45 -0
- package/core/renderers/zelos/measurables/top_row.d.ts +29 -0
- package/core/renderers/zelos/measurables/{top_row.js → top_row.ts} +14 -27
- package/core/renderers/zelos/path_object.d.ts +77 -0
- package/core/renderers/zelos/path_object.ts +215 -0
- package/core/renderers/zelos/renderer.d.ts +74 -0
- package/core/renderers/zelos/renderer.ts +142 -0
- package/core/renderers/zelos/zelos.d.ts +12 -0
- package/core/renderers/zelos/zelos.ts +39 -0
- package/core/scrollbar.d.ts +277 -0
- package/core/{scrollbar.js → scrollbar.ts} +307 -328
- package/core/scrollbar_pair.d.ts +105 -0
- package/core/{scrollbar_pair.js → scrollbar_pair.ts} +71 -79
- package/core/serialization/blocks.d.ts +98 -0
- package/core/serialization/{blocks.js → blocks.ts} +229 -228
- package/core/serialization/exceptions.d.ts +73 -0
- package/core/serialization/exceptions.ts +98 -0
- package/core/serialization/priorities.d.ts +15 -0
- package/core/serialization/{priorities.js → priorities.ts} +4 -10
- package/core/serialization/registry.d.ts +20 -0
- package/core/serialization/{registry.js → registry.ts} +11 -13
- package/core/serialization/variables.d.ts +14 -0
- package/core/serialization/{variables.js → variables.ts} +30 -32
- package/core/serialization/workspaces.d.ts +28 -0
- package/core/serialization/{workspaces.js → workspaces.ts} +30 -27
- package/core/shortcut_items.d.ts +61 -0
- package/core/{shortcut_items.js → shortcut_items.ts} +121 -157
- package/core/shortcut_registry.d.ts +151 -0
- package/core/shortcut_registry.ts +355 -0
- package/core/sprites.d.ts +19 -0
- package/core/{sprites.js → sprites.ts} +4 -6
- package/core/theme/classic.d.ts +12 -0
- package/core/theme/{classic.js → classic.ts} +5 -7
- package/core/theme/themes.d.ts +8 -0
- package/core/theme/themes.ts +22 -0
- package/core/theme/zelos.d.ts +11 -0
- package/core/theme/{zelos.js → zelos.ts} +4 -7
- package/core/theme.d.ts +142 -0
- package/core/theme.ts +221 -0
- package/core/theme_manager.d.ts +81 -0
- package/core/theme_manager.ts +186 -0
- package/core/toolbox/category.d.ts +239 -0
- package/core/toolbox/category.ts +679 -0
- package/core/toolbox/collapsible_category.d.ts +91 -0
- package/core/toolbox/collapsible_category.ts +273 -0
- package/core/toolbox/separator.d.ts +39 -0
- package/core/toolbox/separator.ts +105 -0
- package/core/toolbox/toolbox.d.ts +352 -0
- package/core/toolbox/{toolbox.js → toolbox.ts} +316 -432
- package/core/toolbox/toolbox_item.d.ts +85 -0
- package/core/toolbox/toolbox_item.ts +147 -0
- package/core/tooltip.d.ts +126 -0
- package/core/{tooltip.js → tooltip.ts} +136 -214
- package/core/touch.d.ts +121 -0
- package/core/touch.ts +306 -0
- package/core/touch_gesture.d.ts +115 -0
- package/core/{touch_gesture.js → touch_gesture.ts} +87 -125
- package/core/trashcan.d.ts +195 -0
- package/core/{trashcan.js → trashcan.ts} +226 -312
- package/core/utils/aria.d.ts +67 -0
- package/core/utils/{aria.js → aria.ts} +47 -61
- package/core/utils/array.d.ts +14 -0
- package/core/utils/{array.js → array.ts} +10 -12
- package/core/utils/colour.d.ts +103 -0
- package/core/utils/{colour.js → colour.ts} +60 -72
- package/core/utils/coordinate.d.ts +72 -0
- package/core/utils/coordinate.ts +124 -0
- package/core/utils/deprecation.d.ts +17 -0
- package/core/utils/{deprecation.js → deprecation.ts} +11 -11
- package/core/utils/dom.d.ts +165 -0
- package/core/utils/{dom.js → dom.ts} +125 -147
- package/core/utils/idgenerator.d.ts +25 -0
- package/core/utils/{idgenerator.js → idgenerator.ts} +15 -18
- package/core/utils/keycodes.d.ts +137 -0
- package/core/utils/keycodes.ts +169 -0
- package/core/utils/math.d.ts +30 -0
- package/core/utils/{math.js → math.ts} +17 -19
- package/core/utils/metrics.d.ts +64 -0
- package/core/utils/metrics.ts +97 -0
- package/core/utils/object.d.ts +35 -0
- package/core/utils/{object.js → object.ts} +30 -26
- package/core/utils/parsing.d.ts +50 -0
- package/core/utils/{parsing.js → parsing.ts} +50 -50
- package/core/utils/rect.d.ts +38 -0
- package/core/utils/{rect.js → rect.ts} +18 -31
- package/core/utils/sentinel.d.ts +11 -0
- package/core/utils/{sentinel.js → sentinel.ts} +3 -5
- package/core/utils/size.d.ts +27 -0
- package/core/utils/{size.js → size.ts} +12 -26
- package/core/utils/string.d.ts +55 -0
- package/core/utils/{string.js → string.ts} +64 -61
- package/core/utils/style.d.ts +127 -0
- package/core/utils/{style.js → style.ts} +102 -92
- package/core/utils/svg.d.ts +68 -0
- package/core/utils/svg.ts +88 -0
- package/core/utils/svg_math.d.ts +70 -0
- package/core/utils/{svg_math.js → svg_math.ts} +72 -71
- package/core/utils/svg_paths.d.ts +101 -0
- package/core/utils/{svg_paths.js → svg_paths.ts} +56 -65
- package/core/utils/toolbox.d.ts +193 -0
- package/core/utils/toolbox.ts +433 -0
- package/core/utils/useragent.d.ts +33 -0
- package/core/utils/useragent.ts +135 -0
- package/core/utils/xml.d.ts +52 -0
- package/core/utils/{xml.js → xml.ts} +26 -36
- package/core/utils.d.ts +217 -0
- package/core/utils.ts +428 -0
- package/core/variable_map.d.ts +141 -0
- package/core/{variable_map.js → variable_map.ts} +131 -149
- package/core/variable_model.d.ts +40 -0
- package/core/variable_model.ts +82 -0
- package/core/variables.d.ts +181 -0
- package/core/{variables.js → variables.ts} +206 -188
- package/core/variables_dynamic.d.ts +38 -0
- package/core/{variables_dynamic.js → variables_dynamic.ts} +47 -43
- package/core/warning.d.ts +50 -0
- package/core/{warning.js → warning.ts} +52 -66
- package/core/widgetdiv.d.ts +69 -0
- package/core/widgetdiv.ts +257 -0
- package/core/workspace.d.ts +386 -0
- package/core/workspace.ts +801 -0
- package/core/workspace_audio.d.ts +47 -0
- package/core/{workspace_audio.js → workspace_audio.ts} +47 -60
- package/core/workspace_comment.d.ts +170 -0
- package/core/workspace_comment.ts +398 -0
- package/core/workspace_comment_svg.d.ts +329 -0
- package/core/{workspace_comment_svg.js → workspace_comment_svg.ts} +347 -444
- package/core/workspace_drag_surface_svg.d.ts +68 -0
- package/core/{workspace_drag_surface_svg.js → workspace_drag_surface_svg.ts} +75 -82
- package/core/workspace_dragger.d.ts +48 -0
- package/core/workspace_dragger.ts +104 -0
- package/core/workspace_svg.d.ts +920 -0
- package/core/{workspace_svg.js → workspace_svg.ts} +855 -935
- package/core/xml.d.ts +117 -0
- package/core/{xml.js → xml.ts} +306 -326
- package/core/zoom_controls.d.ts +130 -0
- package/core/{zoom_controls.js → zoom_controls.ts} +185 -251
- package/core.d.ts +1 -3
- package/core.js +1 -2
- package/dart.d.ts +0 -3
- package/dart_compressed.js +387 -99
- package/dart_compressed.js.map +1 -1
- package/generators/dart/all.js +2 -0
- package/generators/dart/colour.js +1 -1
- package/generators/dart/lists.js +1 -1
- package/generators/dart/logic.js +1 -1
- package/generators/dart/loops.js +1 -1
- package/generators/dart/math.js +1 -1
- package/generators/dart/procedures.js +1 -1
- package/generators/dart/text.js +1 -1
- package/generators/dart/variables.js +1 -1
- package/generators/dart/variables_dynamic.js +1 -1
- package/generators/dart.js +1 -2
- package/generators/javascript/all.js +2 -0
- package/generators/javascript/colour.js +1 -1
- package/generators/javascript/lists.js +1 -1
- package/generators/javascript/logic.js +1 -1
- package/generators/javascript/loops.js +1 -1
- package/generators/javascript/math.js +4 -4
- package/generators/javascript/procedures.js +1 -1
- package/generators/javascript/text.js +2 -2
- package/generators/javascript/variables.js +1 -1
- package/generators/javascript/variables_dynamic.js +1 -1
- package/generators/javascript.js +1 -3
- package/generators/lua/all.js +2 -0
- package/generators/lua/colour.js +1 -1
- package/generators/lua/lists.js +1 -1
- package/generators/lua/logic.js +1 -1
- package/generators/lua/loops.js +1 -1
- package/generators/lua/math.js +1 -1
- package/generators/lua/procedures.js +1 -1
- package/generators/lua/text.js +1 -1
- package/generators/lua/variables.js +1 -1
- package/generators/lua/variables_dynamic.js +1 -1
- package/generators/lua.js +1 -2
- package/generators/php/all.js +2 -0
- package/generators/php/colour.js +1 -1
- package/generators/php/lists.js +1 -2
- package/generators/php/logic.js +1 -1
- package/generators/php/loops.js +1 -1
- package/generators/php/math.js +1 -1
- package/generators/php/procedures.js +1 -1
- package/generators/php/text.js +1 -1
- package/generators/php/variables.js +1 -1
- package/generators/php/variables_dynamic.js +1 -1
- package/generators/php.js +1 -2
- package/generators/python/all.js +2 -0
- package/generators/python/colour.js +3 -3
- package/generators/python/lists.js +1 -1
- package/generators/python/logic.js +1 -1
- package/generators/python/loops.js +4 -7
- package/generators/python/math.js +1 -1
- package/generators/python/procedures.js +1 -1
- package/generators/python/text.js +1 -1
- package/generators/python/variables.js +1 -1
- package/generators/python/variables_dynamic.js +1 -1
- package/generators/python.js +1 -2
- package/index.d.ts +2 -8
- package/javascript.d.ts +0 -3
- package/javascript_compressed.js +314 -104
- package/javascript_compressed.js.map +1 -1
- package/lua.d.ts +0 -3
- package/lua_compressed.js +399 -81
- package/lua_compressed.js.map +1 -1
- package/msg/ab.js +421 -421
- package/msg/ace.js +421 -421
- package/msg/af.js +421 -421
- package/msg/am.js +421 -421
- package/msg/ar.js +421 -421
- package/msg/ast.js +421 -421
- package/msg/az.js +421 -421
- package/msg/ba.js +421 -421
- package/msg/bcc.js +421 -421
- package/msg/be-tarask.js +421 -421
- package/msg/be.js +421 -421
- package/msg/bg.js +421 -421
- package/msg/bn.js +421 -421
- package/msg/br.js +421 -421
- package/msg/bs.js +421 -421
- package/msg/ca.js +421 -421
- package/msg/cdo.js +421 -421
- package/msg/cs.js +421 -421
- package/msg/da.js +421 -421
- package/msg/de.js +421 -421
- package/msg/diq.js +421 -421
- package/msg/dty.js +421 -421
- package/msg/ee.js +421 -421
- package/msg/el.js +421 -421
- package/msg/en-gb.js +421 -421
- package/msg/en.js +421 -421
- package/msg/eo.js +421 -421
- package/msg/es.js +421 -421
- package/msg/et.js +421 -421
- package/msg/eu.js +421 -421
- package/msg/fa.js +421 -421
- package/msg/fi.js +421 -421
- package/msg/fo.js +421 -421
- package/msg/fr.js +421 -421
- package/msg/frr.js +421 -421
- package/msg/gl.js +421 -421
- package/msg/gn.js +421 -421
- package/msg/gor.js +421 -421
- package/msg/ha.js +421 -421
- package/msg/hak.js +421 -421
- package/msg/he.js +421 -421
- package/msg/hi.js +421 -421
- package/msg/hr.js +421 -421
- package/msg/hrx.js +421 -421
- package/msg/hu.js +421 -421
- package/msg/hy.js +421 -421
- package/msg/ia.js +421 -421
- package/msg/id.js +421 -421
- package/msg/ig.js +421 -421
- package/msg/inh.js +421 -421
- package/msg/is.js +421 -421
- package/msg/it.js +421 -421
- package/msg/ja.js +421 -421
- package/msg/ka.js +421 -421
- package/msg/kab.js +421 -421
- package/msg/kbd-cyrl.js +421 -421
- package/msg/km.js +421 -421
- package/msg/kn.js +421 -421
- package/msg/ko.js +421 -421
- package/msg/ksh.js +421 -421
- package/msg/ku-latn.js +421 -421
- package/msg/ky.js +421 -421
- package/msg/la.js +421 -421
- package/msg/lb.js +421 -421
- package/msg/lki.js +421 -421
- package/msg/lo.js +421 -421
- package/msg/lrc.js +421 -421
- package/msg/lt.js +421 -421
- package/msg/lv.js +421 -421
- package/msg/mg.js +421 -421
- package/msg/mk.js +421 -421
- package/msg/ml.js +421 -421
- package/msg/mnw.js +421 -421
- package/msg/ms.js +421 -421
- package/msg/my.js +421 -421
- package/msg/mzn.js +421 -421
- package/msg/nb.js +421 -421
- package/msg/ne.js +421 -421
- package/msg/nl.js +421 -421
- package/msg/oc.js +421 -421
- package/msg/olo.js +421 -421
- package/msg/pa.js +421 -421
- package/msg/pl.js +421 -421
- package/msg/pms.js +421 -421
- package/msg/ps.js +421 -421
- package/msg/pt-br.js +421 -421
- package/msg/pt.js +421 -421
- package/msg/ro.js +421 -421
- package/msg/ru.js +421 -421
- package/msg/sc.js +421 -421
- package/msg/sco.js +421 -421
- package/msg/sd.js +421 -421
- package/msg/shn.js +421 -421
- package/msg/si.js +421 -421
- package/msg/sk.js +421 -421
- package/msg/skr-arab.js +421 -421
- package/msg/sl.js +421 -421
- package/msg/smn.js +421 -421
- package/msg/sq.js +421 -421
- package/msg/sr-latn.js +421 -421
- package/msg/sr.js +421 -421
- package/msg/sv.js +421 -421
- package/msg/sw.js +421 -421
- package/msg/ta.js +421 -421
- package/msg/tcy.js +421 -421
- package/msg/te.js +421 -421
- package/msg/th.js +421 -421
- package/msg/ti.js +421 -421
- package/msg/tl.js +421 -421
- package/msg/tlh.js +421 -421
- package/msg/tr.js +421 -421
- package/msg/ug-arab.js +421 -421
- package/msg/uk.js +421 -421
- package/msg/ur.js +421 -421
- package/msg/uz.js +421 -421
- package/msg/vi.js +421 -421
- package/msg/xmf.js +421 -421
- package/msg/yo.js +421 -421
- package/msg/yue.js +421 -421
- package/msg/zgh.js +421 -421
- package/msg/zh-hans.js +421 -421
- package/msg/zh-hant.js +421 -421
- package/package.json +5 -5
- package/php.d.ts +0 -3
- package/php_compressed.js +322 -93
- package/php_compressed.js.map +1 -1
- package/python.d.ts +0 -3
- package/python_compressed.js +237 -90
- package/python_compressed.js.map +1 -1
- package/blockly.d.ts +0 -26127
- package/core/blockly_options.js +0 -28
- package/core/bubble_dragger.js +0 -298
- package/core/clipboard.js +0 -80
- package/core/component_manager.js +0 -263
- package/core/contextmenu_items.js +0 -651
- package/core/contextmenu_registry.js +0 -178
- package/core/delete_area.js +0 -87
- package/core/dialog.js +0 -107
- package/core/drag_target.js +0 -98
- package/core/events/events.js +0 -147
- package/core/events/events_abstract.js +0 -133
- package/core/events/events_block_base.js +0 -70
- package/core/events/events_block_drag.js +0 -89
- package/core/events/events_bubble_open.js +0 -90
- package/core/events/events_comment_base.js +0 -121
- package/core/events/events_marker_move.js +0 -110
- package/core/events/events_selected.js +0 -83
- package/core/events/events_toolbox_item_select.js +0 -84
- package/core/events/events_trashcan_open.js +0 -73
- package/core/events/events_var_base.js +0 -70
- package/core/events/events_viewport.js +0 -107
- package/core/events/workspace_events.js +0 -93
- package/core/field_angle.js +0 -591
- package/core/field_checkbox.js +0 -255
- package/core/field_colour.js +0 -717
- package/core/field_image.js +0 -304
- package/core/field_label.js +0 -149
- package/core/field_label_serializable.js +0 -80
- package/core/field_textinput.js +0 -619
- package/core/flyout_button.js +0 -356
- package/core/grid.js +0 -226
- package/core/icon.js +0 -225
- package/core/input.js +0 -335
- package/core/interfaces/i_ast_node_location_svg.js +0 -45
- package/core/interfaces/i_ast_node_location_with_block.js +0 -41
- package/core/interfaces/i_autohideable.js +0 -40
- package/core/interfaces/i_block_dragger.js +0 -66
- package/core/interfaces/i_bounded_element.js +0 -45
- package/core/interfaces/i_bubble.js +0 -95
- package/core/interfaces/i_collapsible_toolbox_item.js +0 -53
- package/core/interfaces/i_connection_checker.js +0 -104
- package/core/interfaces/i_contextmenu.js +0 -32
- package/core/interfaces/i_copyable.js +0 -49
- package/core/interfaces/i_delete_area.js +0 -50
- package/core/interfaces/i_drag_target.js +0 -88
- package/core/interfaces/i_flyout.js +0 -201
- package/core/interfaces/i_keyboard_accessible.js +0 -38
- package/core/interfaces/i_metrics_manager.js +0 -154
- package/core/interfaces/i_positionable.js +0 -51
- package/core/interfaces/i_selectable.js +0 -51
- package/core/interfaces/i_selectable_toolbox_item.js +0 -73
- package/core/interfaces/i_serializer.js +0 -77
- package/core/interfaces/i_styleable.js +0 -39
- package/core/interfaces/i_toolbox.js +0 -142
- package/core/interfaces/i_toolbox_item.js +0 -85
- package/core/marker_manager.js +0 -213
- package/core/menuitem.js +0 -292
- package/core/names.js +0 -293
- package/core/registry.js +0 -384
- package/core/renderers/common/block_rendering.js +0 -170
- package/core/renderers/common/constants.js +0 -1250
- package/core/renderers/common/i_path_object.js +0 -162
- package/core/renderers/common/marker_svg.js +0 -721
- package/core/renderers/common/path_object.js +0 -283
- package/core/renderers/common/renderer.js +0 -305
- package/core/renderers/geras/constants.js +0 -73
- package/core/renderers/geras/geras.js +0 -36
- package/core/renderers/geras/measurables/inline_input.js +0 -58
- package/core/renderers/geras/measurables/statement_input.js +0 -57
- package/core/renderers/geras/renderer.js +0 -149
- package/core/renderers/measurables/base.js +0 -64
- package/core/renderers/measurables/bottom_row.js +0 -138
- package/core/renderers/measurables/connection.js +0 -56
- package/core/renderers/measurables/external_value_input.js +0 -70
- package/core/renderers/measurables/field.js +0 -71
- package/core/renderers/measurables/in_row_spacer.js +0 -47
- package/core/renderers/measurables/input_connection.js +0 -75
- package/core/renderers/measurables/next_connection.js +0 -50
- package/core/renderers/measurables/output_connection.js +0 -61
- package/core/renderers/measurables/previous_connection.js +0 -50
- package/core/renderers/measurables/round_corner.js +0 -52
- package/core/renderers/measurables/row.js +0 -247
- package/core/renderers/measurables/spacer_row.js +0 -69
- package/core/renderers/measurables/square_corner.js +0 -50
- package/core/renderers/measurables/top_row.js +0 -143
- package/core/renderers/measurables/types.js +0 -353
- package/core/renderers/minimalist/drawer.js +0 -42
- package/core/renderers/minimalist/info.js +0 -54
- package/core/renderers/minimalist/minimalist.js +0 -26
- package/core/renderers/minimalist/renderer.js +0 -80
- package/core/renderers/thrasos/renderer.js +0 -53
- package/core/renderers/thrasos/thrasos.js +0 -22
- package/core/renderers/zelos/marker_svg.js +0 -179
- package/core/renderers/zelos/measurables/bottom_row.js +0 -66
- package/core/renderers/zelos/measurables/row_elements.js +0 -46
- package/core/renderers/zelos/path_object.js +0 -247
- package/core/renderers/zelos/renderer.js +0 -147
- package/core/renderers/zelos/zelos.js +0 -38
- package/core/serialization/exceptions.js +0 -144
- package/core/shortcut_registry.js +0 -366
- package/core/theme/themes.js +0 -23
- package/core/theme.js +0 -228
- package/core/theme_manager.js +0 -211
- package/core/toolbox/category.js +0 -751
- package/core/toolbox/collapsible_category.js +0 -311
- package/core/toolbox/separator.js +0 -133
- package/core/toolbox/toolbox_item.js +0 -173
- package/core/touch.js +0 -285
- package/core/utils/coordinate.js +0 -138
- package/core/utils/global.js +0 -41
- package/core/utils/keycodes.js +0 -172
- package/core/utils/metrics.js +0 -154
- package/core/utils/svg.js +0 -186
- package/core/utils/toolbox.js +0 -459
- package/core/utils/useragent.js +0 -197
- package/core/utils.js +0 -383
- package/core/variable_model.js +0 -96
- package/core/widgetdiv.js +0 -290
- package/core/workspace.js +0 -836
- package/core/workspace_comment.js +0 -400
- package/core/workspace_dragger.js +0 -115
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
* In the interests of a consistent UI, the toolbox shares some functions and
|
|
10
10
|
* properties with the context menu.
|
|
11
11
|
*/
|
|
12
|
-
'use strict';
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
14
|
* Dropdown input field. Used for editable titles and variables.
|
|
@@ -17,101 +16,114 @@
|
|
|
17
16
|
* properties with the context menu.
|
|
18
17
|
* @class
|
|
19
18
|
*/
|
|
20
|
-
goog
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
19
|
+
import * as goog from '../closure/goog/goog.js';
|
|
20
|
+
goog.declareModuleId('Blockly.FieldDropdown');
|
|
21
|
+
|
|
22
|
+
import type {BlockSvg} from './block_svg.js';
|
|
23
|
+
import * as dropDownDiv from './dropdowndiv.js';
|
|
24
|
+
import {FieldConfig, Field} from './field.js';
|
|
25
|
+
import * as fieldRegistry from './field_registry.js';
|
|
26
|
+
import {Menu} from './menu.js';
|
|
27
|
+
import {MenuItem} from './menuitem.js';
|
|
28
|
+
import * as aria from './utils/aria.js';
|
|
29
|
+
import {Coordinate} from './utils/coordinate.js';
|
|
30
|
+
import * as dom from './utils/dom.js';
|
|
31
|
+
import * as parsing from './utils/parsing.js';
|
|
32
|
+
import type {Sentinel} from './utils/sentinel.js';
|
|
33
|
+
import * as utilsString from './utils/string.js';
|
|
34
|
+
import {Svg} from './utils/svg.js';
|
|
35
|
+
import * as userAgent from './utils/useragent.js';
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
39
|
* Class for an editable dropdown field.
|
|
40
|
-
* @extends {Field}
|
|
41
40
|
* @alias Blockly.FieldDropdown
|
|
42
41
|
*/
|
|
43
|
-
class FieldDropdown extends Field {
|
|
42
|
+
export class FieldDropdown extends Field {
|
|
43
|
+
/** Horizontal distance that a checkmark overhangs the dropdown. */
|
|
44
|
+
static CHECKMARK_OVERHANG = 25;
|
|
45
|
+
|
|
44
46
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* generates these options.
|
|
48
|
-
* Also accepts Field.SKIP_SETUP if you wish to skip setup (only used by
|
|
49
|
-
* subclasses that want to handle configuration and setting the field
|
|
50
|
-
* value after their own constructors have run).
|
|
51
|
-
* @param {Function=} opt_validator A function that is called to validate
|
|
52
|
-
* changes to the field's value. Takes in a language-neutral dropdown
|
|
53
|
-
* option & returns a validated language-neutral dropdown option, or null
|
|
54
|
-
* to abort the change.
|
|
55
|
-
* @param {Object=} opt_config A map of options used to configure the field.
|
|
56
|
-
* See the [field creation documentation]{@link
|
|
57
|
-
* https://developers.google.com/blockly/guides/create-custom-blocks/fields/built-in-fields/dropdown#creation}
|
|
58
|
-
* for a list of properties this parameter supports.
|
|
59
|
-
* @throws {TypeError} If `menuGenerator` options are incorrectly structured.
|
|
47
|
+
* Maximum height of the dropdown menu, as a percentage of the viewport
|
|
48
|
+
* height.
|
|
60
49
|
*/
|
|
61
|
-
|
|
62
|
-
|
|
50
|
+
static MAX_MENU_HEIGHT_VH = 0.45;
|
|
51
|
+
static ARROW_CHAR: AnyDuringMigration;
|
|
63
52
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
* @type {?MenuItem}
|
|
67
|
-
* @private
|
|
68
|
-
*/
|
|
69
|
-
this.selectedMenuItem_ = null;
|
|
53
|
+
/** A reference to the currently selected menu item. */
|
|
54
|
+
private selectedMenuItem_: MenuItem|null = null;
|
|
70
55
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
* @type {?Menu}
|
|
74
|
-
* @protected
|
|
75
|
-
*/
|
|
76
|
-
this.menu_ = null;
|
|
56
|
+
/** The dropdown menu. */
|
|
57
|
+
protected menu_: Menu|null = null;
|
|
77
58
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
*/
|
|
83
|
-
this.imageElement_ = null;
|
|
59
|
+
/**
|
|
60
|
+
* SVG image element if currently selected option is an image, or null.
|
|
61
|
+
*/
|
|
62
|
+
private imageElement_: SVGImageElement|null = null;
|
|
84
63
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
* @type {?SVGTSpanElement}
|
|
88
|
-
* @private
|
|
89
|
-
*/
|
|
90
|
-
this.arrow_ = null;
|
|
64
|
+
/** Tspan based arrow element. */
|
|
65
|
+
private arrow_: SVGTSpanElement|null = null;
|
|
91
66
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
* @type {?SVGElement}
|
|
95
|
-
* @private
|
|
96
|
-
*/
|
|
97
|
-
this.svgArrow_ = null;
|
|
67
|
+
/** SVG based arrow element. */
|
|
68
|
+
private svgArrow_: SVGElement|null = null;
|
|
98
69
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
this.SERIALIZABLE = true;
|
|
70
|
+
/**
|
|
71
|
+
* Serializable fields are saved by the serializer, non-serializable fields
|
|
72
|
+
* are not. Editable fields should also be serializable.
|
|
73
|
+
*/
|
|
74
|
+
override SERIALIZABLE = true;
|
|
105
75
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
76
|
+
/** Mouse cursor style when over the hotspot that initiates the editor. */
|
|
77
|
+
override CURSOR = 'default';
|
|
78
|
+
// TODO(b/109816955): remove '!', see go/strict-prop-init-fix.
|
|
79
|
+
protected menuGenerator_!: AnyDuringMigration[][]|
|
|
80
|
+
((this: FieldDropdown) => AnyDuringMigration[][]);
|
|
81
|
+
|
|
82
|
+
/** A cache of the most recently generated options. */
|
|
83
|
+
// AnyDuringMigration because: Type 'null' is not assignable to type
|
|
84
|
+
// 'string[][]'.
|
|
85
|
+
private generatedOptions_: string[][] = null as AnyDuringMigration;
|
|
111
86
|
|
|
87
|
+
/**
|
|
88
|
+
* The prefix field label, of common words set after options are trimmed.
|
|
89
|
+
* @internal
|
|
90
|
+
*/
|
|
91
|
+
override prefixField: string|null = null;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* The suffix field label, of common words set after options are trimmed.
|
|
95
|
+
* @internal
|
|
96
|
+
*/
|
|
97
|
+
override suffixField: string|null = null;
|
|
98
|
+
// TODO(b/109816955): remove '!', see go/strict-prop-init-fix.
|
|
99
|
+
private selectedOption_!: Array<string|ImageProperties>;
|
|
100
|
+
override clickTarget_: AnyDuringMigration;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* @param menuGenerator A non-empty array of options for a dropdown list, or a
|
|
104
|
+
* function which generates these options. Also accepts Field.SKIP_SETUP
|
|
105
|
+
* if you wish to skip setup (only used by subclasses that want to handle
|
|
106
|
+
* configuration and setting the field value after their own constructors
|
|
107
|
+
* have run).
|
|
108
|
+
* @param opt_validator A function that is called to validate changes to the
|
|
109
|
+
* field's value. Takes in a language-neutral dropdown option & returns a
|
|
110
|
+
* validated language-neutral dropdown option, or null to abort the
|
|
111
|
+
* change.
|
|
112
|
+
* @param opt_config A map of options used to configure the field.
|
|
113
|
+
* See the [field creation documentation]{@link
|
|
114
|
+
* https://developers.google.com/blockly/guides/create-custom-blocks/fields/built-in-fields/dropdown#creation}
|
|
115
|
+
* for a list of properties this parameter supports.
|
|
116
|
+
* @throws {TypeError} If `menuGenerator` options are incorrectly structured.
|
|
117
|
+
*/
|
|
118
|
+
constructor(
|
|
119
|
+
menuGenerator: AnyDuringMigration[][]|Function|Sentinel,
|
|
120
|
+
opt_validator?: Function, opt_config?: FieldConfig) {
|
|
121
|
+
super(Field.SKIP_SETUP);
|
|
112
122
|
|
|
113
123
|
// If we pass SKIP_SETUP, don't do *anything* with the menu generator.
|
|
114
|
-
if (menuGenerator === Field.SKIP_SETUP)
|
|
124
|
+
if (menuGenerator === Field.SKIP_SETUP) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
115
127
|
|
|
116
128
|
if (Array.isArray(menuGenerator)) {
|
|
117
129
|
validateOptions(menuGenerator);
|
|
@@ -120,60 +132,34 @@ class FieldDropdown extends Field {
|
|
|
120
132
|
/**
|
|
121
133
|
* An array of options for a dropdown list,
|
|
122
134
|
* or a function which generates these options.
|
|
123
|
-
* @type {(!Array<!Array>|!function(this:FieldDropdown): !Array<!Array>)}
|
|
124
|
-
* @protected
|
|
125
135
|
*/
|
|
126
|
-
this.menuGenerator_ =
|
|
127
|
-
|
|
128
|
-
* @type {(!Array<!Array>|
|
|
129
|
-
* !function(this:FieldDropdown):!Array<!Array>)}
|
|
130
|
-
*/
|
|
131
|
-
(menuGenerator);
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* A cache of the most recently generated options.
|
|
135
|
-
* @type {Array<!Array<string>>}
|
|
136
|
-
* @private
|
|
137
|
-
*/
|
|
138
|
-
this.generatedOptions_ = null;
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* The prefix field label, of common words set after options are trimmed.
|
|
142
|
-
* @type {?string}
|
|
143
|
-
* @package
|
|
144
|
-
*/
|
|
145
|
-
this.prefixField = null;
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* The suffix field label, of common words set after options are trimmed.
|
|
149
|
-
* @type {?string}
|
|
150
|
-
* @package
|
|
151
|
-
*/
|
|
152
|
-
this.suffixField = null;
|
|
136
|
+
this.menuGenerator_ = menuGenerator as AnyDuringMigration[][] |
|
|
137
|
+
((this: FieldDropdown) => AnyDuringMigration[][]);
|
|
153
138
|
|
|
154
139
|
this.trimOptions_();
|
|
155
140
|
|
|
156
141
|
/**
|
|
157
142
|
* The currently selected option. The field is initialized with the
|
|
158
143
|
* first option selected.
|
|
159
|
-
* @type {!Array<string|!ImageProperties>}
|
|
160
|
-
* @private
|
|
161
144
|
*/
|
|
162
145
|
this.selectedOption_ = this.getOptions(false)[0];
|
|
163
146
|
|
|
164
|
-
if (opt_config)
|
|
147
|
+
if (opt_config) {
|
|
148
|
+
this.configure_(opt_config);
|
|
149
|
+
}
|
|
165
150
|
this.setValue(this.selectedOption_[1]);
|
|
166
|
-
if (opt_validator)
|
|
151
|
+
if (opt_validator) {
|
|
152
|
+
this.setValidator(opt_validator);
|
|
153
|
+
}
|
|
167
154
|
}
|
|
168
155
|
|
|
169
156
|
/**
|
|
170
157
|
* Sets the field's value based on the given XML element. Should only be
|
|
171
158
|
* called by Blockly.Xml.
|
|
172
|
-
* @param
|
|
173
|
-
*
|
|
174
|
-
* @package
|
|
159
|
+
* @param fieldElement The element containing info about the field's state.
|
|
160
|
+
* @internal
|
|
175
161
|
*/
|
|
176
|
-
fromXml(fieldElement) {
|
|
162
|
+
override fromXml(fieldElement: Element) {
|
|
177
163
|
if (this.isOptionListDynamic()) {
|
|
178
164
|
this.getOptions(false);
|
|
179
165
|
}
|
|
@@ -182,11 +168,10 @@ class FieldDropdown extends Field {
|
|
|
182
168
|
|
|
183
169
|
/**
|
|
184
170
|
* Sets the field's value based on the given state.
|
|
185
|
-
* @param
|
|
186
|
-
* @
|
|
187
|
-
* @package
|
|
171
|
+
* @param state The state to apply to the dropdown field.
|
|
172
|
+
* @internal
|
|
188
173
|
*/
|
|
189
|
-
loadState(state) {
|
|
174
|
+
override loadState(state: AnyDuringMigration) {
|
|
190
175
|
if (this.loadLegacyState(FieldDropdown, state)) {
|
|
191
176
|
return;
|
|
192
177
|
}
|
|
@@ -198,19 +183,19 @@ class FieldDropdown extends Field {
|
|
|
198
183
|
|
|
199
184
|
/**
|
|
200
185
|
* Create the block UI for this dropdown.
|
|
201
|
-
* @
|
|
186
|
+
* @internal
|
|
202
187
|
*/
|
|
203
|
-
initView() {
|
|
188
|
+
override initView() {
|
|
204
189
|
if (this.shouldAddBorderRect_()) {
|
|
205
190
|
this.createBorderRect_();
|
|
206
191
|
} else {
|
|
207
|
-
this.clickTarget_ = this.sourceBlock_.getSvgRoot();
|
|
192
|
+
this.clickTarget_ = (this.sourceBlock_ as BlockSvg).getSvgRoot();
|
|
208
193
|
}
|
|
209
194
|
this.createTextElement_();
|
|
210
195
|
|
|
211
196
|
this.imageElement_ = dom.createSvgElement(Svg.IMAGE, {}, this.fieldGroup_);
|
|
212
197
|
|
|
213
|
-
if (this.getConstants()
|
|
198
|
+
if (this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW) {
|
|
214
199
|
this.createSVGArrow_();
|
|
215
200
|
} else {
|
|
216
201
|
this.createTextArrow_();
|
|
@@ -223,75 +208,79 @@ class FieldDropdown extends Field {
|
|
|
223
208
|
|
|
224
209
|
/**
|
|
225
210
|
* Whether or not the dropdown should add a border rect.
|
|
226
|
-
* @return
|
|
227
|
-
* @protected
|
|
211
|
+
* @return True if the dropdown field should add a border rect.
|
|
228
212
|
*/
|
|
229
|
-
shouldAddBorderRect_() {
|
|
230
|
-
return !this.getConstants()
|
|
231
|
-
|
|
232
|
-
|
|
213
|
+
protected shouldAddBorderRect_(): boolean {
|
|
214
|
+
return !this.getConstants()!.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW ||
|
|
215
|
+
this.getConstants()!.FIELD_DROPDOWN_NO_BORDER_RECT_SHADOW &&
|
|
216
|
+
!this.sourceBlock_.isShadow();
|
|
233
217
|
}
|
|
234
218
|
|
|
235
|
-
/**
|
|
236
|
-
|
|
237
|
-
* @protected
|
|
238
|
-
*/
|
|
239
|
-
createTextArrow_() {
|
|
219
|
+
/** Create a tspan based arrow. */
|
|
220
|
+
protected createTextArrow_() {
|
|
240
221
|
this.arrow_ = dom.createSvgElement(Svg.TSPAN, {}, this.textElement_);
|
|
241
|
-
this.arrow_
|
|
222
|
+
this.arrow_!.appendChild(document.createTextNode(
|
|
242
223
|
this.sourceBlock_.RTL ? FieldDropdown.ARROW_CHAR + ' ' :
|
|
243
224
|
' ' + FieldDropdown.ARROW_CHAR));
|
|
244
225
|
if (this.sourceBlock_.RTL) {
|
|
245
|
-
|
|
226
|
+
// AnyDuringMigration because: Argument of type 'SVGTSpanElement | null'
|
|
227
|
+
// is not assignable to parameter of type 'Node'.
|
|
228
|
+
this.textElement_.insertBefore(
|
|
229
|
+
this.arrow_ as AnyDuringMigration, this.textContent_);
|
|
246
230
|
} else {
|
|
247
|
-
|
|
231
|
+
// AnyDuringMigration because: Argument of type 'SVGTSpanElement | null'
|
|
232
|
+
// is not assignable to parameter of type 'Node'.
|
|
233
|
+
this.textElement_.appendChild(this.arrow_ as AnyDuringMigration);
|
|
248
234
|
}
|
|
249
235
|
}
|
|
250
236
|
|
|
251
|
-
/**
|
|
252
|
-
|
|
253
|
-
* @protected
|
|
254
|
-
*/
|
|
255
|
-
createSVGArrow_() {
|
|
237
|
+
/** Create an SVG based arrow. */
|
|
238
|
+
protected createSVGArrow_() {
|
|
256
239
|
this.svgArrow_ = dom.createSvgElement(
|
|
257
240
|
Svg.IMAGE, {
|
|
258
|
-
'height': this.getConstants()
|
|
259
|
-
'width': this.getConstants()
|
|
241
|
+
'height': this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_SIZE + 'px',
|
|
242
|
+
'width': this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_SIZE + 'px',
|
|
260
243
|
},
|
|
261
244
|
this.fieldGroup_);
|
|
262
|
-
this.svgArrow_
|
|
245
|
+
this.svgArrow_!.setAttributeNS(
|
|
263
246
|
dom.XLINK_NS, 'xlink:href',
|
|
264
|
-
this.getConstants()
|
|
247
|
+
this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_DATAURI);
|
|
265
248
|
}
|
|
266
249
|
|
|
267
250
|
/**
|
|
268
251
|
* Create a dropdown menu under the text.
|
|
269
|
-
* @param
|
|
270
|
-
*
|
|
271
|
-
* @protected
|
|
252
|
+
* @param opt_e Optional mouse event that triggered the field to open, or
|
|
253
|
+
* undefined if triggered programmatically.
|
|
272
254
|
*/
|
|
273
|
-
showEditor_(opt_e) {
|
|
255
|
+
protected override showEditor_(opt_e?: Event) {
|
|
274
256
|
this.dropdownCreate_();
|
|
275
|
-
|
|
276
|
-
|
|
257
|
+
// AnyDuringMigration because: Property 'clientX' does not exist on type
|
|
258
|
+
// 'Event'.
|
|
259
|
+
if (opt_e && typeof (opt_e as AnyDuringMigration).clientX === 'number') {
|
|
260
|
+
// AnyDuringMigration because: Property 'clientY' does not exist on type
|
|
261
|
+
// 'Event'. AnyDuringMigration because: Property 'clientX' does not exist
|
|
262
|
+
// on type 'Event'.
|
|
263
|
+
this.menu_!.openingCoords = new Coordinate(
|
|
264
|
+
(opt_e as AnyDuringMigration).clientX,
|
|
265
|
+
(opt_e as AnyDuringMigration).clientY);
|
|
277
266
|
} else {
|
|
278
|
-
this.menu_
|
|
267
|
+
this.menu_!.openingCoords = null;
|
|
279
268
|
}
|
|
280
269
|
|
|
281
270
|
// Remove any pre-existing elements in the dropdown.
|
|
282
271
|
dropDownDiv.clearContent();
|
|
283
272
|
// Element gets created in render.
|
|
284
|
-
this.menu_
|
|
285
|
-
const menuElement =
|
|
273
|
+
this.menu_!.render(dropDownDiv.getContentDiv());
|
|
274
|
+
const menuElement = this.menu_!.getElement() as Element;
|
|
286
275
|
dom.addClass(menuElement, 'blocklyDropdownMenu');
|
|
287
276
|
|
|
288
|
-
if (this.getConstants()
|
|
289
|
-
const primaryColour =
|
|
290
|
-
this.sourceBlock_.getParent()
|
|
277
|
+
if (this.getConstants()!.FIELD_DROPDOWN_COLOURED_DIV) {
|
|
278
|
+
const primaryColour = this.sourceBlock_.isShadow() ?
|
|
279
|
+
this.sourceBlock_.getParent()!.getColour() :
|
|
291
280
|
this.sourceBlock_.getColour();
|
|
292
|
-
const borderColour =
|
|
293
|
-
this.sourceBlock_.getParent().style.colourTertiary :
|
|
294
|
-
this.sourceBlock_.style.colourTertiary;
|
|
281
|
+
const borderColour = this.sourceBlock_.isShadow() ?
|
|
282
|
+
(this.sourceBlock_.getParent() as BlockSvg).style.colourTertiary :
|
|
283
|
+
(this.sourceBlock_ as BlockSvg).style.colourTertiary;
|
|
295
284
|
dropDownDiv.setColour(primaryColour, borderColour);
|
|
296
285
|
}
|
|
297
286
|
|
|
@@ -300,20 +289,17 @@ class FieldDropdown extends Field {
|
|
|
300
289
|
// Focusing needs to be handled after the menu is rendered and positioned.
|
|
301
290
|
// Otherwise it will cause a page scroll to get the misplaced menu in
|
|
302
291
|
// view. See issue #1329.
|
|
303
|
-
this.menu_
|
|
292
|
+
this.menu_!.focus();
|
|
304
293
|
|
|
305
294
|
if (this.selectedMenuItem_) {
|
|
306
|
-
this.menu_
|
|
295
|
+
this.menu_!.setHighlighted(this.selectedMenuItem_);
|
|
307
296
|
}
|
|
308
297
|
|
|
309
298
|
this.applyColour();
|
|
310
299
|
}
|
|
311
300
|
|
|
312
|
-
/**
|
|
313
|
-
|
|
314
|
-
* @private
|
|
315
|
-
*/
|
|
316
|
-
dropdownCreate_() {
|
|
301
|
+
/** Create the dropdown editor. */
|
|
302
|
+
private dropdownCreate_() {
|
|
317
303
|
const menu = new Menu();
|
|
318
304
|
menu.setRole(aria.Role.LISTBOX);
|
|
319
305
|
this.menu_ = menu;
|
|
@@ -345,9 +331,8 @@ class FieldDropdown extends Field {
|
|
|
345
331
|
|
|
346
332
|
/**
|
|
347
333
|
* Disposes of events and DOM-references belonging to the dropdown editor.
|
|
348
|
-
* @private
|
|
349
334
|
*/
|
|
350
|
-
dropdownDispose_() {
|
|
335
|
+
private dropdownDispose_() {
|
|
351
336
|
if (this.menu_) {
|
|
352
337
|
this.menu_.dispose();
|
|
353
338
|
}
|
|
@@ -358,30 +343,27 @@ class FieldDropdown extends Field {
|
|
|
358
343
|
|
|
359
344
|
/**
|
|
360
345
|
* Handle an action in the dropdown menu.
|
|
361
|
-
* @param
|
|
362
|
-
* @private
|
|
346
|
+
* @param menuItem The MenuItem selected within menu.
|
|
363
347
|
*/
|
|
364
|
-
handleMenuActionEvent_(menuItem) {
|
|
348
|
+
private handleMenuActionEvent_(menuItem: MenuItem) {
|
|
365
349
|
dropDownDiv.hideIfOwner(this, true);
|
|
366
|
-
this.onItemSelected_(
|
|
350
|
+
this.onItemSelected_(this.menu_ as Menu, menuItem);
|
|
367
351
|
}
|
|
368
352
|
|
|
369
353
|
/**
|
|
370
354
|
* Handle the selection of an item in the dropdown menu.
|
|
371
|
-
* @param
|
|
372
|
-
* @param
|
|
373
|
-
* @protected
|
|
355
|
+
* @param menu The Menu component clicked.
|
|
356
|
+
* @param menuItem The MenuItem selected within menu.
|
|
374
357
|
*/
|
|
375
|
-
onItemSelected_(menu, menuItem) {
|
|
358
|
+
protected onItemSelected_(menu: Menu, menuItem: MenuItem) {
|
|
376
359
|
this.setValue(menuItem.getValue());
|
|
377
360
|
}
|
|
378
361
|
|
|
379
362
|
/**
|
|
380
363
|
* Factor out common words in statically defined options.
|
|
381
364
|
* Create prefix and/or suffix labels.
|
|
382
|
-
* @private
|
|
383
365
|
*/
|
|
384
|
-
trimOptions_() {
|
|
366
|
+
private trimOptions_() {
|
|
385
367
|
const options = this.menuGenerator_;
|
|
386
368
|
if (!Array.isArray(options)) {
|
|
387
369
|
return;
|
|
@@ -429,42 +411,45 @@ class FieldDropdown extends Field {
|
|
|
429
411
|
}
|
|
430
412
|
|
|
431
413
|
/**
|
|
432
|
-
* @return
|
|
414
|
+
* @return True if the option list is generated by a function.
|
|
433
415
|
* Otherwise false.
|
|
434
416
|
*/
|
|
435
|
-
isOptionListDynamic() {
|
|
417
|
+
isOptionListDynamic(): boolean {
|
|
436
418
|
return typeof this.menuGenerator_ === 'function';
|
|
437
419
|
}
|
|
438
420
|
|
|
439
421
|
/**
|
|
440
422
|
* Return a list of the options for this dropdown.
|
|
441
|
-
* @param
|
|
442
|
-
*
|
|
443
|
-
* @return
|
|
423
|
+
* @param opt_useCache For dynamic options, whether or not to use the cached
|
|
424
|
+
* options or to re-generate them.
|
|
425
|
+
* @return A non-empty array of option tuples:
|
|
444
426
|
* (human-readable text or image, language-neutral name).
|
|
445
427
|
* @throws {TypeError} If generated options are incorrectly structured.
|
|
446
428
|
*/
|
|
447
|
-
getOptions(opt_useCache) {
|
|
429
|
+
getOptions(opt_useCache?: boolean): AnyDuringMigration[][] {
|
|
448
430
|
if (this.isOptionListDynamic()) {
|
|
449
431
|
if (!this.generatedOptions_ || !opt_useCache) {
|
|
450
|
-
|
|
432
|
+
// AnyDuringMigration because: Property 'call' does not exist on type
|
|
433
|
+
// 'any[][] | ((this: FieldDropdown) => any[][])'.
|
|
434
|
+
this.generatedOptions_ =
|
|
435
|
+
(this.menuGenerator_ as AnyDuringMigration).call(this);
|
|
451
436
|
validateOptions(this.generatedOptions_);
|
|
452
437
|
}
|
|
453
438
|
return this.generatedOptions_;
|
|
454
439
|
}
|
|
455
|
-
return
|
|
440
|
+
return this.menuGenerator_ as string[][];
|
|
456
441
|
}
|
|
457
442
|
|
|
458
443
|
/**
|
|
459
444
|
* Ensure that the input value is a valid language-neutral option.
|
|
460
|
-
* @param
|
|
461
|
-
* @return
|
|
462
|
-
* @protected
|
|
445
|
+
* @param opt_newValue The input value.
|
|
446
|
+
* @return A valid language-neutral option, or null if invalid.
|
|
463
447
|
*/
|
|
464
|
-
doClassValidation_(opt_newValue)
|
|
448
|
+
protected override doClassValidation_(opt_newValue?: AnyDuringMigration):
|
|
449
|
+
string|null {
|
|
465
450
|
let isValueValid = false;
|
|
466
451
|
const options = this.getOptions(true);
|
|
467
|
-
for (let i = 0, option;
|
|
452
|
+
for (let i = 0, option; option = options[i]; i++) {
|
|
468
453
|
// Options are tuples of human-readable text and language-neutral values.
|
|
469
454
|
if (option[1] === opt_newValue) {
|
|
470
455
|
isValueValid = true;
|
|
@@ -480,19 +465,18 @@ class FieldDropdown extends Field {
|
|
|
480
465
|
}
|
|
481
466
|
return null;
|
|
482
467
|
}
|
|
483
|
-
return
|
|
468
|
+
return opt_newValue as string;
|
|
484
469
|
}
|
|
485
470
|
|
|
486
471
|
/**
|
|
487
472
|
* Update the value of this dropdown field.
|
|
488
|
-
* @param
|
|
489
|
-
*
|
|
490
|
-
* @protected
|
|
473
|
+
* @param newValue The value to be saved. The default validator guarantees
|
|
474
|
+
* that this is one of the valid dropdown options.
|
|
491
475
|
*/
|
|
492
|
-
doValueUpdate_(newValue) {
|
|
476
|
+
protected override doValueUpdate_(newValue: AnyDuringMigration) {
|
|
493
477
|
super.doValueUpdate_(newValue);
|
|
494
478
|
const options = this.getOptions(true);
|
|
495
|
-
for (let i = 0, option;
|
|
479
|
+
for (let i = 0, option; option = options[i]; i++) {
|
|
496
480
|
if (option[1] === this.value_) {
|
|
497
481
|
this.selectedOption_ = option;
|
|
498
482
|
}
|
|
@@ -501,15 +485,14 @@ class FieldDropdown extends Field {
|
|
|
501
485
|
|
|
502
486
|
/**
|
|
503
487
|
* Updates the dropdown arrow to match the colour/style of the block.
|
|
504
|
-
* @
|
|
488
|
+
* @internal
|
|
505
489
|
*/
|
|
506
|
-
applyColour() {
|
|
490
|
+
override applyColour() {
|
|
491
|
+
const style = (this.sourceBlock_ as BlockSvg).style;
|
|
507
492
|
if (this.borderRect_) {
|
|
508
|
-
this.borderRect_.setAttribute(
|
|
509
|
-
'stroke', this.sourceBlock_.style.colourTertiary);
|
|
493
|
+
this.borderRect_.setAttribute('stroke', style.colourTertiary);
|
|
510
494
|
if (this.menu_) {
|
|
511
|
-
this.borderRect_.setAttribute(
|
|
512
|
-
'fill', this.sourceBlock_.style.colourTertiary);
|
|
495
|
+
this.borderRect_.setAttribute('fill', style.colourTertiary);
|
|
513
496
|
} else {
|
|
514
497
|
this.borderRect_.setAttribute('fill', 'transparent');
|
|
515
498
|
}
|
|
@@ -517,27 +500,23 @@ class FieldDropdown extends Field {
|
|
|
517
500
|
// Update arrow's colour.
|
|
518
501
|
if (this.sourceBlock_ && this.arrow_) {
|
|
519
502
|
if (this.sourceBlock_.isShadow()) {
|
|
520
|
-
this.arrow_.style.fill =
|
|
503
|
+
this.arrow_.style.fill = style.colourSecondary;
|
|
521
504
|
} else {
|
|
522
|
-
this.arrow_.style.fill =
|
|
505
|
+
this.arrow_.style.fill = style.colourPrimary;
|
|
523
506
|
}
|
|
524
507
|
}
|
|
525
508
|
}
|
|
526
509
|
|
|
527
|
-
/**
|
|
528
|
-
|
|
529
|
-
* @protected
|
|
530
|
-
*/
|
|
531
|
-
render_() {
|
|
510
|
+
/** Draws the border with the correct width. */
|
|
511
|
+
protected override render_() {
|
|
532
512
|
// Hide both elements.
|
|
533
513
|
this.textContent_.nodeValue = '';
|
|
534
|
-
this.imageElement_
|
|
514
|
+
this.imageElement_!.style.display = 'none';
|
|
535
515
|
|
|
536
516
|
// Show correct element.
|
|
537
517
|
const option = this.selectedOption_ && this.selectedOption_[0];
|
|
538
518
|
if (option && typeof option === 'object') {
|
|
539
|
-
this.renderSelectedImage_(
|
|
540
|
-
/** @type {!ImageProperties} */ (option));
|
|
519
|
+
this.renderSelectedImage_((option));
|
|
541
520
|
} else {
|
|
542
521
|
this.renderSelectedText_();
|
|
543
522
|
}
|
|
@@ -547,16 +526,20 @@ class FieldDropdown extends Field {
|
|
|
547
526
|
|
|
548
527
|
/**
|
|
549
528
|
* Renders the selected option, which must be an image.
|
|
550
|
-
* @param
|
|
551
|
-
* option that must be an image.
|
|
552
|
-
* @private
|
|
529
|
+
* @param imageJson Selected option that must be an image.
|
|
553
530
|
*/
|
|
554
|
-
renderSelectedImage_(imageJson) {
|
|
555
|
-
this.imageElement_
|
|
556
|
-
this.imageElement_
|
|
531
|
+
private renderSelectedImage_(imageJson: ImageProperties) {
|
|
532
|
+
this.imageElement_!.style.display = '';
|
|
533
|
+
this.imageElement_!.setAttributeNS(
|
|
557
534
|
dom.XLINK_NS, 'xlink:href', imageJson.src);
|
|
558
|
-
|
|
559
|
-
|
|
535
|
+
// AnyDuringMigration because: Argument of type 'number' is not assignable
|
|
536
|
+
// to parameter of type 'string'.
|
|
537
|
+
this.imageElement_!.setAttribute(
|
|
538
|
+
'height', imageJson.height as AnyDuringMigration);
|
|
539
|
+
// AnyDuringMigration because: Argument of type 'number' is not assignable
|
|
540
|
+
// to parameter of type 'string'.
|
|
541
|
+
this.imageElement_!.setAttribute(
|
|
542
|
+
'width', imageJson.width as AnyDuringMigration);
|
|
560
543
|
|
|
561
544
|
const imageHeight = Number(imageJson.height);
|
|
562
545
|
const imageWidth = Number(imageJson.width);
|
|
@@ -564,21 +547,21 @@ class FieldDropdown extends Field {
|
|
|
564
547
|
// Height and width include the border rect.
|
|
565
548
|
const hasBorder = !!this.borderRect_;
|
|
566
549
|
const height = Math.max(
|
|
567
|
-
hasBorder ? this.getConstants()
|
|
550
|
+
hasBorder ? this.getConstants()!.FIELD_DROPDOWN_BORDER_RECT_HEIGHT : 0,
|
|
568
551
|
imageHeight + IMAGE_Y_PADDING);
|
|
569
552
|
const xPadding =
|
|
570
|
-
hasBorder ? this.getConstants()
|
|
553
|
+
hasBorder ? this.getConstants()!.FIELD_BORDER_RECT_X_PADDING : 0;
|
|
571
554
|
let arrowWidth = 0;
|
|
572
555
|
if (this.svgArrow_) {
|
|
573
556
|
arrowWidth = this.positionSVGArrow_(
|
|
574
557
|
imageWidth + xPadding,
|
|
575
|
-
height / 2 - this.getConstants()
|
|
558
|
+
height / 2 - this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_SIZE / 2);
|
|
576
559
|
} else {
|
|
577
560
|
arrowWidth = dom.getFastTextWidth(
|
|
578
|
-
|
|
579
|
-
this.getConstants()
|
|
580
|
-
this.getConstants()
|
|
581
|
-
this.getConstants()
|
|
561
|
+
this.arrow_ as SVGTSpanElement,
|
|
562
|
+
this.getConstants()!.FIELD_TEXT_FONTSIZE,
|
|
563
|
+
this.getConstants()!.FIELD_TEXT_FONTWEIGHT,
|
|
564
|
+
this.getConstants()!.FIELD_TEXT_FONTFAMILY);
|
|
582
565
|
}
|
|
583
566
|
this.size_.width = imageWidth + arrowWidth + xPadding * 2;
|
|
584
567
|
this.size_.height = height;
|
|
@@ -586,44 +569,41 @@ class FieldDropdown extends Field {
|
|
|
586
569
|
let arrowX = 0;
|
|
587
570
|
if (this.sourceBlock_.RTL) {
|
|
588
571
|
const imageX = xPadding + arrowWidth;
|
|
589
|
-
this.imageElement_
|
|
572
|
+
this.imageElement_!.setAttribute('x', imageX.toString());
|
|
590
573
|
} else {
|
|
591
574
|
arrowX = imageWidth + arrowWidth;
|
|
592
575
|
this.textElement_.setAttribute('text-anchor', 'end');
|
|
593
|
-
this.imageElement_
|
|
576
|
+
this.imageElement_!.setAttribute('x', xPadding.toString());
|
|
594
577
|
}
|
|
595
|
-
this.imageElement_
|
|
578
|
+
this.imageElement_!.setAttribute(
|
|
579
|
+
'y', (height / 2 - imageHeight / 2).toString());
|
|
596
580
|
|
|
597
581
|
this.positionTextElement_(arrowX + xPadding, imageWidth + arrowWidth);
|
|
598
582
|
}
|
|
599
583
|
|
|
600
|
-
/**
|
|
601
|
-
|
|
602
|
-
* @private
|
|
603
|
-
*/
|
|
604
|
-
renderSelectedText_() {
|
|
584
|
+
/** Renders the selected option, which must be text. */
|
|
585
|
+
private renderSelectedText_() {
|
|
605
586
|
// Retrieves the selected option to display through getText_.
|
|
606
587
|
this.textContent_.nodeValue = this.getDisplayText_();
|
|
607
|
-
dom.addClass(
|
|
608
|
-
/** @type {!Element} */ (this.textElement_), 'blocklyDropdownText');
|
|
588
|
+
dom.addClass(this.textElement_ as Element, 'blocklyDropdownText');
|
|
609
589
|
this.textElement_.setAttribute('text-anchor', 'start');
|
|
610
590
|
|
|
611
591
|
// Height and width include the border rect.
|
|
612
592
|
const hasBorder = !!this.borderRect_;
|
|
613
593
|
const height = Math.max(
|
|
614
|
-
hasBorder ? this.getConstants()
|
|
615
|
-
this.getConstants()
|
|
594
|
+
hasBorder ? this.getConstants()!.FIELD_DROPDOWN_BORDER_RECT_HEIGHT : 0,
|
|
595
|
+
this.getConstants()!.FIELD_TEXT_HEIGHT);
|
|
616
596
|
const textWidth = dom.getFastTextWidth(
|
|
617
|
-
this.textElement_, this.getConstants()
|
|
618
|
-
this.getConstants()
|
|
619
|
-
this.getConstants()
|
|
597
|
+
this.textElement_, this.getConstants()!.FIELD_TEXT_FONTSIZE,
|
|
598
|
+
this.getConstants()!.FIELD_TEXT_FONTWEIGHT,
|
|
599
|
+
this.getConstants()!.FIELD_TEXT_FONTFAMILY);
|
|
620
600
|
const xPadding =
|
|
621
|
-
hasBorder ? this.getConstants()
|
|
601
|
+
hasBorder ? this.getConstants()!.FIELD_BORDER_RECT_X_PADDING : 0;
|
|
622
602
|
let arrowWidth = 0;
|
|
623
603
|
if (this.svgArrow_) {
|
|
624
604
|
arrowWidth = this.positionSVGArrow_(
|
|
625
605
|
textWidth + xPadding,
|
|
626
|
-
height / 2 - this.getConstants()
|
|
606
|
+
height / 2 - this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_SIZE / 2);
|
|
627
607
|
}
|
|
628
608
|
this.size_.width = textWidth + arrowWidth + xPadding * 2;
|
|
629
609
|
this.size_.height = height;
|
|
@@ -633,20 +613,19 @@ class FieldDropdown extends Field {
|
|
|
633
613
|
|
|
634
614
|
/**
|
|
635
615
|
* Position a drop-down arrow at the appropriate location at render-time.
|
|
636
|
-
* @param
|
|
637
|
-
* @param
|
|
638
|
-
* @return
|
|
639
|
-
* @private
|
|
616
|
+
* @param x X position the arrow is being rendered at, in px.
|
|
617
|
+
* @param y Y position the arrow is being rendered at, in px.
|
|
618
|
+
* @return Amount of space the arrow is taking up, in px.
|
|
640
619
|
*/
|
|
641
|
-
positionSVGArrow_(x, y) {
|
|
620
|
+
private positionSVGArrow_(x: number, y: number): number {
|
|
642
621
|
if (!this.svgArrow_) {
|
|
643
622
|
return 0;
|
|
644
623
|
}
|
|
645
624
|
const hasBorder = !!this.borderRect_;
|
|
646
625
|
const xPadding =
|
|
647
|
-
hasBorder ? this.getConstants()
|
|
648
|
-
const textPadding = this.getConstants()
|
|
649
|
-
const svgArrowSize = this.getConstants()
|
|
626
|
+
hasBorder ? this.getConstants()!.FIELD_BORDER_RECT_X_PADDING : 0;
|
|
627
|
+
const textPadding = this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_PADDING;
|
|
628
|
+
const svgArrowSize = this.getConstants()!.FIELD_DROPDOWN_SVG_ARROW_SIZE;
|
|
650
629
|
const arrowX = this.sourceBlock_.RTL ? xPadding : x + textPadding;
|
|
651
630
|
this.svgArrow_.setAttribute(
|
|
652
631
|
'transform', 'translate(' + arrowX + ',' + y + ')');
|
|
@@ -657,11 +636,9 @@ class FieldDropdown extends Field {
|
|
|
657
636
|
* Use the `getText_` developer hook to override the field's text
|
|
658
637
|
* representation. Get the selected option text. If the selected option is an
|
|
659
638
|
* image we return the image alt text.
|
|
660
|
-
* @return
|
|
661
|
-
* @protected
|
|
662
|
-
* @override
|
|
639
|
+
* @return Selected option text.
|
|
663
640
|
*/
|
|
664
|
-
getText_() {
|
|
641
|
+
protected override getText_(): string|null {
|
|
665
642
|
if (!this.selectedOption_) {
|
|
666
643
|
return null;
|
|
667
644
|
}
|
|
@@ -674,27 +651,35 @@ class FieldDropdown extends Field {
|
|
|
674
651
|
|
|
675
652
|
/**
|
|
676
653
|
* Construct a FieldDropdown from a JSON arg object.
|
|
677
|
-
* @param
|
|
678
|
-
* @return
|
|
679
|
-
* @package
|
|
654
|
+
* @param options A JSON object with options (options).
|
|
655
|
+
* @return The new field instance.
|
|
680
656
|
* @nocollapse
|
|
657
|
+
* @internal
|
|
681
658
|
*/
|
|
682
|
-
static fromJson(options) {
|
|
659
|
+
static fromJson(options: FieldDropdownFromJsonConfig): FieldDropdown {
|
|
660
|
+
if (!options.options) {
|
|
661
|
+
throw new Error(
|
|
662
|
+
'options are required for the dropdown field. The ' +
|
|
663
|
+
'options property must be assigned an array of ' +
|
|
664
|
+
'[humanReadableValue, languageNeutralValue] tuples.');
|
|
665
|
+
}
|
|
683
666
|
// `this` might be a subclass of FieldDropdown if that class doesn't
|
|
684
667
|
// override the static fromJson method.
|
|
685
|
-
return new this(options
|
|
668
|
+
return new this(options.options, undefined, options);
|
|
686
669
|
}
|
|
687
670
|
|
|
688
671
|
/**
|
|
689
672
|
* Use the calculated prefix and suffix lengths to trim all of the options in
|
|
690
673
|
* the given array.
|
|
691
|
-
* @param
|
|
674
|
+
* @param options Array of option tuples:
|
|
692
675
|
* (human-readable text or image, language-neutral name).
|
|
693
|
-
* @param
|
|
694
|
-
* @param
|
|
695
|
-
* @return
|
|
676
|
+
* @param prefixLength The length of the common prefix.
|
|
677
|
+
* @param suffixLength The length of the common suffix
|
|
678
|
+
* @return A new array with all of the option text trimmed.
|
|
696
679
|
*/
|
|
697
|
-
static applyTrim_(
|
|
680
|
+
static applyTrim_(
|
|
681
|
+
options: AnyDuringMigration[][], prefixLength: number,
|
|
682
|
+
suffixLength: number): AnyDuringMigration[][] {
|
|
698
683
|
const newOptions = [];
|
|
699
684
|
// Remove the prefix and suffix from the options.
|
|
700
685
|
for (let i = 0; i < options.length; i++) {
|
|
@@ -708,52 +693,47 @@ class FieldDropdown extends Field {
|
|
|
708
693
|
}
|
|
709
694
|
|
|
710
695
|
/**
|
|
711
|
-
*
|
|
712
|
-
* @typedef {{
|
|
713
|
-
* src:string,
|
|
714
|
-
* alt:string,
|
|
715
|
-
* width:number,
|
|
716
|
-
* height:number
|
|
717
|
-
* }}
|
|
696
|
+
* Definition of a human-readable image dropdown option.
|
|
718
697
|
*/
|
|
719
|
-
|
|
698
|
+
export interface ImageProperties {
|
|
699
|
+
src: string;
|
|
700
|
+
alt: string;
|
|
701
|
+
width: number;
|
|
702
|
+
height: number;
|
|
703
|
+
}
|
|
720
704
|
|
|
721
705
|
/**
|
|
722
|
-
*
|
|
706
|
+
* An individual option in the dropdown menu. The first element is the human-
|
|
707
|
+
* readable value (text or image), and the second element is the language-
|
|
708
|
+
* neutral value.
|
|
723
709
|
*/
|
|
724
|
-
|
|
710
|
+
export type MenuOption = [string | ImageProperties, string];
|
|
725
711
|
|
|
726
712
|
/**
|
|
727
|
-
*
|
|
713
|
+
* fromJson config for the dropdown field.
|
|
728
714
|
*/
|
|
729
|
-
|
|
715
|
+
export interface FieldDropdownFromJsonConfig extends FieldConfig {
|
|
716
|
+
options?: MenuOption[];
|
|
717
|
+
}
|
|
730
718
|
|
|
731
719
|
/**
|
|
732
720
|
* The y offset from the top of the field to the top of the image, if an image
|
|
733
721
|
* is selected.
|
|
734
|
-
* @type {number}
|
|
735
|
-
* @const
|
|
736
722
|
*/
|
|
737
723
|
const IMAGE_Y_OFFSET = 5;
|
|
738
724
|
|
|
739
|
-
/**
|
|
740
|
-
|
|
741
|
-
* @type {number}
|
|
742
|
-
* @const
|
|
743
|
-
*/
|
|
744
|
-
const IMAGE_Y_PADDING = IMAGE_Y_OFFSET * 2;
|
|
725
|
+
/** The total vertical padding above and below an image. */
|
|
726
|
+
const IMAGE_Y_PADDING: number = IMAGE_Y_OFFSET * 2;
|
|
745
727
|
|
|
746
|
-
/**
|
|
747
|
-
* Android can't (in 2014) display "▾", so use "▼" instead.
|
|
748
|
-
*/
|
|
728
|
+
/** Android can't (in 2014) display "▾", so use "▼" instead. */
|
|
749
729
|
FieldDropdown.ARROW_CHAR = userAgent.ANDROID ? '\u25BC' : '\u25BE';
|
|
750
730
|
|
|
751
731
|
/**
|
|
752
732
|
* Validates the data structure to be processed as an options list.
|
|
753
|
-
* @param
|
|
733
|
+
* @param options The proposed dropdown options.
|
|
754
734
|
* @throws {TypeError} If proposed options are incorrectly structured.
|
|
755
735
|
*/
|
|
756
|
-
|
|
736
|
+
function validateOptions(options: AnyDuringMigration) {
|
|
757
737
|
if (!Array.isArray(options)) {
|
|
758
738
|
throw TypeError('FieldDropdown options must be an array.');
|
|
759
739
|
}
|
|
@@ -776,8 +756,8 @@ const validateOptions = function(options) {
|
|
|
776
756
|
'a string. Found ' + tuple[1] + ' in: ',
|
|
777
757
|
tuple);
|
|
778
758
|
} else if (
|
|
779
|
-
tuple[0] &&
|
|
780
|
-
|
|
759
|
+
tuple[0] && typeof tuple[0] !== 'string' &&
|
|
760
|
+
typeof tuple[0].src !== 'string') {
|
|
781
761
|
foundError = true;
|
|
782
762
|
console.error(
|
|
783
763
|
'Invalid option[' + i + ']: Each FieldDropdown option must have a ' +
|
|
@@ -788,8 +768,6 @@ const validateOptions = function(options) {
|
|
|
788
768
|
if (foundError) {
|
|
789
769
|
throw TypeError('Found invalid FieldDropdown options.');
|
|
790
770
|
}
|
|
791
|
-
}
|
|
771
|
+
}
|
|
792
772
|
|
|
793
773
|
fieldRegistry.register('field_dropdown', FieldDropdown);
|
|
794
|
-
|
|
795
|
-
exports.FieldDropdown = FieldDropdown;
|