blockly 7.20211209.4 → 8.0.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.d.ts +18963 -18432
- package/blockly.min.js +852 -844
- package/blockly_compressed.js +669 -664
- package/blockly_compressed.js.map +1 -1
- package/blocks/blocks.js +47 -0
- package/blocks/colour.js +13 -3
- package/blocks/lists.js +22 -13
- package/blocks/logic.js +13 -3
- package/blocks/loops.js +24 -11
- package/blocks/math.js +12 -3
- package/blocks/procedures.js +41 -27
- package/blocks/text.js +22 -13
- package/blocks/variables.js +14 -3
- package/blocks/variables_dynamic.js +13 -3
- package/blocks_compressed.js +146 -141
- package/blocks_compressed.js.map +1 -1
- package/core/block.js +1869 -1814
- package/core/block_drag_surface.js +201 -200
- package/core/block_dragger.js +377 -373
- package/core/block_svg.js +1593 -1479
- package/core/blockly.js +8 -22
- package/core/blocks.js +9 -2
- package/core/browser_events.js +22 -5
- package/core/bubble.js +841 -797
- package/core/bubble_dragger.js +213 -206
- package/core/bump_objects.js +2 -2
- package/core/clipboard.js +9 -9
- package/core/comment.js +353 -332
- package/core/common.js +46 -17
- package/core/component_manager.js +181 -174
- package/core/config.js +87 -0
- package/core/connection.js +595 -584
- package/core/connection_checker.js +242 -244
- package/core/connection_db.js +235 -230
- package/core/contextmenu.js +9 -6
- package/core/contextmenu_items.js +1 -2
- package/core/contextmenu_registry.js +93 -89
- package/core/css.js +474 -474
- package/core/delete_area.js +45 -42
- package/core/drag_target.js +57 -56
- package/core/dropdowndiv.js +153 -163
- package/core/events/events.js +2 -2
- package/core/events/events_abstract.js +89 -77
- package/core/events/events_block_base.js +37 -36
- package/core/events/events_block_change.js +130 -124
- package/core/events/events_block_create.js +73 -71
- package/core/events/events_block_delete.js +84 -82
- package/core/events/events_block_drag.js +50 -49
- package/core/events/events_block_move.js +147 -140
- package/core/events/events_bubble_open.js +51 -50
- package/core/events/events_click.js +48 -44
- package/core/events/events_comment_base.js +72 -69
- package/core/events/events_comment_change.js +63 -61
- package/core/events/events_comment_create.js +44 -42
- package/core/events/events_comment_delete.js +42 -40
- package/core/events/events_comment_move.js +106 -104
- package/core/events/events_marker_move.js +65 -64
- package/core/events/events_selected.js +46 -45
- package/core/events/events_theme_change.js +36 -35
- package/core/events/events_toolbox_item_select.js +46 -45
- package/core/events/events_trashcan_open.js +37 -36
- package/core/events/events_ui.js +47 -46
- package/core/events/events_ui_base.js +30 -29
- package/core/events/events_var_base.js +37 -36
- package/core/events/events_var_create.js +50 -48
- package/core/events/events_var_delete.js +50 -48
- package/core/events/events_var_rename.js +51 -49
- package/core/events/events_viewport.js +66 -65
- package/core/events/utils.js +29 -14
- package/core/events/workspace_events.js +49 -55
- package/core/extensions.js +4 -3
- package/core/field.js +1061 -997
- package/core/field_angle.js +462 -442
- package/core/field_checkbox.js +194 -182
- package/core/field_colour.js +519 -505
- package/core/field_dropdown.js +617 -598
- package/core/field_image.js +229 -220
- package/core/field_label.js +102 -91
- package/core/field_label_serializable.js +42 -41
- package/core/field_multilineinput.js +372 -358
- package/core/field_number.js +272 -253
- package/core/field_textinput.js +499 -467
- package/core/field_variable.js +458 -420
- package/core/flyout_base.js +1005 -952
- package/core/flyout_button.js +277 -260
- package/core/flyout_horizontal.js +304 -302
- package/core/flyout_metrics_manager.js +64 -64
- package/core/flyout_vertical.js +306 -300
- package/core/generator.js +459 -446
- package/core/gesture.js +829 -813
- package/core/grid.js +166 -163
- package/core/icon.js +168 -159
- package/core/inject.js +7 -5
- package/core/input.js +257 -248
- package/core/insertion_marker_manager.js +655 -624
- package/core/internal_constants.js +0 -129
- package/core/keyboard_nav/ast_node.js +605 -596
- package/core/keyboard_nav/basic_cursor.js +166 -165
- package/core/keyboard_nav/cursor.js +99 -97
- package/core/keyboard_nav/marker.js +83 -79
- package/core/keyboard_nav/tab_navigate_cursor.js +18 -23
- package/core/marker_manager.js +153 -141
- package/core/menu.js +377 -372
- package/core/menuitem.js +223 -217
- package/core/metrics_manager.js +403 -390
- package/core/mutator.js +468 -437
- package/core/names.js +229 -188
- package/core/options.js +290 -284
- package/core/procedures.js +29 -17
- package/core/registry.js +19 -16
- package/core/rendered_connection.js +482 -463
- package/core/renderers/common/block_rendering.js +9 -3
- package/core/renderers/common/constants.js +1119 -1112
- package/core/renderers/common/debug.js +14 -0
- package/core/renderers/common/debugger.js +338 -316
- package/core/renderers/common/drawer.js +380 -370
- package/core/renderers/common/i_path_object.js +2 -2
- package/core/renderers/common/info.js +626 -618
- package/core/renderers/common/marker_svg.js +579 -541
- package/core/renderers/common/path_object.js +203 -200
- package/core/renderers/common/renderer.js +220 -218
- package/core/renderers/geras/constants.js +36 -36
- package/core/renderers/geras/drawer.js +155 -147
- package/core/renderers/geras/highlight_constants.js +244 -238
- package/core/renderers/geras/highlighter.js +231 -179
- package/core/renderers/geras/info.js +392 -369
- package/core/renderers/geras/measurables/inline_input.js +25 -19
- package/core/renderers/geras/measurables/statement_input.js +23 -17
- package/core/renderers/geras/path_object.js +106 -121
- package/core/renderers/geras/renderer.js +96 -98
- package/core/renderers/measurables/base.js +30 -18
- package/core/renderers/measurables/bottom_row.js +83 -80
- package/core/renderers/measurables/connection.js +22 -15
- package/core/renderers/measurables/external_value_input.js +35 -22
- package/core/renderers/measurables/field.js +35 -20
- package/core/renderers/measurables/hat.js +18 -13
- package/core/renderers/measurables/icon.js +24 -17
- package/core/renderers/measurables/in_row_spacer.js +15 -13
- package/core/renderers/measurables/inline_input.js +43 -33
- package/core/renderers/measurables/input_connection.js +41 -28
- package/core/renderers/measurables/input_row.js +50 -44
- package/core/renderers/measurables/jagged_edge.js +14 -12
- package/core/renderers/measurables/next_connection.js +16 -14
- package/core/renderers/measurables/output_connection.js +26 -20
- package/core/renderers/measurables/previous_connection.js +16 -15
- package/core/renderers/measurables/round_corner.js +20 -18
- package/core/renderers/measurables/row.js +184 -168
- package/core/renderers/measurables/spacer_row.js +38 -23
- package/core/renderers/measurables/square_corner.js +18 -16
- package/core/renderers/measurables/statement_input.js +23 -20
- package/core/renderers/measurables/top_row.js +88 -85
- package/core/renderers/minimalist/constants.js +8 -7
- package/core/renderers/minimalist/drawer.js +11 -10
- package/core/renderers/minimalist/info.js +18 -18
- package/core/renderers/minimalist/renderer.js +40 -39
- package/core/renderers/thrasos/info.js +258 -248
- package/core/renderers/thrasos/renderer.js +20 -20
- package/core/renderers/zelos/constants.js +898 -873
- package/core/renderers/zelos/drawer.js +186 -169
- package/core/renderers/zelos/info.js +502 -479
- package/core/renderers/zelos/marker_svg.js +129 -115
- package/core/renderers/zelos/measurables/bottom_row.js +31 -30
- package/core/renderers/zelos/measurables/inputs.js +22 -21
- package/core/renderers/zelos/measurables/row_elements.js +14 -13
- package/core/renderers/zelos/measurables/top_row.js +34 -33
- package/core/renderers/zelos/path_object.js +181 -180
- package/core/renderers/zelos/renderer.js +91 -92
- package/core/scrollbar.js +759 -713
- package/core/scrollbar_pair.js +250 -245
- package/core/serialization/blocks.js +19 -9
- package/core/serialization/workspaces.js +3 -2
- package/core/shortcut_registry.js +286 -277
- package/core/sprites.js +31 -0
- package/core/theme.js +135 -141
- package/core/theme_manager.js +147 -143
- package/core/toolbox/category.js +602 -576
- package/core/toolbox/collapsible_category.js +226 -227
- package/core/toolbox/separator.js +70 -61
- package/core/toolbox/toolbox.js +934 -927
- package/core/toolbox/toolbox_item.js +115 -99
- package/core/tooltip.js +108 -35
- package/core/touch.js +8 -3
- package/core/touch_gesture.js +254 -251
- package/core/trashcan.js +606 -595
- package/core/utils/coordinate.js +97 -95
- package/core/utils/dom.js +2 -2
- package/core/utils/global.js +2 -0
- package/core/utils/rect.js +41 -37
- package/core/utils/sentinel.js +25 -0
- package/core/utils/size.js +30 -27
- package/core/utils/svg.js +18 -16
- package/core/variable_map.js +325 -341
- package/core/variable_model.js +55 -54
- package/core/variables.js +9 -2
- package/core/variables_dynamic.js +3 -1
- package/core/warning.js +126 -120
- package/core/widgetdiv.js +4 -4
- package/core/workspace.js +685 -664
- package/core/workspace_audio.js +124 -118
- package/core/workspace_comment.js +308 -298
- package/core/workspace_comment_svg.js +1029 -951
- package/core/workspace_drag_surface_svg.js +147 -140
- package/core/workspace_dragger.js +70 -71
- package/core/workspace_svg.js +2322 -2297
- package/core/xml.js +30 -20
- package/core/zoom_controls.js +431 -439
- package/dart_compressed.js +40 -43
- package/dart_compressed.js.map +1 -1
- package/generators/dart/colour.js +56 -64
- package/generators/dart/lists.js +61 -50
- package/generators/dart/math.js +160 -148
- package/generators/dart/text.js +83 -61
- package/generators/javascript/colour.js +37 -34
- package/generators/javascript/lists.js +50 -43
- package/generators/javascript/math.js +123 -139
- package/generators/javascript/text.js +67 -81
- package/generators/lua/colour.js +25 -23
- package/generators/lua/lists.js +97 -69
- package/generators/lua/logic.js +1 -2
- package/generators/lua/math.js +182 -144
- package/generators/lua/text.js +116 -99
- package/generators/php/colour.js +38 -32
- package/generators/php/lists.js +109 -89
- package/generators/php/math.js +90 -81
- package/generators/php/text.js +63 -61
- package/generators/python/colour.js +18 -18
- package/generators/python/lists.js +38 -30
- package/generators/python/loops.js +12 -8
- package/generators/python/math.js +104 -106
- package/generators/python/text.js +34 -30
- package/javascript_compressed.js +37 -39
- package/javascript_compressed.js.map +1 -1
- package/lua_compressed.js +39 -42
- package/lua_compressed.js.map +1 -1
- package/msg/az.js +2 -2
- package/msg/be.js +4 -4
- package/msg/cs.js +15 -15
- package/msg/de.js +1 -1
- package/msg/diq.js +1 -1
- package/msg/eo.js +1 -1
- package/msg/es.js +1 -1
- package/msg/fa.js +1 -1
- package/msg/fr.js +4 -4
- package/msg/he.js +1 -1
- package/msg/hr.js +2 -2
- package/msg/hy.js +2 -2
- package/msg/id.js +12 -12
- package/msg/inh.js +14 -14
- package/msg/ja.js +7 -7
- package/msg/lv.js +29 -29
- package/msg/pa.js +3 -3
- package/msg/smn.js +436 -0
- package/msg/te.js +1 -1
- package/msg/yue.js +1 -1
- package/msg/zh-hans.js +3 -3
- package/msg/zh-hant.js +3 -3
- package/package.json +7 -6
- package/php_compressed.js +38 -42
- package/php_compressed.js.map +1 -1
- package/python_compressed.js +26 -25
- package/python_compressed.js.map +1 -1
- package/blocks/all.js +0 -23
|
@@ -17,7 +17,6 @@ goog.module('Blockly.CollapsibleToolboxCategory');
|
|
|
17
17
|
|
|
18
18
|
const aria = goog.require('Blockly.utils.aria');
|
|
19
19
|
const dom = goog.require('Blockly.utils.dom');
|
|
20
|
-
const object = goog.require('Blockly.utils.object');
|
|
21
20
|
const registry = goog.require('Blockly.registry');
|
|
22
21
|
const toolbox = goog.require('Blockly.utils.toolbox');
|
|
23
22
|
/* eslint-disable-next-line no-unused-vars */
|
|
@@ -32,277 +31,277 @@ const {ToolboxSeparator} = goog.require('Blockly.ToolboxSeparator');
|
|
|
32
31
|
|
|
33
32
|
/**
|
|
34
33
|
* Class for a category in a toolbox that can be collapsed.
|
|
35
|
-
* @param {!toolbox.CategoryInfo} categoryDef The information needed
|
|
36
|
-
* to create a category in the toolbox.
|
|
37
|
-
* @param {!IToolbox} toolbox The parent toolbox for the category.
|
|
38
|
-
* @param {ICollapsibleToolboxItem=} opt_parent The parent category or null if
|
|
39
|
-
* the category does not have a parent.
|
|
40
|
-
* @constructor
|
|
41
|
-
* @extends {ToolboxCategory}
|
|
42
34
|
* @implements {ICollapsibleToolboxItem}
|
|
43
35
|
* @alias Blockly.CollapsibleToolboxCategory
|
|
44
36
|
*/
|
|
45
|
-
|
|
37
|
+
class CollapsibleToolboxCategory extends ToolboxCategory {
|
|
46
38
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* @
|
|
39
|
+
* @param {!toolbox.CategoryInfo} categoryDef The information needed
|
|
40
|
+
* to create a category in the toolbox.
|
|
41
|
+
* @param {!IToolbox} toolbox The parent toolbox for the category.
|
|
42
|
+
* @param {ICollapsibleToolboxItem=} opt_parent The parent category or null if
|
|
43
|
+
* the category does not have a parent.
|
|
50
44
|
*/
|
|
51
|
-
|
|
45
|
+
constructor(categoryDef, toolbox, opt_parent) {
|
|
46
|
+
super(categoryDef, toolbox, opt_parent);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Container for any child categories.
|
|
50
|
+
* @type {?HTMLDivElement}
|
|
51
|
+
* @protected
|
|
52
|
+
*/
|
|
53
|
+
this.subcategoriesDiv_ = null;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Whether or not the category should display its subcategories.
|
|
57
|
+
* @type {boolean}
|
|
58
|
+
* @protected
|
|
59
|
+
*/
|
|
60
|
+
this.expanded_ = false;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The child toolbox items for this category.
|
|
64
|
+
* @type {!Array<!IToolboxItem>}
|
|
65
|
+
* @protected
|
|
66
|
+
*/
|
|
67
|
+
this.toolboxItems_ = [];
|
|
68
|
+
}
|
|
52
69
|
|
|
53
70
|
/**
|
|
54
|
-
*
|
|
55
|
-
* @type {boolean}
|
|
56
|
-
* @protected
|
|
71
|
+
* @override
|
|
57
72
|
*/
|
|
58
|
-
|
|
73
|
+
makeDefaultCssConfig_() {
|
|
74
|
+
const cssConfig = super.makeDefaultCssConfig_();
|
|
75
|
+
cssConfig['contents'] = 'blocklyToolboxContents';
|
|
76
|
+
return cssConfig;
|
|
77
|
+
}
|
|
59
78
|
|
|
60
79
|
/**
|
|
61
|
-
*
|
|
62
|
-
* @type {!Array<!IToolboxItem>}
|
|
63
|
-
* @protected
|
|
80
|
+
* @override
|
|
64
81
|
*/
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
*/
|
|
88
|
-
CollapsibleToolboxCategory.CssConfig;
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Name used for registering a collapsible toolbox category.
|
|
92
|
-
* @const {string}
|
|
93
|
-
*/
|
|
94
|
-
CollapsibleToolboxCategory.registrationName = 'collapsibleCategory';
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* @override
|
|
98
|
-
*/
|
|
99
|
-
CollapsibleToolboxCategory.prototype.makeDefaultCssConfig_ = function() {
|
|
100
|
-
const cssConfig =
|
|
101
|
-
CollapsibleToolboxCategory.superClass_.makeDefaultCssConfig_.call(this);
|
|
102
|
-
cssConfig['contents'] = 'blocklyToolboxContents';
|
|
103
|
-
return cssConfig;
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* @override
|
|
108
|
-
*/
|
|
109
|
-
CollapsibleToolboxCategory.prototype.parseContents_ = function(categoryDef) {
|
|
110
|
-
const contents = categoryDef['contents'];
|
|
111
|
-
let prevIsFlyoutItem = true;
|
|
112
|
-
|
|
113
|
-
if (categoryDef['custom']) {
|
|
114
|
-
this.flyoutItems_ = categoryDef['custom'];
|
|
115
|
-
} else if (contents) {
|
|
116
|
-
for (let i = 0; i < contents.length; i++) {
|
|
117
|
-
const itemDef = contents[i];
|
|
118
|
-
// Separators can exist as either a flyout item or a toolbox item so
|
|
119
|
-
// decide where it goes based on the type of the previous item.
|
|
120
|
-
if (!registry.hasItem(registry.Type.TOOLBOX_ITEM, itemDef['kind']) ||
|
|
121
|
-
(itemDef['kind'].toLowerCase() ===
|
|
122
|
-
ToolboxSeparator.registrationName &&
|
|
123
|
-
prevIsFlyoutItem)) {
|
|
124
|
-
const flyoutItem = /** @type {toolbox.FlyoutItemInfo} */ (itemDef);
|
|
125
|
-
this.flyoutItems_.push(flyoutItem);
|
|
126
|
-
prevIsFlyoutItem = true;
|
|
127
|
-
} else {
|
|
128
|
-
this.createToolboxItem_(itemDef);
|
|
129
|
-
prevIsFlyoutItem = false;
|
|
82
|
+
parseContents_(categoryDef) {
|
|
83
|
+
const contents = categoryDef['contents'];
|
|
84
|
+
let prevIsFlyoutItem = true;
|
|
85
|
+
|
|
86
|
+
if (categoryDef['custom']) {
|
|
87
|
+
this.flyoutItems_ = categoryDef['custom'];
|
|
88
|
+
} else if (contents) {
|
|
89
|
+
for (let i = 0; i < contents.length; i++) {
|
|
90
|
+
const itemDef = contents[i];
|
|
91
|
+
// Separators can exist as either a flyout item or a toolbox item so
|
|
92
|
+
// decide where it goes based on the type of the previous item.
|
|
93
|
+
if (!registry.hasItem(registry.Type.TOOLBOX_ITEM, itemDef['kind']) ||
|
|
94
|
+
(itemDef['kind'].toLowerCase() ===
|
|
95
|
+
ToolboxSeparator.registrationName &&
|
|
96
|
+
prevIsFlyoutItem)) {
|
|
97
|
+
const flyoutItem = /** @type {toolbox.FlyoutItemInfo} */ (itemDef);
|
|
98
|
+
this.flyoutItems_.push(flyoutItem);
|
|
99
|
+
prevIsFlyoutItem = true;
|
|
100
|
+
} else {
|
|
101
|
+
this.createToolboxItem_(itemDef);
|
|
102
|
+
prevIsFlyoutItem = false;
|
|
103
|
+
}
|
|
130
104
|
}
|
|
131
105
|
}
|
|
132
106
|
}
|
|
133
|
-
};
|
|
134
107
|
|
|
135
|
-
/**
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Creates a toolbox item and adds it to the list of toolbox items.
|
|
110
|
+
* @param {!toolbox.ToolboxItemInfo} itemDef The information needed
|
|
111
|
+
* to create a toolbox item.
|
|
112
|
+
* @private
|
|
113
|
+
*/
|
|
114
|
+
createToolboxItem_(itemDef) {
|
|
115
|
+
let registryName = itemDef['kind'];
|
|
116
|
+
const categoryDef = /** @type {!toolbox.CategoryInfo} */ (itemDef);
|
|
117
|
+
|
|
118
|
+
// Categories that are collapsible are created using a class registered
|
|
119
|
+
// under a different name.
|
|
120
|
+
if (registryName.toUpperCase() == 'CATEGORY' &&
|
|
121
|
+
toolbox.isCategoryCollapsible(categoryDef)) {
|
|
122
|
+
registryName = CollapsibleToolboxCategory.registrationName;
|
|
123
|
+
}
|
|
124
|
+
const ToolboxItemClass =
|
|
125
|
+
registry.getClass(registry.Type.TOOLBOX_ITEM, registryName);
|
|
126
|
+
const toolboxItem =
|
|
127
|
+
new ToolboxItemClass(itemDef, this.parentToolbox_, this);
|
|
128
|
+
this.toolboxItems_.push(toolboxItem);
|
|
150
129
|
}
|
|
151
|
-
const ToolboxItemClass =
|
|
152
|
-
registry.getClass(registry.Type.TOOLBOX_ITEM, registryName);
|
|
153
|
-
const toolboxItem = new ToolboxItemClass(itemDef, this.parentToolbox_, this);
|
|
154
|
-
this.toolboxItems_.push(toolboxItem);
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* @override
|
|
159
|
-
*/
|
|
160
|
-
CollapsibleToolboxCategory.prototype.init = function() {
|
|
161
|
-
CollapsibleToolboxCategory.superClass_.init.call(this);
|
|
162
130
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
131
|
+
/**
|
|
132
|
+
* @override
|
|
133
|
+
*/
|
|
134
|
+
init() {
|
|
135
|
+
super.init();
|
|
167
136
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
CollapsibleToolboxCategory.superClass_.createDom_.call(this);
|
|
137
|
+
this.setExpanded(
|
|
138
|
+
this.toolboxItemDef_['expanded'] === 'true' ||
|
|
139
|
+
this.toolboxItemDef_['expanded']);
|
|
140
|
+
}
|
|
173
141
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
142
|
+
/**
|
|
143
|
+
* @override
|
|
144
|
+
*/
|
|
145
|
+
createDom_() {
|
|
146
|
+
super.createDom_();
|
|
178
147
|
|
|
179
|
-
|
|
180
|
-
|
|
148
|
+
const subCategories = this.getChildToolboxItems();
|
|
149
|
+
this.subcategoriesDiv_ = this.createSubCategoriesDom_(subCategories);
|
|
150
|
+
aria.setRole(this.subcategoriesDiv_, aria.Role.GROUP);
|
|
151
|
+
this.htmlDiv_.appendChild(this.subcategoriesDiv_);
|
|
181
152
|
|
|
182
|
-
|
|
183
|
-
* @override
|
|
184
|
-
*/
|
|
185
|
-
CollapsibleToolboxCategory.prototype.createIconDom_ = function() {
|
|
186
|
-
const toolboxIcon = document.createElement('span');
|
|
187
|
-
if (!this.parentToolbox_.isHorizontal()) {
|
|
188
|
-
dom.addClass(toolboxIcon, this.cssConfig_['icon']);
|
|
189
|
-
toolboxIcon.style.visibility = 'visible';
|
|
153
|
+
return this.htmlDiv_;
|
|
190
154
|
}
|
|
191
155
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
156
|
+
/**
|
|
157
|
+
* @override
|
|
158
|
+
*/
|
|
159
|
+
createIconDom_() {
|
|
160
|
+
const toolboxIcon = document.createElement('span');
|
|
161
|
+
if (!this.parentToolbox_.isHorizontal()) {
|
|
162
|
+
dom.addClass(toolboxIcon, this.cssConfig_['icon']);
|
|
163
|
+
toolboxIcon.style.visibility = 'visible';
|
|
164
|
+
}
|
|
195
165
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
newCategory.
|
|
166
|
+
toolboxIcon.style.display = 'inline-block';
|
|
167
|
+
return toolboxIcon;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Create the DOM for all subcategories.
|
|
172
|
+
* @param {!Array<!IToolboxItem>} subcategories The subcategories.
|
|
173
|
+
* @return {!HTMLDivElement} The div holding all the subcategories.
|
|
174
|
+
* @protected
|
|
175
|
+
*/
|
|
176
|
+
createSubCategoriesDom_(subcategories) {
|
|
177
|
+
const contentsContainer =
|
|
178
|
+
/** @type {!HTMLDivElement} */ (document.createElement('div'));
|
|
179
|
+
dom.addClass(contentsContainer, this.cssConfig_['contents']);
|
|
180
|
+
|
|
181
|
+
for (let i = 0; i < subcategories.length; i++) {
|
|
182
|
+
const newCategory = subcategories[i];
|
|
183
|
+
newCategory.init();
|
|
184
|
+
const newCategoryDiv = newCategory.getDiv();
|
|
185
|
+
contentsContainer.appendChild(newCategoryDiv);
|
|
186
|
+
if (newCategory.getClickTarget) {
|
|
187
|
+
newCategory.getClickTarget().setAttribute('id', newCategory.getId());
|
|
188
|
+
}
|
|
214
189
|
}
|
|
190
|
+
return contentsContainer;
|
|
215
191
|
}
|
|
216
|
-
return contentsContainer;
|
|
217
|
-
};
|
|
218
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Opens or closes the current category.
|
|
195
|
+
* @param {boolean} isExpanded True to expand the category, false to close.
|
|
196
|
+
* @public
|
|
197
|
+
*/
|
|
198
|
+
setExpanded(isExpanded) {
|
|
199
|
+
if (this.expanded_ === isExpanded) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
this.expanded_ = isExpanded;
|
|
203
|
+
if (isExpanded) {
|
|
204
|
+
this.subcategoriesDiv_.style.display = 'block';
|
|
205
|
+
this.openIcon_(this.iconDom_);
|
|
206
|
+
} else {
|
|
207
|
+
this.subcategoriesDiv_.style.display = 'none';
|
|
208
|
+
this.closeIcon_(this.iconDom_);
|
|
209
|
+
}
|
|
210
|
+
aria.setState(
|
|
211
|
+
/** @type {!HTMLDivElement} */ (this.htmlDiv_), aria.State.EXPANDED,
|
|
212
|
+
isExpanded);
|
|
219
213
|
|
|
220
|
-
|
|
221
|
-
* Opens or closes the current category.
|
|
222
|
-
* @param {boolean} isExpanded True to expand the category, false to close.
|
|
223
|
-
* @public
|
|
224
|
-
*/
|
|
225
|
-
CollapsibleToolboxCategory.prototype.setExpanded = function(isExpanded) {
|
|
226
|
-
if (this.expanded_ === isExpanded) {
|
|
227
|
-
return;
|
|
214
|
+
this.parentToolbox_.handleToolboxItemResize();
|
|
228
215
|
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
this.
|
|
235
|
-
this.
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* @override
|
|
219
|
+
*/
|
|
220
|
+
setVisible_(isVisible) {
|
|
221
|
+
this.htmlDiv_.style.display = isVisible ? 'block' : 'none';
|
|
222
|
+
const childToolboxItems = this.getChildToolboxItems();
|
|
223
|
+
for (let i = 0; i < childToolboxItems.length; i++) {
|
|
224
|
+
const child = childToolboxItems[i];
|
|
225
|
+
child.setVisible_(isVisible);
|
|
226
|
+
}
|
|
227
|
+
this.isHidden_ = !isVisible;
|
|
228
|
+
|
|
229
|
+
if (this.parentToolbox_.getSelectedItem() === this) {
|
|
230
|
+
this.parentToolbox_.clearSelection();
|
|
231
|
+
}
|
|
236
232
|
}
|
|
237
|
-
aria.setState(
|
|
238
|
-
/** @type {!Element} */ (this.htmlDiv_), aria.State.EXPANDED, isExpanded);
|
|
239
233
|
|
|
240
|
-
|
|
241
|
-
|
|
234
|
+
/**
|
|
235
|
+
* Whether the category is expanded to show its child subcategories.
|
|
236
|
+
* @return {boolean} True if the toolbox item shows its children, false if it
|
|
237
|
+
* is collapsed.
|
|
238
|
+
* @public
|
|
239
|
+
*/
|
|
240
|
+
isExpanded() {
|
|
241
|
+
return this.expanded_;
|
|
242
|
+
}
|
|
242
243
|
|
|
243
|
-
/**
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
const childToolboxItems = this.getChildToolboxItems();
|
|
249
|
-
for (let i = 0; i < childToolboxItems.length; i++) {
|
|
250
|
-
const child = childToolboxItems[i];
|
|
251
|
-
child.setVisible_(isVisible);
|
|
244
|
+
/**
|
|
245
|
+
* @override
|
|
246
|
+
*/
|
|
247
|
+
isCollapsible() {
|
|
248
|
+
return true;
|
|
252
249
|
}
|
|
253
|
-
this.isHidden_ = !isVisible;
|
|
254
250
|
|
|
255
|
-
|
|
256
|
-
|
|
251
|
+
/**
|
|
252
|
+
* @override
|
|
253
|
+
*/
|
|
254
|
+
onClick(_e) {
|
|
255
|
+
this.toggleExpanded();
|
|
257
256
|
}
|
|
258
|
-
};
|
|
259
257
|
|
|
260
|
-
/**
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
return this.expanded_;
|
|
268
|
-
};
|
|
258
|
+
/**
|
|
259
|
+
* Toggles whether or not the category is expanded.
|
|
260
|
+
* @public
|
|
261
|
+
*/
|
|
262
|
+
toggleExpanded() {
|
|
263
|
+
this.setExpanded(!this.expanded_);
|
|
264
|
+
}
|
|
269
265
|
|
|
270
|
-
/**
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
266
|
+
/**
|
|
267
|
+
* @override
|
|
268
|
+
*/
|
|
269
|
+
getDiv() {
|
|
270
|
+
return this.htmlDiv_;
|
|
271
|
+
}
|
|
276
272
|
|
|
277
|
-
/**
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
273
|
+
/**
|
|
274
|
+
* Gets any children toolbox items. (ex. Gets the subcategories)
|
|
275
|
+
* @return {!Array<!IToolboxItem>} The child toolbox items.
|
|
276
|
+
*/
|
|
277
|
+
getChildToolboxItems() {
|
|
278
|
+
return this.toolboxItems_;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
283
281
|
|
|
284
282
|
/**
|
|
285
|
-
*
|
|
286
|
-
*
|
|
283
|
+
* All the CSS class names that are used to create a collapsible
|
|
284
|
+
* category. This is all the properties from the regular category plus contents.
|
|
285
|
+
* @typedef {{
|
|
286
|
+
* container:?string,
|
|
287
|
+
* row:?string,
|
|
288
|
+
* rowcontentcontainer:?string,
|
|
289
|
+
* icon:?string,
|
|
290
|
+
* label:?string,
|
|
291
|
+
* selected:?string,
|
|
292
|
+
* openicon:?string,
|
|
293
|
+
* closedicon:?string,
|
|
294
|
+
* contents:?string
|
|
295
|
+
* }}
|
|
287
296
|
*/
|
|
288
|
-
CollapsibleToolboxCategory.
|
|
289
|
-
this.setExpanded(!this.expanded_);
|
|
290
|
-
};
|
|
297
|
+
CollapsibleToolboxCategory.CssConfig;
|
|
291
298
|
|
|
292
299
|
/**
|
|
300
|
+
* Name used for registering a collapsible toolbox category.
|
|
301
|
+
* @type {string}
|
|
293
302
|
* @override
|
|
294
303
|
*/
|
|
295
|
-
CollapsibleToolboxCategory.
|
|
296
|
-
return this.htmlDiv_;
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* Gets any children toolbox items. (ex. Gets the subcategories)
|
|
301
|
-
* @return {!Array<!IToolboxItem>} The child toolbox items.
|
|
302
|
-
*/
|
|
303
|
-
CollapsibleToolboxCategory.prototype.getChildToolboxItems = function() {
|
|
304
|
-
return this.toolboxItems_;
|
|
305
|
-
};
|
|
304
|
+
CollapsibleToolboxCategory.registrationName = 'collapsibleCategory';
|
|
306
305
|
|
|
307
306
|
|
|
308
307
|
registry.register(
|
|
@@ -29,26 +29,68 @@ const {ToolboxItem} = goog.require('Blockly.ToolboxItem');
|
|
|
29
29
|
/**
|
|
30
30
|
* Class for a toolbox separator. This is the thin visual line that appears on
|
|
31
31
|
* the toolbox. This item is not interactable.
|
|
32
|
-
* @param {!toolbox.SeparatorInfo} separatorDef The information
|
|
33
|
-
* needed to create a separator.
|
|
34
|
-
* @param {!IToolbox} toolbox The parent toolbox for the separator.
|
|
35
|
-
* @constructor
|
|
36
32
|
* @extends {ToolboxItem}
|
|
37
33
|
* @alias Blockly.ToolboxSeparator
|
|
38
34
|
*/
|
|
39
|
-
|
|
40
|
-
ToolboxSeparator.superClass_.constructor.call(this, separatorDef, toolbox);
|
|
35
|
+
class ToolboxSeparator extends ToolboxItem {
|
|
41
36
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
37
|
+
* @param {!toolbox.SeparatorInfo} separatorDef The information
|
|
38
|
+
* needed to create a separator.
|
|
39
|
+
* @param {!IToolbox} toolbox The parent toolbox for the separator.
|
|
40
|
+
*/
|
|
41
|
+
constructor(separatorDef, toolbox) {
|
|
42
|
+
super(separatorDef, toolbox);
|
|
43
|
+
/**
|
|
44
|
+
* All the CSS class names that are used to create a separator.
|
|
45
|
+
* @type {!ToolboxSeparator.CssConfig}
|
|
46
|
+
* @protected
|
|
47
|
+
*/
|
|
48
|
+
this.cssConfig_ = {'container': 'blocklyTreeSeparator'};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @type {?HTMLDivElement}
|
|
52
|
+
* @private
|
|
53
|
+
*/
|
|
54
|
+
this.htmlDiv_ = null;
|
|
55
|
+
|
|
56
|
+
const cssConfig = separatorDef['cssconfig'] || separatorDef['cssConfig'];
|
|
57
|
+
object.mixin(this.cssConfig_, cssConfig);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @override
|
|
62
|
+
*/
|
|
63
|
+
init() {
|
|
64
|
+
this.createDom_();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Creates the DOM for a separator.
|
|
69
|
+
* @return {!HTMLDivElement} The parent element for the separator.
|
|
44
70
|
* @protected
|
|
45
71
|
*/
|
|
46
|
-
|
|
72
|
+
createDom_() {
|
|
73
|
+
const container =
|
|
74
|
+
/** @type {!HTMLDivElement} */ (document.createElement('div'));
|
|
75
|
+
dom.addClass(container, this.cssConfig_['container']);
|
|
76
|
+
this.htmlDiv_ = container;
|
|
77
|
+
return container;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @override
|
|
82
|
+
*/
|
|
83
|
+
getDiv() {
|
|
84
|
+
return /** @type {!HTMLDivElement} */ (this.htmlDiv_);
|
|
85
|
+
}
|
|
47
86
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
87
|
+
/**
|
|
88
|
+
* @override
|
|
89
|
+
*/
|
|
90
|
+
dispose() {
|
|
91
|
+
dom.removeNode(/** @type {!HTMLDivElement} */ (this.htmlDiv_));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
52
94
|
|
|
53
95
|
/**
|
|
54
96
|
* All the CSS class names that are used to create a separator.
|
|
@@ -60,61 +102,28 @@ ToolboxSeparator.CssConfig;
|
|
|
60
102
|
|
|
61
103
|
/**
|
|
62
104
|
* Name used for registering a toolbox separator.
|
|
63
|
-
* @
|
|
105
|
+
* @type {string}
|
|
64
106
|
*/
|
|
65
107
|
ToolboxSeparator.registrationName = 'sep';
|
|
66
108
|
|
|
67
|
-
/**
|
|
68
|
-
* @override
|
|
69
|
-
*/
|
|
70
|
-
ToolboxSeparator.prototype.init = function() {
|
|
71
|
-
this.createDom_();
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Creates the DOM for a separator.
|
|
76
|
-
* @return {!Element} The parent element for the separator.
|
|
77
|
-
* @protected
|
|
78
|
-
*/
|
|
79
|
-
ToolboxSeparator.prototype.createDom_ = function() {
|
|
80
|
-
const container = document.createElement('div');
|
|
81
|
-
dom.addClass(container, this.cssConfig_['container']);
|
|
82
|
-
this.htmlDiv_ = container;
|
|
83
|
-
return container;
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* @override
|
|
88
|
-
*/
|
|
89
|
-
ToolboxSeparator.prototype.getDiv = function() {
|
|
90
|
-
return this.htmlDiv_;
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* @override
|
|
95
|
-
*/
|
|
96
|
-
ToolboxSeparator.prototype.dispose = function() {
|
|
97
|
-
dom.removeNode(this.htmlDiv_);
|
|
98
|
-
};
|
|
99
|
-
|
|
100
109
|
/**
|
|
101
110
|
* CSS for Toolbox. See css.js for use.
|
|
102
111
|
*/
|
|
103
112
|
Css.register(`
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
113
|
+
.blocklyTreeSeparator {
|
|
114
|
+
border-bottom: solid #e5e5e5 1px;
|
|
115
|
+
height: 0;
|
|
116
|
+
margin: 5px 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.blocklyToolboxDiv[layout="h"] .blocklyTreeSeparator {
|
|
120
|
+
border-right: solid #e5e5e5 1px;
|
|
121
|
+
border-bottom: none;
|
|
122
|
+
height: auto;
|
|
123
|
+
margin: 0 5px 0 5px;
|
|
124
|
+
padding: 5px 0;
|
|
125
|
+
width: 0;
|
|
126
|
+
}
|
|
118
127
|
`);
|
|
119
128
|
|
|
120
129
|
registry.register(
|