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 @@
|
|
|
17
17
|
goog.module('Blockly.zelos.PathObject');
|
|
18
18
|
|
|
19
19
|
const dom = goog.require('Blockly.utils.dom');
|
|
20
|
-
const object = goog.require('Blockly.utils.object');
|
|
21
20
|
/* eslint-disable-next-line no-unused-vars */
|
|
22
21
|
const {ConstantProvider} = goog.requireType('Blockly.zelos.ConstantProvider');
|
|
23
22
|
const {PathObject: BasePathObject} = goog.require('Blockly.blockRendering.PathObject');
|
|
@@ -29,218 +28,220 @@ const {Theme} = goog.requireType('Blockly.Theme');
|
|
|
29
28
|
/**
|
|
30
29
|
* An object that handles creating and setting each of the SVG elements
|
|
31
30
|
* used by the renderer.
|
|
32
|
-
* @param {!SVGElement} root The root SVG element.
|
|
33
|
-
* @param {!Theme.BlockStyle} style The style object to use for
|
|
34
|
-
* colouring.
|
|
35
|
-
* @param {!ConstantProvider} constants The renderer's constants.
|
|
36
|
-
* @constructor
|
|
37
|
-
* @extends {BasePathObject}
|
|
38
|
-
* @package
|
|
39
31
|
* @alias Blockly.zelos.PathObject
|
|
40
32
|
*/
|
|
41
|
-
|
|
42
|
-
PathObject.superClass_.constructor.call(this, root, style, constants);
|
|
43
|
-
|
|
33
|
+
class PathObject extends BasePathObject {
|
|
44
34
|
/**
|
|
45
|
-
* The
|
|
46
|
-
* @
|
|
35
|
+
* @param {!SVGElement} root The root SVG element.
|
|
36
|
+
* @param {!Theme.BlockStyle} style The style object to use for
|
|
37
|
+
* colouring.
|
|
38
|
+
* @param {!ConstantProvider} constants The renderer's constants.
|
|
39
|
+
* @package
|
|
47
40
|
*/
|
|
48
|
-
|
|
41
|
+
constructor(root, style, constants) {
|
|
42
|
+
super(root, style, constants);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The renderer's constant provider.
|
|
46
|
+
* @type {!ConstantProvider}
|
|
47
|
+
*/
|
|
48
|
+
this.constants = constants;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The selected path of the block.
|
|
52
|
+
* @type {?SVGElement}
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
this.svgPathSelected_ = null;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The outline paths on the block.
|
|
59
|
+
* @type {!Object<string, !SVGElement>}
|
|
60
|
+
* @private
|
|
61
|
+
*/
|
|
62
|
+
this.outlines_ = Object.create(null);
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* A set used to determine which outlines were used during a draw pass. The
|
|
66
|
+
* set is initialized with a reference to all the outlines in
|
|
67
|
+
* `this.outlines_`. Every time we use an outline during the draw pass, the
|
|
68
|
+
* reference is removed from this set.
|
|
69
|
+
* @type {Object<string, number>}
|
|
70
|
+
* @private
|
|
71
|
+
*/
|
|
72
|
+
this.remainingOutlines_ = null;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The type of block's output connection shape. This is set when a block
|
|
76
|
+
* with an output connection is drawn.
|
|
77
|
+
* @package
|
|
78
|
+
*/
|
|
79
|
+
this.outputShapeType = null;
|
|
80
|
+
}
|
|
49
81
|
|
|
50
82
|
/**
|
|
51
|
-
*
|
|
52
|
-
* @type {?SVGElement}
|
|
53
|
-
* @private
|
|
83
|
+
* @override
|
|
54
84
|
*/
|
|
55
|
-
|
|
85
|
+
setPath(pathString) {
|
|
86
|
+
super.setPath(pathString);
|
|
87
|
+
if (this.svgPathSelected_) {
|
|
88
|
+
this.svgPathSelected_.setAttribute('d', pathString);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
56
91
|
|
|
57
92
|
/**
|
|
58
|
-
*
|
|
59
|
-
* @type {!Object<string, !SVGElement>}
|
|
60
|
-
* @private
|
|
93
|
+
* @override
|
|
61
94
|
*/
|
|
62
|
-
|
|
95
|
+
applyColour(block) {
|
|
96
|
+
super.applyColour(block);
|
|
97
|
+
// Set shadow stroke colour.
|
|
98
|
+
if (block.isShadow() && block.getParent()) {
|
|
99
|
+
this.svgPath.setAttribute(
|
|
100
|
+
'stroke', block.getParent().style.colourTertiary);
|
|
101
|
+
}
|
|
63
102
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
* @type {Object<string, number>}
|
|
70
|
-
* @private
|
|
71
|
-
*/
|
|
72
|
-
this.remainingOutlines_ = null;
|
|
103
|
+
// Apply colour to outlines.
|
|
104
|
+
for (const key in this.outlines_) {
|
|
105
|
+
this.outlines_[key].setAttribute('fill', this.style.colourTertiary);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
73
108
|
|
|
74
109
|
/**
|
|
75
|
-
*
|
|
76
|
-
* an output connection is drawn.
|
|
77
|
-
* @package
|
|
110
|
+
* @override
|
|
78
111
|
*/
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
*/
|
|
86
|
-
PathObject.prototype.setPath = function(pathString) {
|
|
87
|
-
PathObject.superClass_.setPath.call(this, pathString);
|
|
88
|
-
if (this.svgPathSelected_) {
|
|
89
|
-
this.svgPathSelected_.setAttribute('d', pathString);
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* @override
|
|
95
|
-
*/
|
|
96
|
-
PathObject.prototype.applyColour = function(block) {
|
|
97
|
-
PathObject.superClass_.applyColour.call(this, block);
|
|
98
|
-
// Set shadow stroke colour.
|
|
99
|
-
if (block.isShadow() && block.getParent()) {
|
|
100
|
-
this.svgPath.setAttribute('stroke', block.getParent().style.colourTertiary);
|
|
112
|
+
flipRTL() {
|
|
113
|
+
super.flipRTL();
|
|
114
|
+
// Mirror each input outline path.
|
|
115
|
+
for (const key in this.outlines_) {
|
|
116
|
+
this.outlines_[key].setAttribute('transform', 'scale(-1 1)');
|
|
117
|
+
}
|
|
101
118
|
}
|
|
102
119
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
120
|
+
/**
|
|
121
|
+
* @override
|
|
122
|
+
*/
|
|
123
|
+
updateSelected(enable) {
|
|
124
|
+
this.setClass_('blocklySelected', enable);
|
|
125
|
+
if (enable) {
|
|
126
|
+
if (!this.svgPathSelected_) {
|
|
127
|
+
this.svgPathSelected_ =
|
|
128
|
+
/** @type {!SVGElement} */ (this.svgPath.cloneNode(true));
|
|
129
|
+
this.svgPathSelected_.setAttribute('fill', 'none');
|
|
130
|
+
this.svgPathSelected_.setAttribute(
|
|
131
|
+
'filter', 'url(#' + this.constants.selectedGlowFilterId + ')');
|
|
132
|
+
this.svgRoot.appendChild(this.svgPathSelected_);
|
|
133
|
+
}
|
|
134
|
+
} else {
|
|
135
|
+
if (this.svgPathSelected_) {
|
|
136
|
+
this.svgRoot.removeChild(this.svgPathSelected_);
|
|
137
|
+
this.svgPathSelected_ = null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
106
140
|
}
|
|
107
|
-
};
|
|
108
141
|
|
|
109
|
-
/**
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
142
|
+
/**
|
|
143
|
+
* @override
|
|
144
|
+
*/
|
|
145
|
+
updateReplacementFade(enable) {
|
|
146
|
+
this.setClass_('blocklyReplaceable', enable);
|
|
147
|
+
if (enable) {
|
|
148
|
+
this.svgPath.setAttribute(
|
|
149
|
+
'filter', 'url(#' + this.constants.replacementGlowFilterId + ')');
|
|
150
|
+
} else {
|
|
151
|
+
this.svgPath.removeAttribute('filter');
|
|
152
|
+
}
|
|
117
153
|
}
|
|
118
|
-
};
|
|
119
154
|
|
|
120
|
-
/**
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if (!
|
|
127
|
-
|
|
128
|
-
/** @type {!SVGElement} */ (this.svgPath.cloneNode(true));
|
|
129
|
-
this.svgPathSelected_.setAttribute('fill', 'none');
|
|
130
|
-
this.svgPathSelected_.setAttribute(
|
|
131
|
-
'filter', 'url(#' + this.constants.selectedGlowFilterId + ')');
|
|
132
|
-
this.svgRoot.appendChild(this.svgPathSelected_);
|
|
155
|
+
/**
|
|
156
|
+
* @override
|
|
157
|
+
*/
|
|
158
|
+
updateShapeForInputHighlight(conn, enable) {
|
|
159
|
+
const name = conn.getParentInput().name;
|
|
160
|
+
const outlinePath = this.getOutlinePath_(name);
|
|
161
|
+
if (!outlinePath) {
|
|
162
|
+
return;
|
|
133
163
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
164
|
+
if (enable) {
|
|
165
|
+
outlinePath.setAttribute(
|
|
166
|
+
'filter', 'url(#' + this.constants.replacementGlowFilterId + ')');
|
|
167
|
+
} else {
|
|
168
|
+
outlinePath.removeAttribute('filter');
|
|
138
169
|
}
|
|
139
170
|
}
|
|
140
|
-
};
|
|
141
171
|
|
|
142
|
-
/**
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
this.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
172
|
+
/**
|
|
173
|
+
* Method that's called when the drawer is about to draw the block.
|
|
174
|
+
* @package
|
|
175
|
+
*/
|
|
176
|
+
beginDrawing() {
|
|
177
|
+
this.remainingOutlines_ = Object.create(null);
|
|
178
|
+
for (const key in this.outlines_) {
|
|
179
|
+
// The value set here isn't used anywhere, we are just using the
|
|
180
|
+
// object as a Set data structure.
|
|
181
|
+
this.remainingOutlines_[key] = 1;
|
|
182
|
+
}
|
|
152
183
|
}
|
|
153
|
-
};
|
|
154
184
|
|
|
155
|
-
/**
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
outlinePath.removeAttribute('filter');
|
|
185
|
+
/**
|
|
186
|
+
* Method that's called when the drawer is done drawing.
|
|
187
|
+
* @package
|
|
188
|
+
*/
|
|
189
|
+
endDrawing() {
|
|
190
|
+
// Go through all remaining outlines that were not used this draw pass, and
|
|
191
|
+
// remove them.
|
|
192
|
+
if (this.remainingOutlines_) {
|
|
193
|
+
for (const key in this.remainingOutlines_) {
|
|
194
|
+
this.removeOutlinePath_(key);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
this.remainingOutlines_ = null;
|
|
169
198
|
}
|
|
170
|
-
};
|
|
171
199
|
|
|
172
|
-
/**
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
200
|
+
/**
|
|
201
|
+
* Set the path generated by the renderer for an outline path on the
|
|
202
|
+
* respective outline path SVG element.
|
|
203
|
+
* @param {string} name The input name.
|
|
204
|
+
* @param {string} pathString The path.
|
|
205
|
+
* @package
|
|
206
|
+
*/
|
|
207
|
+
setOutlinePath(name, pathString) {
|
|
208
|
+
const outline = this.getOutlinePath_(name);
|
|
209
|
+
outline.setAttribute('d', pathString);
|
|
210
|
+
outline.setAttribute('fill', this.style.colourTertiary);
|
|
182
211
|
}
|
|
183
|
-
};
|
|
184
212
|
|
|
185
|
-
/**
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
213
|
+
/**
|
|
214
|
+
* Create's an outline path for the specified input.
|
|
215
|
+
* @param {string} name The input name.
|
|
216
|
+
* @return {!SVGElement} The SVG outline path.
|
|
217
|
+
* @private
|
|
218
|
+
*/
|
|
219
|
+
getOutlinePath_(name) {
|
|
220
|
+
if (!this.outlines_[name]) {
|
|
221
|
+
this.outlines_[name] = dom.createSvgElement(
|
|
222
|
+
Svg.PATH, {
|
|
223
|
+
'class': 'blocklyOutlinePath',
|
|
224
|
+
// IE doesn't like paths without the data definition, set empty
|
|
225
|
+
// default
|
|
226
|
+
'd': '',
|
|
227
|
+
},
|
|
228
|
+
this.svgRoot);
|
|
195
229
|
}
|
|
230
|
+
if (this.remainingOutlines_) {
|
|
231
|
+
delete this.remainingOutlines_[name];
|
|
232
|
+
}
|
|
233
|
+
return this.outlines_[name];
|
|
196
234
|
}
|
|
197
|
-
this.remainingOutlines_ = null;
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Set the path generated by the renderer for an outline path on the respective
|
|
202
|
-
* outline path SVG element.
|
|
203
|
-
* @param {string} name The input name.
|
|
204
|
-
* @param {string} pathString The path.
|
|
205
|
-
* @package
|
|
206
|
-
*/
|
|
207
|
-
PathObject.prototype.setOutlinePath = function(name, pathString) {
|
|
208
|
-
const outline = this.getOutlinePath_(name);
|
|
209
|
-
outline.setAttribute('d', pathString);
|
|
210
|
-
outline.setAttribute('fill', this.style.colourTertiary);
|
|
211
|
-
};
|
|
212
235
|
|
|
213
|
-
/**
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
this.outlines_[name] = dom.createSvgElement(
|
|
222
|
-
Svg.PATH, {
|
|
223
|
-
'class': 'blocklyOutlinePath',
|
|
224
|
-
// IE doesn't like paths without the data definition, set empty
|
|
225
|
-
// default
|
|
226
|
-
'd': '',
|
|
227
|
-
},
|
|
228
|
-
this.svgRoot);
|
|
229
|
-
}
|
|
230
|
-
if (this.remainingOutlines_) {
|
|
231
|
-
delete this.remainingOutlines_[name];
|
|
236
|
+
/**
|
|
237
|
+
* Remove an outline path that is associated with the specified input.
|
|
238
|
+
* @param {string} name The input name.
|
|
239
|
+
* @private
|
|
240
|
+
*/
|
|
241
|
+
removeOutlinePath_(name) {
|
|
242
|
+
this.outlines_[name].parentNode.removeChild(this.outlines_[name]);
|
|
243
|
+
delete this.outlines_[name];
|
|
232
244
|
}
|
|
233
|
-
|
|
234
|
-
};
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* Remove an outline path that is associated with the specified input.
|
|
238
|
-
* @param {string} name The input name.
|
|
239
|
-
* @private
|
|
240
|
-
*/
|
|
241
|
-
PathObject.prototype.removeOutlinePath_ = function(name) {
|
|
242
|
-
this.outlines_[name].parentNode.removeChild(this.outlines_[name]);
|
|
243
|
-
delete this.outlines_[name];
|
|
244
|
-
};
|
|
245
|
+
}
|
|
245
246
|
|
|
246
247
|
exports.PathObject = PathObject;
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
goog.module('Blockly.zelos.Renderer');
|
|
17
17
|
|
|
18
18
|
const blockRendering = goog.require('Blockly.blockRendering');
|
|
19
|
-
const object = goog.require('Blockly.utils.object');
|
|
20
19
|
/* eslint-disable-next-line no-unused-vars */
|
|
21
20
|
const {BlockSvg} = goog.requireType('Blockly.BlockSvg');
|
|
22
21
|
const {ConnectionType} = goog.require('Blockly.ConnectionType');
|
|
@@ -39,109 +38,109 @@ const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
|
|
|
39
38
|
|
|
40
39
|
/**
|
|
41
40
|
* The zelos renderer.
|
|
42
|
-
* @param {string} name The renderer name.
|
|
43
|
-
* @package
|
|
44
|
-
* @constructor
|
|
45
41
|
* @extends {BaseRenderer}
|
|
46
42
|
* @alias Blockly.zelos.Renderer
|
|
47
43
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
44
|
+
class Renderer extends BaseRenderer {
|
|
45
|
+
/**
|
|
46
|
+
* @param {string} name The renderer name.
|
|
47
|
+
* @package
|
|
48
|
+
*/
|
|
49
|
+
constructor(name) {
|
|
50
|
+
super(name);
|
|
51
|
+
}
|
|
52
52
|
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
53
|
+
/**
|
|
54
|
+
* Create a new instance of the renderer's constant provider.
|
|
55
|
+
* @return {!ConstantProvider} The constant provider.
|
|
56
|
+
* @protected
|
|
57
|
+
* @override
|
|
58
|
+
*/
|
|
59
|
+
makeConstants_() {
|
|
60
|
+
return new ConstantProvider();
|
|
61
|
+
}
|
|
62
62
|
|
|
63
|
-
/**
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
63
|
+
/**
|
|
64
|
+
* Create a new instance of the renderer's render info object.
|
|
65
|
+
* @param {!BlockSvg} block The block to measure.
|
|
66
|
+
* @return {!RenderInfo} The render info object.
|
|
67
|
+
* @protected
|
|
68
|
+
* @override
|
|
69
|
+
*/
|
|
70
|
+
makeRenderInfo_(block) {
|
|
71
|
+
return new RenderInfo(this, block);
|
|
72
|
+
}
|
|
73
73
|
|
|
74
|
-
/**
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
74
|
+
/**
|
|
75
|
+
* Create a new instance of the renderer's drawer.
|
|
76
|
+
* @param {!BlockSvg} block The block to render.
|
|
77
|
+
* @param {!BaseRenderInfo} info An object containing all
|
|
78
|
+
* information needed to render this block.
|
|
79
|
+
* @return {!Drawer} The drawer.
|
|
80
|
+
* @protected
|
|
81
|
+
* @override
|
|
82
|
+
*/
|
|
83
|
+
makeDrawer_(block, info) {
|
|
84
|
+
return new Drawer(
|
|
85
|
+
block,
|
|
86
|
+
/** @type {!RenderInfo} */ (info));
|
|
87
|
+
}
|
|
88
88
|
|
|
89
|
-
/**
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
89
|
+
/**
|
|
90
|
+
* Create a new instance of the renderer's cursor drawer.
|
|
91
|
+
* @param {!WorkspaceSvg} workspace The workspace the cursor belongs to.
|
|
92
|
+
* @param {!Marker} marker The marker.
|
|
93
|
+
* @return {!MarkerSvg} The object in charge of drawing
|
|
94
|
+
* the marker.
|
|
95
|
+
* @package
|
|
96
|
+
* @override
|
|
97
|
+
*/
|
|
98
|
+
makeMarkerDrawer(workspace, marker) {
|
|
99
|
+
return new MarkerSvg(workspace, this.getConstants(), marker);
|
|
100
|
+
}
|
|
101
101
|
|
|
102
|
-
/**
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
102
|
+
/**
|
|
103
|
+
* Create a new instance of a renderer path object.
|
|
104
|
+
* @param {!SVGElement} root The root SVG element.
|
|
105
|
+
* @param {!Theme.BlockStyle} style The style object to use for
|
|
106
|
+
* colouring.
|
|
107
|
+
* @return {!PathObject} The renderer path object.
|
|
108
|
+
* @package
|
|
109
|
+
* @override
|
|
110
|
+
*/
|
|
111
|
+
makePathObject(root, style) {
|
|
112
|
+
return new PathObject(
|
|
113
|
+
root, style,
|
|
114
|
+
/** @type {!ConstantProvider} */ (this.getConstants()));
|
|
115
|
+
}
|
|
116
116
|
|
|
117
|
-
/**
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
117
|
+
/**
|
|
118
|
+
* @override
|
|
119
|
+
*/
|
|
120
|
+
shouldHighlightConnection(conn) {
|
|
121
|
+
return conn.type !== ConnectionType.INPUT_VALUE &&
|
|
122
|
+
conn.type !== ConnectionType.OUTPUT_VALUE;
|
|
123
|
+
}
|
|
124
124
|
|
|
125
|
-
/**
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
125
|
+
/**
|
|
126
|
+
* @override
|
|
127
|
+
*/
|
|
128
|
+
getConnectionPreviewMethod(closest, local, topBlock) {
|
|
129
|
+
if (local.type === ConnectionType.OUTPUT_VALUE) {
|
|
130
|
+
if (!closest.isConnected()) {
|
|
131
|
+
return InsertionMarkerManager.PREVIEW_TYPE.INPUT_OUTLINE;
|
|
132
|
+
}
|
|
133
|
+
// TODO: Returning this is a total hack, because we don't want to show
|
|
134
|
+
// a replacement fade, we want to show an outline affect.
|
|
135
|
+
// Sadly zelos does not support showing an outline around filled
|
|
136
|
+
// inputs, so we have to pretend like the connected block is getting
|
|
137
|
+
// replaced.
|
|
138
|
+
return InsertionMarkerManager.PREVIEW_TYPE.REPLACEMENT_FADE;
|
|
133
139
|
}
|
|
134
|
-
// TODO: Returning this is a total hack, because we don't want to show
|
|
135
|
-
// a replacement fade, we want to show an outline affect.
|
|
136
|
-
// Sadly zelos does not support showing an outline around filled
|
|
137
|
-
// inputs, so we have to pretend like the connected block is getting
|
|
138
|
-
// replaced.
|
|
139
|
-
return InsertionMarkerManager.PREVIEW_TYPE.REPLACEMENT_FADE;
|
|
140
|
-
}
|
|
141
140
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}
|
|
141
|
+
return super.getConnectionPreviewMethod(closest, local, topBlock);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
145
144
|
|
|
146
145
|
blockRendering.register('zelos', Renderer);
|
|
147
146
|
|