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
|
@@ -47,257 +47,259 @@ const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
|
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
49
|
* The base class for a block renderer.
|
|
50
|
-
* @param {string} name The renderer name.
|
|
51
|
-
* @package
|
|
52
|
-
* @constructor
|
|
53
50
|
* @implements {IRegistrable}
|
|
54
51
|
* @alias Blockly.blockRendering.Renderer
|
|
55
52
|
*/
|
|
56
|
-
|
|
53
|
+
class Renderer {
|
|
57
54
|
/**
|
|
58
|
-
* The renderer name.
|
|
59
|
-
* @type {string}
|
|
55
|
+
* @param {string} name The renderer name.
|
|
60
56
|
* @package
|
|
61
57
|
*/
|
|
62
|
-
|
|
58
|
+
constructor(name) {
|
|
59
|
+
/**
|
|
60
|
+
* The renderer name.
|
|
61
|
+
* @type {string}
|
|
62
|
+
* @package
|
|
63
|
+
*/
|
|
64
|
+
this.name = name;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The renderer's constant provider.
|
|
68
|
+
* @type {ConstantProvider}
|
|
69
|
+
* @private
|
|
70
|
+
*/
|
|
71
|
+
this.constants_ = null;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Rendering constant overrides, passed in through options.
|
|
75
|
+
* @type {?Object}
|
|
76
|
+
* @package
|
|
77
|
+
*/
|
|
78
|
+
this.overrides = null;
|
|
79
|
+
}
|
|
63
80
|
|
|
64
81
|
/**
|
|
65
|
-
*
|
|
66
|
-
* @
|
|
67
|
-
* @
|
|
82
|
+
* Gets the class name that identifies this renderer.
|
|
83
|
+
* @return {string} The CSS class name.
|
|
84
|
+
* @package
|
|
68
85
|
*/
|
|
69
|
-
|
|
86
|
+
getClassName() {
|
|
87
|
+
return this.name + '-renderer';
|
|
88
|
+
}
|
|
70
89
|
|
|
71
90
|
/**
|
|
72
|
-
*
|
|
73
|
-
* @
|
|
91
|
+
* Initialize the renderer.
|
|
92
|
+
* @param {!Theme} theme The workspace theme object.
|
|
93
|
+
* @param {Object=} opt_rendererOverrides Rendering constant overrides.
|
|
74
94
|
* @package
|
|
75
95
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
Renderer.prototype.getClassName = function() {
|
|
85
|
-
return this.name + '-renderer';
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Initialize the renderer.
|
|
90
|
-
* @param {!Theme} theme The workspace theme object.
|
|
91
|
-
* @param {Object=} opt_rendererOverrides Rendering constant overrides.
|
|
92
|
-
* @package
|
|
93
|
-
*/
|
|
94
|
-
Renderer.prototype.init = function(theme, opt_rendererOverrides) {
|
|
95
|
-
this.constants_ = this.makeConstants_();
|
|
96
|
-
if (opt_rendererOverrides) {
|
|
97
|
-
this.overrides = opt_rendererOverrides;
|
|
98
|
-
object.mixin(this.constants_, opt_rendererOverrides);
|
|
96
|
+
init(theme, opt_rendererOverrides) {
|
|
97
|
+
this.constants_ = this.makeConstants_();
|
|
98
|
+
if (opt_rendererOverrides) {
|
|
99
|
+
this.overrides = opt_rendererOverrides;
|
|
100
|
+
object.mixin(this.constants_, opt_rendererOverrides);
|
|
101
|
+
}
|
|
102
|
+
this.constants_.setTheme(theme);
|
|
103
|
+
this.constants_.init();
|
|
99
104
|
}
|
|
100
|
-
this.constants_.setTheme(theme);
|
|
101
|
-
this.constants_.init();
|
|
102
|
-
};
|
|
103
105
|
|
|
104
|
-
/**
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
106
|
+
/**
|
|
107
|
+
* Create any DOM elements that this renderer needs.
|
|
108
|
+
* @param {!SVGElement} svg The root of the workspace's SVG.
|
|
109
|
+
* @param {!Theme} theme The workspace theme object.
|
|
110
|
+
* @package
|
|
111
|
+
*/
|
|
112
|
+
createDom(svg, theme) {
|
|
113
|
+
this.constants_.createDom(
|
|
114
|
+
svg, this.name + '-' + theme.name,
|
|
115
|
+
'.' + this.getClassName() + '.' + theme.getClassName());
|
|
116
|
+
}
|
|
115
117
|
|
|
116
|
-
/**
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
118
|
+
/**
|
|
119
|
+
* Refresh the renderer after a theme change.
|
|
120
|
+
* @param {!SVGElement} svg The root of the workspace's SVG.
|
|
121
|
+
* @param {!Theme} theme The workspace theme object.
|
|
122
|
+
* @package
|
|
123
|
+
*/
|
|
124
|
+
refreshDom(svg, theme) {
|
|
125
|
+
const previousConstants = this.getConstants();
|
|
126
|
+
previousConstants.dispose();
|
|
127
|
+
this.constants_ = this.makeConstants_();
|
|
128
|
+
if (this.overrides) {
|
|
129
|
+
object.mixin(this.constants_, this.overrides);
|
|
130
|
+
}
|
|
131
|
+
// Ensure the constant provider's random identifier does not change.
|
|
132
|
+
this.constants_.randomIdentifier = previousConstants.randomIdentifier;
|
|
133
|
+
this.constants_.setTheme(theme);
|
|
134
|
+
this.constants_.init();
|
|
135
|
+
this.createDom(svg, theme);
|
|
128
136
|
}
|
|
129
|
-
// Ensure the constant provider's random identifier does not change.
|
|
130
|
-
this.constants_.randomIdentifier = previousConstants.randomIdentifier;
|
|
131
|
-
this.constants_.setTheme(theme);
|
|
132
|
-
this.constants_.init();
|
|
133
|
-
this.createDom(svg, theme);
|
|
134
|
-
};
|
|
135
137
|
|
|
136
|
-
/**
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
138
|
+
/**
|
|
139
|
+
* Dispose of this renderer.
|
|
140
|
+
* Delete all DOM elements that this renderer and its constants created.
|
|
141
|
+
* @package
|
|
142
|
+
*/
|
|
143
|
+
dispose() {
|
|
144
|
+
if (this.constants_) {
|
|
145
|
+
this.constants_.dispose();
|
|
146
|
+
}
|
|
144
147
|
}
|
|
145
|
-
};
|
|
146
148
|
|
|
147
|
-
/**
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
149
|
+
/**
|
|
150
|
+
* Create a new instance of the renderer's constant provider.
|
|
151
|
+
* @return {!ConstantProvider} The constant provider.
|
|
152
|
+
* @protected
|
|
153
|
+
*/
|
|
154
|
+
makeConstants_() {
|
|
155
|
+
return new ConstantProvider();
|
|
156
|
+
}
|
|
155
157
|
|
|
156
|
-
/**
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}
|
|
158
|
+
/**
|
|
159
|
+
* Create a new instance of the renderer's render info object.
|
|
160
|
+
* @param {!BlockSvg} block The block to measure.
|
|
161
|
+
* @return {!RenderInfo} The render info object.
|
|
162
|
+
* @protected
|
|
163
|
+
*/
|
|
164
|
+
makeRenderInfo_(block) {
|
|
165
|
+
return new RenderInfo(this, block);
|
|
166
|
+
}
|
|
165
167
|
|
|
166
|
-
/**
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
168
|
+
/**
|
|
169
|
+
* Create a new instance of the renderer's drawer.
|
|
170
|
+
* @param {!BlockSvg} block The block to render.
|
|
171
|
+
* @param {!RenderInfo} info An object containing all
|
|
172
|
+
* information needed to render this block.
|
|
173
|
+
* @return {!Drawer} The drawer.
|
|
174
|
+
* @protected
|
|
175
|
+
*/
|
|
176
|
+
makeDrawer_(block, info) {
|
|
177
|
+
return new Drawer(block, info);
|
|
178
|
+
}
|
|
177
179
|
|
|
178
|
-
/**
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
180
|
+
/**
|
|
181
|
+
* Create a new instance of the renderer's debugger.
|
|
182
|
+
* @return {!Debug} The renderer debugger.
|
|
183
|
+
* @suppress {strictModuleDepCheck} Debug renderer only included in
|
|
184
|
+
* playground.
|
|
185
|
+
* @protected
|
|
186
|
+
*/
|
|
187
|
+
makeDebugger_() {
|
|
188
|
+
const {Debug} = goog.module.get('Blockly.blockRendering.Debug');
|
|
189
|
+
if (!Debug) {
|
|
190
|
+
throw Error('Missing require for Blockly.blockRendering.Debug');
|
|
191
|
+
}
|
|
192
|
+
return new Debug(this.getConstants());
|
|
188
193
|
}
|
|
189
|
-
return new Debug(this.getConstants());
|
|
190
|
-
};
|
|
191
194
|
|
|
192
|
-
/**
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
195
|
+
/**
|
|
196
|
+
* Create a new instance of the renderer's marker drawer.
|
|
197
|
+
* @param {!WorkspaceSvg} workspace The workspace the marker belongs to.
|
|
198
|
+
* @param {!Marker} marker The marker.
|
|
199
|
+
* @return {!MarkerSvg} The object in charge of drawing
|
|
200
|
+
* the marker.
|
|
201
|
+
* @package
|
|
202
|
+
*/
|
|
203
|
+
makeMarkerDrawer(workspace, marker) {
|
|
204
|
+
return new MarkerSvg(workspace, this.getConstants(), marker);
|
|
205
|
+
}
|
|
203
206
|
|
|
204
|
-
/**
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
207
|
+
/**
|
|
208
|
+
* Create a new instance of a renderer path object.
|
|
209
|
+
* @param {!SVGElement} root The root SVG element.
|
|
210
|
+
* @param {!Theme.BlockStyle} style The style object to use for
|
|
211
|
+
* colouring.
|
|
212
|
+
* @return {!IPathObject} The renderer path object.
|
|
213
|
+
* @package
|
|
214
|
+
*/
|
|
215
|
+
makePathObject(root, style) {
|
|
216
|
+
return new PathObject(
|
|
217
|
+
root, style, /** @type {!ConstantProvider} */ (this.constants_));
|
|
218
|
+
}
|
|
216
219
|
|
|
217
|
-
/**
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}
|
|
220
|
+
/**
|
|
221
|
+
* Get the current renderer's constant provider. We assume that when this is
|
|
222
|
+
* called, the renderer has already been initialized.
|
|
223
|
+
* @return {!ConstantProvider} The constant provider.
|
|
224
|
+
* @package
|
|
225
|
+
*/
|
|
226
|
+
getConstants() {
|
|
227
|
+
return /** @type {!ConstantProvider} */ (this.constants_);
|
|
228
|
+
}
|
|
226
229
|
|
|
227
|
-
/**
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
}
|
|
230
|
+
/**
|
|
231
|
+
* Determine whether or not to highlight a connection.
|
|
232
|
+
* @param {Connection} _conn The connection to determine whether or not
|
|
233
|
+
* to highlight.
|
|
234
|
+
* @return {boolean} True if we should highlight the connection.
|
|
235
|
+
* @package
|
|
236
|
+
*/
|
|
237
|
+
shouldHighlightConnection(_conn) {
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
237
240
|
|
|
238
|
-
/**
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
};
|
|
241
|
+
/**
|
|
242
|
+
* Checks if an orphaned block can connect to the "end" of the topBlock's
|
|
243
|
+
* block-clump. If the clump is a row the end is the last input. If the clump
|
|
244
|
+
* is a stack, the end is the last next connection. If the clump is neither,
|
|
245
|
+
* then this returns false.
|
|
246
|
+
* @param {!BlockSvg} topBlock The top block of the block clump we want to try
|
|
247
|
+
* and connect to.
|
|
248
|
+
* @param {!BlockSvg} orphanBlock The orphan block that wants to find
|
|
249
|
+
* a home.
|
|
250
|
+
* @param {number} localType The type of the connection being dragged.
|
|
251
|
+
* @return {boolean} Whether there is a home for the orphan or not.
|
|
252
|
+
* @package
|
|
253
|
+
*/
|
|
254
|
+
orphanCanConnectAtEnd(topBlock, orphanBlock, localType) {
|
|
255
|
+
const orphanConnection =
|
|
256
|
+
(localType === ConnectionType.OUTPUT_VALUE ?
|
|
257
|
+
orphanBlock.outputConnection :
|
|
258
|
+
orphanBlock.previousConnection);
|
|
259
|
+
return !!Connection.getConnectionForOrphanedConnection(
|
|
260
|
+
/** @type {!Block} **/ (topBlock),
|
|
261
|
+
/** @type {!Connection} **/ (orphanConnection));
|
|
262
|
+
}
|
|
261
263
|
|
|
262
|
-
/**
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
264
|
+
/**
|
|
265
|
+
* Chooses a connection preview method based on the available connection, the
|
|
266
|
+
* current dragged connection, and the block being dragged.
|
|
267
|
+
* @param {!RenderedConnection} closest The available connection.
|
|
268
|
+
* @param {!RenderedConnection} local The connection currently being
|
|
269
|
+
* dragged.
|
|
270
|
+
* @param {!BlockSvg} topBlock The block currently being dragged.
|
|
271
|
+
* @return {!InsertionMarkerManager.PREVIEW_TYPE} The preview type
|
|
272
|
+
* to display.
|
|
273
|
+
* @package
|
|
274
|
+
*/
|
|
275
|
+
getConnectionPreviewMethod(closest, local, topBlock) {
|
|
276
|
+
if (local.type === ConnectionType.OUTPUT_VALUE ||
|
|
277
|
+
local.type === ConnectionType.PREVIOUS_STATEMENT) {
|
|
278
|
+
if (!closest.isConnected() ||
|
|
279
|
+
this.orphanCanConnectAtEnd(
|
|
280
|
+
topBlock,
|
|
281
|
+
/** @type {!BlockSvg} */ (closest.targetBlock()), local.type)) {
|
|
282
|
+
return InsertionMarkerManager.PREVIEW_TYPE.INSERTION_MARKER;
|
|
283
|
+
}
|
|
284
|
+
return InsertionMarkerManager.PREVIEW_TYPE.REPLACEMENT_FADE;
|
|
282
285
|
}
|
|
283
|
-
return InsertionMarkerManager.PREVIEW_TYPE.REPLACEMENT_FADE;
|
|
284
|
-
}
|
|
285
286
|
|
|
286
|
-
|
|
287
|
-
}
|
|
287
|
+
return InsertionMarkerManager.PREVIEW_TYPE.INSERTION_MARKER;
|
|
288
|
+
}
|
|
288
289
|
|
|
289
|
-
/**
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
290
|
+
/**
|
|
291
|
+
* Render the block.
|
|
292
|
+
* @param {!BlockSvg} block The block to render.
|
|
293
|
+
* @package
|
|
294
|
+
*/
|
|
295
|
+
render(block) {
|
|
296
|
+
if (debug.isDebuggerEnabled() && !block.renderingDebugger) {
|
|
297
|
+
block.renderingDebugger = this.makeDebugger_();
|
|
298
|
+
}
|
|
299
|
+
const info = this.makeRenderInfo_(block);
|
|
300
|
+
info.measure();
|
|
301
|
+
this.makeDrawer_(block, info).draw();
|
|
297
302
|
}
|
|
298
|
-
|
|
299
|
-
info.measure();
|
|
300
|
-
this.makeDrawer_(block, info).draw();
|
|
301
|
-
};
|
|
303
|
+
}
|
|
302
304
|
|
|
303
305
|
exports.Renderer = Renderer;
|
|
@@ -17,57 +17,57 @@
|
|
|
17
17
|
*/
|
|
18
18
|
goog.module('Blockly.geras.ConstantProvider');
|
|
19
19
|
|
|
20
|
-
const object = goog.require('Blockly.utils.object');
|
|
21
20
|
const {ConstantProvider: BaseConstantProvider} = goog.require('Blockly.blockRendering.ConstantProvider');
|
|
22
21
|
|
|
23
22
|
|
|
24
23
|
/**
|
|
25
24
|
* An object that provides constants for rendering blocks in Geras mode.
|
|
26
|
-
* @constructor
|
|
27
|
-
* @package
|
|
28
25
|
* @extends {BaseConstantProvider}
|
|
29
26
|
* @alias Blockly.geras.ConstantProvider
|
|
30
27
|
*/
|
|
31
|
-
|
|
32
|
-
ConstantProvider.superClass_.constructor.call(this);
|
|
33
|
-
|
|
28
|
+
class ConstantProvider extends BaseConstantProvider {
|
|
34
29
|
/**
|
|
35
|
-
* @
|
|
30
|
+
* @package
|
|
36
31
|
*/
|
|
37
|
-
|
|
32
|
+
constructor() {
|
|
33
|
+
super();
|
|
38
34
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
/**
|
|
36
|
+
* @override
|
|
37
|
+
*/
|
|
38
|
+
this.FIELD_TEXT_BASELINE_CENTER = false;
|
|
42
39
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
40
|
+
// The dark/shadow path in classic rendering is the same as the normal block
|
|
41
|
+
// path, but translated down one and right one.
|
|
42
|
+
this.DARK_PATH_OFFSET = 1;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The maximum width of a bottom row that follows a statement input and has
|
|
46
|
+
* inputs inline.
|
|
47
|
+
* @type {number}
|
|
48
|
+
*/
|
|
49
|
+
this.MAX_BOTTOM_WIDTH = 30;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @override
|
|
53
|
+
*/
|
|
54
|
+
this.STATEMENT_BOTTOM_SPACER = -this.NOTCH_HEIGHT / 2;
|
|
55
|
+
}
|
|
49
56
|
|
|
50
57
|
/**
|
|
51
58
|
* @override
|
|
52
59
|
*/
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
selector + ' .blocklyInsertionMarker>.blocklyPathLight,',
|
|
66
|
-
selector + ' .blocklyInsertionMarker>.blocklyPathDark {',
|
|
67
|
-
'fill-opacity: ' + this.INSERTION_MARKER_OPACITY + ';', 'stroke: none;',
|
|
68
|
-
'}',
|
|
69
|
-
/* eslint-enable indent */
|
|
70
|
-
]);
|
|
71
|
-
};
|
|
60
|
+
getCSS_(selector) {
|
|
61
|
+
return super.getCSS_(selector).concat([
|
|
62
|
+
/* eslint-disable indent */
|
|
63
|
+
// Insertion marker.
|
|
64
|
+
selector + ' .blocklyInsertionMarker>.blocklyPathLight,',
|
|
65
|
+
selector + ' .blocklyInsertionMarker>.blocklyPathDark {',
|
|
66
|
+
'fill-opacity: ' + this.INSERTION_MARKER_OPACITY + ';', 'stroke: none;',
|
|
67
|
+
'}',
|
|
68
|
+
/* eslint-enable indent */
|
|
69
|
+
]);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
72
|
|
|
73
73
|
exports.ConstantProvider = ConstantProvider;
|