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.
Files changed (231) hide show
  1. package/blockly.d.ts +18963 -18432
  2. package/blockly.min.js +5 -4
  3. package/blockly_compressed.js +4 -3
  4. package/blockly_compressed.js.map +1 -1
  5. package/blocks/blocks.js +47 -0
  6. package/blocks/colour.js +13 -3
  7. package/blocks/lists.js +22 -13
  8. package/blocks/logic.js +13 -3
  9. package/blocks/loops.js +24 -11
  10. package/blocks/math.js +12 -3
  11. package/blocks/procedures.js +45 -32
  12. package/blocks/text.js +22 -13
  13. package/blocks/variables.js +14 -3
  14. package/blocks/variables_dynamic.js +13 -3
  15. package/blocks_compressed.js +1 -1
  16. package/blocks_compressed.js.map +1 -1
  17. package/core/block.js +1869 -1814
  18. package/core/block_drag_surface.js +201 -200
  19. package/core/block_dragger.js +377 -373
  20. package/core/block_svg.js +1593 -1479
  21. package/core/blockly.js +8 -22
  22. package/core/blocks.js +9 -2
  23. package/core/browser_events.js +22 -5
  24. package/core/bubble.js +841 -797
  25. package/core/bubble_dragger.js +213 -206
  26. package/core/bump_objects.js +2 -2
  27. package/core/clipboard.js +9 -9
  28. package/core/comment.js +353 -332
  29. package/core/common.js +46 -17
  30. package/core/component_manager.js +181 -174
  31. package/core/config.js +87 -0
  32. package/core/connection.js +595 -584
  33. package/core/connection_checker.js +242 -244
  34. package/core/connection_db.js +235 -230
  35. package/core/contextmenu.js +9 -6
  36. package/core/contextmenu_items.js +1 -2
  37. package/core/contextmenu_registry.js +93 -89
  38. package/core/css.js +474 -474
  39. package/core/delete_area.js +45 -42
  40. package/core/drag_target.js +57 -56
  41. package/core/dropdowndiv.js +153 -163
  42. package/core/events/events.js +2 -2
  43. package/core/events/events_abstract.js +89 -77
  44. package/core/events/events_block_base.js +37 -36
  45. package/core/events/events_block_change.js +130 -124
  46. package/core/events/events_block_create.js +73 -71
  47. package/core/events/events_block_delete.js +84 -82
  48. package/core/events/events_block_drag.js +50 -49
  49. package/core/events/events_block_move.js +147 -140
  50. package/core/events/events_bubble_open.js +51 -50
  51. package/core/events/events_click.js +48 -44
  52. package/core/events/events_comment_base.js +72 -69
  53. package/core/events/events_comment_change.js +63 -61
  54. package/core/events/events_comment_create.js +44 -42
  55. package/core/events/events_comment_delete.js +42 -40
  56. package/core/events/events_comment_move.js +106 -104
  57. package/core/events/events_marker_move.js +65 -64
  58. package/core/events/events_selected.js +46 -45
  59. package/core/events/events_theme_change.js +36 -35
  60. package/core/events/events_toolbox_item_select.js +46 -45
  61. package/core/events/events_trashcan_open.js +37 -36
  62. package/core/events/events_ui.js +47 -46
  63. package/core/events/events_ui_base.js +30 -29
  64. package/core/events/events_var_base.js +37 -36
  65. package/core/events/events_var_create.js +50 -48
  66. package/core/events/events_var_delete.js +50 -48
  67. package/core/events/events_var_rename.js +51 -49
  68. package/core/events/events_viewport.js +66 -65
  69. package/core/events/utils.js +29 -14
  70. package/core/events/workspace_events.js +49 -55
  71. package/core/extensions.js +4 -3
  72. package/core/field.js +1061 -997
  73. package/core/field_angle.js +462 -442
  74. package/core/field_checkbox.js +194 -182
  75. package/core/field_colour.js +519 -505
  76. package/core/field_dropdown.js +617 -598
  77. package/core/field_image.js +229 -220
  78. package/core/field_label.js +102 -91
  79. package/core/field_label_serializable.js +42 -41
  80. package/core/field_multilineinput.js +372 -358
  81. package/core/field_number.js +272 -253
  82. package/core/field_textinput.js +499 -467
  83. package/core/field_variable.js +458 -420
  84. package/core/flyout_base.js +1005 -952
  85. package/core/flyout_button.js +277 -260
  86. package/core/flyout_horizontal.js +304 -302
  87. package/core/flyout_metrics_manager.js +64 -64
  88. package/core/flyout_vertical.js +306 -300
  89. package/core/generator.js +459 -446
  90. package/core/gesture.js +829 -813
  91. package/core/grid.js +166 -163
  92. package/core/icon.js +168 -159
  93. package/core/inject.js +7 -5
  94. package/core/input.js +257 -248
  95. package/core/insertion_marker_manager.js +655 -624
  96. package/core/internal_constants.js +0 -129
  97. package/core/keyboard_nav/ast_node.js +605 -596
  98. package/core/keyboard_nav/basic_cursor.js +166 -165
  99. package/core/keyboard_nav/cursor.js +99 -97
  100. package/core/keyboard_nav/marker.js +83 -79
  101. package/core/keyboard_nav/tab_navigate_cursor.js +18 -23
  102. package/core/marker_manager.js +153 -141
  103. package/core/menu.js +377 -372
  104. package/core/menuitem.js +223 -217
  105. package/core/metrics_manager.js +403 -390
  106. package/core/mutator.js +468 -437
  107. package/core/names.js +229 -188
  108. package/core/options.js +290 -284
  109. package/core/procedures.js +29 -17
  110. package/core/registry.js +19 -16
  111. package/core/rendered_connection.js +482 -463
  112. package/core/renderers/common/block_rendering.js +9 -3
  113. package/core/renderers/common/constants.js +1119 -1112
  114. package/core/renderers/common/debug.js +14 -0
  115. package/core/renderers/common/debugger.js +338 -316
  116. package/core/renderers/common/drawer.js +380 -370
  117. package/core/renderers/common/i_path_object.js +2 -2
  118. package/core/renderers/common/info.js +626 -618
  119. package/core/renderers/common/marker_svg.js +579 -541
  120. package/core/renderers/common/path_object.js +203 -200
  121. package/core/renderers/common/renderer.js +220 -218
  122. package/core/renderers/geras/constants.js +36 -36
  123. package/core/renderers/geras/drawer.js +155 -147
  124. package/core/renderers/geras/highlight_constants.js +244 -238
  125. package/core/renderers/geras/highlighter.js +231 -179
  126. package/core/renderers/geras/info.js +392 -369
  127. package/core/renderers/geras/measurables/inline_input.js +25 -19
  128. package/core/renderers/geras/measurables/statement_input.js +23 -17
  129. package/core/renderers/geras/path_object.js +106 -121
  130. package/core/renderers/geras/renderer.js +96 -98
  131. package/core/renderers/measurables/base.js +30 -18
  132. package/core/renderers/measurables/bottom_row.js +83 -80
  133. package/core/renderers/measurables/connection.js +22 -15
  134. package/core/renderers/measurables/external_value_input.js +35 -22
  135. package/core/renderers/measurables/field.js +35 -20
  136. package/core/renderers/measurables/hat.js +18 -13
  137. package/core/renderers/measurables/icon.js +24 -17
  138. package/core/renderers/measurables/in_row_spacer.js +15 -13
  139. package/core/renderers/measurables/inline_input.js +43 -33
  140. package/core/renderers/measurables/input_connection.js +41 -28
  141. package/core/renderers/measurables/input_row.js +50 -44
  142. package/core/renderers/measurables/jagged_edge.js +14 -12
  143. package/core/renderers/measurables/next_connection.js +16 -14
  144. package/core/renderers/measurables/output_connection.js +26 -20
  145. package/core/renderers/measurables/previous_connection.js +16 -15
  146. package/core/renderers/measurables/round_corner.js +20 -18
  147. package/core/renderers/measurables/row.js +184 -168
  148. package/core/renderers/measurables/spacer_row.js +38 -23
  149. package/core/renderers/measurables/square_corner.js +18 -16
  150. package/core/renderers/measurables/statement_input.js +23 -20
  151. package/core/renderers/measurables/top_row.js +88 -85
  152. package/core/renderers/minimalist/constants.js +8 -7
  153. package/core/renderers/minimalist/drawer.js +11 -10
  154. package/core/renderers/minimalist/info.js +18 -18
  155. package/core/renderers/minimalist/renderer.js +40 -39
  156. package/core/renderers/thrasos/info.js +258 -248
  157. package/core/renderers/thrasos/renderer.js +20 -20
  158. package/core/renderers/zelos/constants.js +898 -873
  159. package/core/renderers/zelos/drawer.js +186 -169
  160. package/core/renderers/zelos/info.js +502 -479
  161. package/core/renderers/zelos/marker_svg.js +129 -115
  162. package/core/renderers/zelos/measurables/bottom_row.js +31 -30
  163. package/core/renderers/zelos/measurables/inputs.js +22 -21
  164. package/core/renderers/zelos/measurables/row_elements.js +14 -13
  165. package/core/renderers/zelos/measurables/top_row.js +34 -33
  166. package/core/renderers/zelos/path_object.js +181 -180
  167. package/core/renderers/zelos/renderer.js +91 -92
  168. package/core/scrollbar.js +759 -713
  169. package/core/scrollbar_pair.js +250 -245
  170. package/core/serialization/blocks.js +26 -10
  171. package/core/serialization/workspaces.js +3 -2
  172. package/core/shortcut_registry.js +286 -277
  173. package/core/sprites.js +31 -0
  174. package/core/theme.js +135 -141
  175. package/core/theme_manager.js +147 -143
  176. package/core/toolbox/category.js +602 -576
  177. package/core/toolbox/collapsible_category.js +226 -227
  178. package/core/toolbox/separator.js +70 -61
  179. package/core/toolbox/toolbox.js +934 -927
  180. package/core/toolbox/toolbox_item.js +115 -99
  181. package/core/tooltip.js +108 -35
  182. package/core/touch.js +8 -3
  183. package/core/touch_gesture.js +254 -251
  184. package/core/trashcan.js +606 -595
  185. package/core/utils/coordinate.js +97 -95
  186. package/core/utils/dom.js +2 -2
  187. package/core/utils/global.js +2 -0
  188. package/core/utils/rect.js +41 -37
  189. package/core/utils/sentinel.js +25 -0
  190. package/core/utils/size.js +30 -27
  191. package/core/utils/svg.js +18 -16
  192. package/core/variable_map.js +325 -341
  193. package/core/variable_model.js +55 -54
  194. package/core/variables.js +9 -2
  195. package/core/variables_dynamic.js +3 -1
  196. package/core/warning.js +126 -120
  197. package/core/widgetdiv.js +4 -4
  198. package/core/workspace.js +685 -664
  199. package/core/workspace_audio.js +124 -118
  200. package/core/workspace_comment.js +308 -298
  201. package/core/workspace_comment_svg.js +1029 -951
  202. package/core/workspace_drag_surface_svg.js +147 -140
  203. package/core/workspace_dragger.js +70 -71
  204. package/core/workspace_svg.js +2322 -2297
  205. package/core/xml.js +30 -20
  206. package/core/zoom_controls.js +431 -439
  207. package/generators/dart/colour.js +56 -64
  208. package/generators/dart/lists.js +61 -50
  209. package/generators/dart/math.js +160 -148
  210. package/generators/dart/text.js +83 -61
  211. package/generators/javascript/colour.js +37 -34
  212. package/generators/javascript/lists.js +50 -43
  213. package/generators/javascript/math.js +123 -139
  214. package/generators/javascript/text.js +67 -81
  215. package/generators/lua/colour.js +25 -23
  216. package/generators/lua/lists.js +97 -69
  217. package/generators/lua/logic.js +1 -2
  218. package/generators/lua/math.js +182 -144
  219. package/generators/lua/text.js +116 -99
  220. package/generators/php/colour.js +38 -32
  221. package/generators/php/lists.js +109 -89
  222. package/generators/php/math.js +90 -81
  223. package/generators/php/text.js +63 -61
  224. package/generators/python/colour.js +18 -18
  225. package/generators/python/lists.js +38 -30
  226. package/generators/python/loops.js +12 -8
  227. package/generators/python/math.js +104 -106
  228. package/generators/python/text.js +34 -30
  229. package/msg/smn.js +436 -0
  230. package/package.json +7 -6
  231. 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
- const Grid = function(pattern, options) {
29
+ class Grid {
36
30
  /**
37
- * The grid's SVG pattern, created during injection.
38
- * @type {!SVGElement}
39
- * @private
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
- this.gridPattern_ = pattern;
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
- * The spacing of the grid lines (in px).
45
- * @type {number}
46
- * @private
91
+ * Dispose of this grid and unlink from the DOM.
92
+ * @package
93
+ * @suppress {checkTypes}
47
94
  */
48
- this.spacing_ = options['spacing'];
95
+ dispose() {
96
+ this.gridPattern_ = null;
97
+ }
49
98
 
50
99
  /**
51
- * How long the grid lines should be (in px).
52
- * @type {number}
53
- * @private
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
- this.length_ = options['length'];
104
+ shouldSnap() {
105
+ return this.snapToGrid_;
106
+ }
56
107
 
57
108
  /**
58
- * The horizontal grid line, if it exists.
59
- * @type {SVGElement}
60
- * @private
109
+ * Get the spacing of the grid points (in px).
110
+ * @return {number} The spacing of the grid points.
111
+ * @package
61
112
  */
62
- this.line1_ = /** @type {SVGElement} */ (pattern.firstChild);
113
+ getSpacing() {
114
+ return this.spacing_;
115
+ }
63
116
 
64
117
  /**
65
- * The vertical grid line, if it exists.
66
- * @type {SVGElement}
67
- * @private
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
- this.line2_ =
70
- this.line1_ && (/** @type {SVGElement} */ (this.line1_.nextSibling));
123
+ getPatternId() {
124
+ return this.gridPattern_.id;
125
+ }
71
126
 
72
127
  /**
73
- * Whether blocks should snap to the grid.
74
- * @type {boolean}
75
- * @private
128
+ * Update the grid with a new scale.
129
+ * @param {number} scale The new workspace scale.
130
+ * @package
76
131
  */
77
- this.snapToGrid_ = options['snap'];
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
- * The scale of the grid, used to set stroke width on grid lines.
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
- * Whether blocks should snap to the grid, based on the initial configuration.
99
- * @return {boolean} True if blocks should snap, false otherwise.
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
- * Get the spacing of the grid points (in px).
108
- * @return {number} The spacing of the grid points.
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
- * Update the grid with a new scale.
127
- * @param {number} scale The new workspace scale.
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
- * Set the attributes on one of the lines in the grid. Use this to update the
152
- * length and stroke width of the grid lines.
153
- * @param {SVGElement} line Which line to update.
154
- * @param {number} width The new stroke size (in px).
155
- * @param {number} x1 The new x start position of the line (in px).
156
- * @param {number} x2 The new x end position of the line (in px).
157
- * @param {number} y1 The new y start position of the line (in px).
158
- * @param {number} y2 The new y end position of the line (in px).
159
- * @private
160
- */
161
- Grid.prototype.setLineAttributes_ = function(line, width, x1, x2, y1, y2) {
162
- if (line) {
163
- line.setAttribute('stroke-width', width);
164
- line.setAttribute('x1', x1);
165
- line.setAttribute('y1', y1);
166
- line.setAttribute('x2', x2);
167
- line.setAttribute('y2', y2);
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
- * Move the grid to a new x and y position, and make sure that change is
173
- * visible.
174
- * @param {number} x The new x position of the grid (in px).
175
- * @param {number} y The new y position of the grid (in px).
176
- * @package
177
- */
178
- Grid.prototype.moveTo = function(x, y) {
179
- this.gridPattern_.setAttribute('x', x);
180
- this.gridPattern_.setAttribute('y', y);
181
-
182
- if (userAgent.IE || userAgent.EDGE) {
183
- // IE/Edge doesn't notice that the x/y offsets have changed.
184
- // Force an update.
185
- this.update(this.scale_);
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
- * Create the DOM for the grid described by options.
191
- * @param {string} rnd A random ID to append to the pattern's ID.
192
- * @param {!Object} gridOptions The object containing grid configuration.
193
- * @param {!SVGElement} defs The root SVG element for this workspace's defs.
194
- * @return {!SVGElement} The SVG element for the grid pattern.
195
- * @package
196
- */
197
- Grid.createDom = function(rnd, gridOptions, defs) {
198
- /*
199
- <pattern id="blocklyGridPattern837493" patternUnits="userSpaceOnUse">
200
- <rect stroke="#888" />
201
- <rect stroke="#888" />
202
- </pattern>
203
- */
204
- const gridPattern = dom.createSvgElement(
205
- Svg.PATTERN,
206
- {'id': 'blocklyGridPattern' + rnd, 'patternUnits': 'userSpaceOnUse'},
207
- defs);
208
- if (gridOptions['length'] > 0 && gridOptions['spacing'] > 0) {
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
- // x1, y1, x1, x2 properties will be set later in update.
216
- } else {
217
- // Edge 16 doesn't handle empty patterns
218
- dom.createSvgElement(Svg.LINE, {}, gridPattern);
222
+ return gridPattern;
219
223
  }
220
- return gridPattern;
221
- };
224
+ }
222
225
 
223
226
  exports.Grid = Grid;