blockly 7.20211209.4 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blockly.d.ts +18963 -18432
- package/blockly.min.js +5 -4
- package/blockly_compressed.js +4 -3
- 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 +45 -32
- package/blocks/text.js +22 -13
- package/blocks/variables.js +14 -3
- package/blocks/variables_dynamic.js +13 -3
- package/blocks_compressed.js +1 -1
- 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 +26 -10
- 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/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/msg/smn.js +436 -0
- package/package.json +7 -6
- package/blocks/all.js +0 -23
package/core/grid.js
CHANGED
|
@@ -24,200 +24,203 @@ const {Svg} = goog.require('Blockly.utils.Svg');
|
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Class for a workspace's grid.
|
|
27
|
-
* @param {!SVGElement} pattern The grid's SVG pattern, created during
|
|
28
|
-
* injection.
|
|
29
|
-
* @param {!Object} options A dictionary of normalized options for the grid.
|
|
30
|
-
* See grid documentation:
|
|
31
|
-
* https://developers.google.com/blockly/guides/configure/web/grid
|
|
32
|
-
* @constructor
|
|
33
27
|
* @alias Blockly.Grid
|
|
34
28
|
*/
|
|
35
|
-
|
|
29
|
+
class Grid {
|
|
36
30
|
/**
|
|
37
|
-
* The grid's SVG pattern, created during
|
|
38
|
-
*
|
|
39
|
-
* @
|
|
31
|
+
* @param {!SVGElement} pattern The grid's SVG pattern, created during
|
|
32
|
+
* injection.
|
|
33
|
+
* @param {!Object} options A dictionary of normalized options for the grid.
|
|
34
|
+
* See grid documentation:
|
|
35
|
+
* https://developers.google.com/blockly/guides/configure/web/grid
|
|
40
36
|
*/
|
|
41
|
-
|
|
37
|
+
constructor(pattern, options) {
|
|
38
|
+
/**
|
|
39
|
+
* The scale of the grid, used to set stroke width on grid lines.
|
|
40
|
+
* This should always be the same as the workspace scale.
|
|
41
|
+
* @type {number}
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
this.scale_ = 1;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The grid's SVG pattern, created during injection.
|
|
48
|
+
* @type {!SVGElement}
|
|
49
|
+
* @private
|
|
50
|
+
*/
|
|
51
|
+
this.gridPattern_ = pattern;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The spacing of the grid lines (in px).
|
|
55
|
+
* @type {number}
|
|
56
|
+
* @private
|
|
57
|
+
*/
|
|
58
|
+
this.spacing_ = options['spacing'];
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* How long the grid lines should be (in px).
|
|
62
|
+
* @type {number}
|
|
63
|
+
* @private
|
|
64
|
+
*/
|
|
65
|
+
this.length_ = options['length'];
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The horizontal grid line, if it exists.
|
|
69
|
+
* @type {SVGElement}
|
|
70
|
+
* @private
|
|
71
|
+
*/
|
|
72
|
+
this.line1_ = /** @type {SVGElement} */ (pattern.firstChild);
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The vertical grid line, if it exists.
|
|
76
|
+
* @type {SVGElement}
|
|
77
|
+
* @private
|
|
78
|
+
*/
|
|
79
|
+
this.line2_ =
|
|
80
|
+
this.line1_ && (/** @type {SVGElement} */ (this.line1_.nextSibling));
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Whether blocks should snap to the grid.
|
|
84
|
+
* @type {boolean}
|
|
85
|
+
* @private
|
|
86
|
+
*/
|
|
87
|
+
this.snapToGrid_ = options['snap'];
|
|
88
|
+
}
|
|
42
89
|
|
|
43
90
|
/**
|
|
44
|
-
*
|
|
45
|
-
* @
|
|
46
|
-
* @
|
|
91
|
+
* Dispose of this grid and unlink from the DOM.
|
|
92
|
+
* @package
|
|
93
|
+
* @suppress {checkTypes}
|
|
47
94
|
*/
|
|
48
|
-
|
|
95
|
+
dispose() {
|
|
96
|
+
this.gridPattern_ = null;
|
|
97
|
+
}
|
|
49
98
|
|
|
50
99
|
/**
|
|
51
|
-
*
|
|
52
|
-
* @
|
|
53
|
-
* @
|
|
100
|
+
* Whether blocks should snap to the grid, based on the initial configuration.
|
|
101
|
+
* @return {boolean} True if blocks should snap, false otherwise.
|
|
102
|
+
* @package
|
|
54
103
|
*/
|
|
55
|
-
|
|
104
|
+
shouldSnap() {
|
|
105
|
+
return this.snapToGrid_;
|
|
106
|
+
}
|
|
56
107
|
|
|
57
108
|
/**
|
|
58
|
-
*
|
|
59
|
-
* @
|
|
60
|
-
* @
|
|
109
|
+
* Get the spacing of the grid points (in px).
|
|
110
|
+
* @return {number} The spacing of the grid points.
|
|
111
|
+
* @package
|
|
61
112
|
*/
|
|
62
|
-
|
|
113
|
+
getSpacing() {
|
|
114
|
+
return this.spacing_;
|
|
115
|
+
}
|
|
63
116
|
|
|
64
117
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* @
|
|
118
|
+
* Get the ID of the pattern element, which should be randomized to avoid
|
|
119
|
+
* conflicts with other Blockly instances on the page.
|
|
120
|
+
* @return {string} The pattern ID.
|
|
121
|
+
* @package
|
|
68
122
|
*/
|
|
69
|
-
|
|
70
|
-
|
|
123
|
+
getPatternId() {
|
|
124
|
+
return this.gridPattern_.id;
|
|
125
|
+
}
|
|
71
126
|
|
|
72
127
|
/**
|
|
73
|
-
*
|
|
74
|
-
* @
|
|
75
|
-
* @
|
|
128
|
+
* Update the grid with a new scale.
|
|
129
|
+
* @param {number} scale The new workspace scale.
|
|
130
|
+
* @package
|
|
76
131
|
*/
|
|
77
|
-
|
|
78
|
-
|
|
132
|
+
update(scale) {
|
|
133
|
+
this.scale_ = scale;
|
|
134
|
+
// MSIE freaks if it sees a 0x0 pattern, so set empty patterns to 100x100.
|
|
135
|
+
const safeSpacing = (this.spacing_ * scale) || 100;
|
|
79
136
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
* This should always be the same as the workspace scale.
|
|
83
|
-
* @type {number}
|
|
84
|
-
* @private
|
|
85
|
-
*/
|
|
86
|
-
Grid.prototype.scale_ = 1;
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Dispose of this grid and unlink from the DOM.
|
|
90
|
-
* @package
|
|
91
|
-
* @suppress {checkTypes}
|
|
92
|
-
*/
|
|
93
|
-
Grid.prototype.dispose = function() {
|
|
94
|
-
this.gridPattern_ = null;
|
|
95
|
-
};
|
|
137
|
+
this.gridPattern_.setAttribute('width', safeSpacing);
|
|
138
|
+
this.gridPattern_.setAttribute('height', safeSpacing);
|
|
96
139
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
* @package
|
|
101
|
-
*/
|
|
102
|
-
Grid.prototype.shouldSnap = function() {
|
|
103
|
-
return this.snapToGrid_;
|
|
104
|
-
};
|
|
140
|
+
let half = Math.floor(this.spacing_ / 2) + 0.5;
|
|
141
|
+
let start = half - this.length_ / 2;
|
|
142
|
+
let end = half + this.length_ / 2;
|
|
105
143
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
* @package
|
|
110
|
-
*/
|
|
111
|
-
Grid.prototype.getSpacing = function() {
|
|
112
|
-
return this.spacing_;
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Get the ID of the pattern element, which should be randomized to avoid
|
|
117
|
-
* conflicts with other Blockly instances on the page.
|
|
118
|
-
* @return {string} The pattern ID.
|
|
119
|
-
* @package
|
|
120
|
-
*/
|
|
121
|
-
Grid.prototype.getPatternId = function() {
|
|
122
|
-
return this.gridPattern_.id;
|
|
123
|
-
};
|
|
144
|
+
half *= scale;
|
|
145
|
+
start *= scale;
|
|
146
|
+
end *= scale;
|
|
124
147
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
* @package
|
|
129
|
-
*/
|
|
130
|
-
Grid.prototype.update = function(scale) {
|
|
131
|
-
this.scale_ = scale;
|
|
132
|
-
// MSIE freaks if it sees a 0x0 pattern, so set empty patterns to 100x100.
|
|
133
|
-
const safeSpacing = (this.spacing_ * scale) || 100;
|
|
134
|
-
|
|
135
|
-
this.gridPattern_.setAttribute('width', safeSpacing);
|
|
136
|
-
this.gridPattern_.setAttribute('height', safeSpacing);
|
|
137
|
-
|
|
138
|
-
let half = Math.floor(this.spacing_ / 2) + 0.5;
|
|
139
|
-
let start = half - this.length_ / 2;
|
|
140
|
-
let end = half + this.length_ / 2;
|
|
141
|
-
|
|
142
|
-
half *= scale;
|
|
143
|
-
start *= scale;
|
|
144
|
-
end *= scale;
|
|
145
|
-
|
|
146
|
-
this.setLineAttributes_(this.line1_, scale, start, end, half, half);
|
|
147
|
-
this.setLineAttributes_(this.line2_, scale, half, half, start, end);
|
|
148
|
-
};
|
|
148
|
+
this.setLineAttributes_(this.line1_, scale, start, end, half, half);
|
|
149
|
+
this.setLineAttributes_(this.line2_, scale, half, half, start, end);
|
|
150
|
+
}
|
|
149
151
|
|
|
150
|
-
/**
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
152
|
+
/**
|
|
153
|
+
* Set the attributes on one of the lines in the grid. Use this to update the
|
|
154
|
+
* length and stroke width of the grid lines.
|
|
155
|
+
* @param {SVGElement} line Which line to update.
|
|
156
|
+
* @param {number} width The new stroke size (in px).
|
|
157
|
+
* @param {number} x1 The new x start position of the line (in px).
|
|
158
|
+
* @param {number} x2 The new x end position of the line (in px).
|
|
159
|
+
* @param {number} y1 The new y start position of the line (in px).
|
|
160
|
+
* @param {number} y2 The new y end position of the line (in px).
|
|
161
|
+
* @private
|
|
162
|
+
*/
|
|
163
|
+
setLineAttributes_(line, width, x1, x2, y1, y2) {
|
|
164
|
+
if (line) {
|
|
165
|
+
line.setAttribute('stroke-width', width);
|
|
166
|
+
line.setAttribute('x1', x1);
|
|
167
|
+
line.setAttribute('y1', y1);
|
|
168
|
+
line.setAttribute('x2', x2);
|
|
169
|
+
line.setAttribute('y2', y2);
|
|
170
|
+
}
|
|
168
171
|
}
|
|
169
|
-
};
|
|
170
172
|
|
|
171
|
-
/**
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
173
|
+
/**
|
|
174
|
+
* Move the grid to a new x and y position, and make sure that change is
|
|
175
|
+
* visible.
|
|
176
|
+
* @param {number} x The new x position of the grid (in px).
|
|
177
|
+
* @param {number} y The new y position of the grid (in px).
|
|
178
|
+
* @package
|
|
179
|
+
*/
|
|
180
|
+
moveTo(x, y) {
|
|
181
|
+
this.gridPattern_.setAttribute('x', x);
|
|
182
|
+
this.gridPattern_.setAttribute('y', y);
|
|
183
|
+
|
|
184
|
+
if (userAgent.IE || userAgent.EDGE) {
|
|
185
|
+
// IE/Edge doesn't notice that the x/y offsets have changed.
|
|
186
|
+
// Force an update.
|
|
187
|
+
this.update(this.scale_);
|
|
188
|
+
}
|
|
186
189
|
}
|
|
187
|
-
};
|
|
188
190
|
|
|
189
|
-
/**
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
dom.createSvgElement(
|
|
210
|
-
Svg.LINE, {'stroke': gridOptions['colour']}, gridPattern);
|
|
211
|
-
if (gridOptions['length'] > 1) {
|
|
191
|
+
/**
|
|
192
|
+
* Create the DOM for the grid described by options.
|
|
193
|
+
* @param {string} rnd A random ID to append to the pattern's ID.
|
|
194
|
+
* @param {!Object} gridOptions The object containing grid configuration.
|
|
195
|
+
* @param {!SVGElement} defs The root SVG element for this workspace's defs.
|
|
196
|
+
* @return {!SVGElement} The SVG element for the grid pattern.
|
|
197
|
+
* @package
|
|
198
|
+
*/
|
|
199
|
+
static createDom(rnd, gridOptions, defs) {
|
|
200
|
+
/*
|
|
201
|
+
<pattern id="blocklyGridPattern837493" patternUnits="userSpaceOnUse">
|
|
202
|
+
<rect stroke="#888" />
|
|
203
|
+
<rect stroke="#888" />
|
|
204
|
+
</pattern>
|
|
205
|
+
*/
|
|
206
|
+
const gridPattern = dom.createSvgElement(
|
|
207
|
+
Svg.PATTERN,
|
|
208
|
+
{'id': 'blocklyGridPattern' + rnd, 'patternUnits': 'userSpaceOnUse'},
|
|
209
|
+
defs);
|
|
210
|
+
if (gridOptions['length'] > 0 && gridOptions['spacing'] > 0) {
|
|
212
211
|
dom.createSvgElement(
|
|
213
212
|
Svg.LINE, {'stroke': gridOptions['colour']}, gridPattern);
|
|
213
|
+
if (gridOptions['length'] > 1) {
|
|
214
|
+
dom.createSvgElement(
|
|
215
|
+
Svg.LINE, {'stroke': gridOptions['colour']}, gridPattern);
|
|
216
|
+
}
|
|
217
|
+
// x1, y1, x1, x2 properties will be set later in update.
|
|
218
|
+
} else {
|
|
219
|
+
// Edge 16 doesn't handle empty patterns
|
|
220
|
+
dom.createSvgElement(Svg.LINE, {}, gridPattern);
|
|
214
221
|
}
|
|
215
|
-
|
|
216
|
-
} else {
|
|
217
|
-
// Edge 16 doesn't handle empty patterns
|
|
218
|
-
dom.createSvgElement(Svg.LINE, {}, gridPattern);
|
|
222
|
+
return gridPattern;
|
|
219
223
|
}
|
|
220
|
-
|
|
221
|
-
};
|
|
224
|
+
}
|
|
222
225
|
|
|
223
226
|
exports.Grid = Grid;
|