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
|
@@ -33,155 +33,162 @@ const {Svg} = goog.require('Blockly.utils.Svg');
|
|
|
33
33
|
* Blocks are moved into this SVG during a drag, improving performance.
|
|
34
34
|
* The entire SVG is translated using CSS transforms instead of SVG so the
|
|
35
35
|
* blocks are never repainted during drag improving performance.
|
|
36
|
-
* @param {!Element} container Containing element.
|
|
37
|
-
* @constructor
|
|
38
36
|
* @alias Blockly.WorkspaceDragSurfaceSvg
|
|
39
37
|
*/
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
38
|
+
class WorkspaceDragSurfaceSvg {
|
|
39
|
+
/**
|
|
40
|
+
* @param {!Element} container Containing element.
|
|
41
|
+
*/
|
|
42
|
+
constructor(container) {
|
|
43
|
+
/**
|
|
44
|
+
* The SVG drag surface. Set once by WorkspaceDragSurfaceSvg.createDom.
|
|
45
|
+
* @type {SVGElement}
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
this.SVG_ = null;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Containing HTML element; parent of the workspace and the drag surface.
|
|
52
|
+
* @type {Element}
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
this.container_ = container;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The element to insert the block canvas and bubble canvas after when it
|
|
59
|
+
* goes back in the DOM at the end of a drag.
|
|
60
|
+
* @type {Element}
|
|
61
|
+
* @private
|
|
62
|
+
*/
|
|
63
|
+
this.previousSibling_ = null;
|
|
64
|
+
|
|
65
|
+
this.createDom();
|
|
65
66
|
}
|
|
66
|
-
|
|
67
67
|
/**
|
|
68
|
-
*
|
|
69
|
-
* progress, the SVG is empty and display: none.
|
|
70
|
-
* <svg class="blocklyWsDragSurface" style=transform:translate3d(...)>
|
|
71
|
-
* <g class="blocklyBlockCanvas"></g>
|
|
72
|
-
* <g class="blocklyBubbleCanvas">/g>
|
|
73
|
-
* </svg>
|
|
68
|
+
* Create the drag surface and inject it into the container.
|
|
74
69
|
*/
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
// fuzzy while they are being moved on the drag surface.
|
|
99
|
-
const fixedX = x.toFixed(0);
|
|
100
|
-
const fixedY = y.toFixed(0);
|
|
101
|
-
|
|
102
|
-
this.SVG_.style.display = 'block';
|
|
103
|
-
dom.setCssTransform(
|
|
104
|
-
this.SVG_, 'translate3d(' + fixedX + 'px, ' + fixedY + 'px, 0)');
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Reports the surface translation in scaled workspace coordinates.
|
|
109
|
-
* Use this when finishing a drag to return blocks to the correct position.
|
|
110
|
-
* @return {!Coordinate} Current translation of the surface
|
|
111
|
-
* @package
|
|
112
|
-
*/
|
|
113
|
-
WorkspaceDragSurfaceSvg.prototype.getSurfaceTranslation = function() {
|
|
114
|
-
return svgMath.getRelativeXY(/** @type {!SVGElement} */ (this.SVG_));
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Move the blockCanvas and bubbleCanvas out of the surface SVG and on to
|
|
119
|
-
* newSurface.
|
|
120
|
-
* @param {SVGElement} newSurface The element to put the drag surface contents
|
|
121
|
-
* into.
|
|
122
|
-
* @package
|
|
123
|
-
*/
|
|
124
|
-
WorkspaceDragSurfaceSvg.prototype.clearAndHide = function(newSurface) {
|
|
125
|
-
if (!newSurface) {
|
|
126
|
-
throw Error(
|
|
127
|
-
'Couldn\'t clear and hide the drag surface: missing new surface.');
|
|
70
|
+
createDom() {
|
|
71
|
+
if (this.SVG_) {
|
|
72
|
+
return; // Already created.
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Dom structure when the workspace is being dragged. If there is no drag in
|
|
77
|
+
* progress, the SVG is empty and display: none.
|
|
78
|
+
* <svg class="blocklyWsDragSurface" style=transform:translate3d(...)>
|
|
79
|
+
* <g class="blocklyBlockCanvas"></g>
|
|
80
|
+
* <g class="blocklyBubbleCanvas">/g>
|
|
81
|
+
* </svg>
|
|
82
|
+
*/
|
|
83
|
+
this.SVG_ = dom.createSvgElement(
|
|
84
|
+
Svg.SVG, {
|
|
85
|
+
'xmlns': dom.SVG_NS,
|
|
86
|
+
'xmlns:html': dom.HTML_NS,
|
|
87
|
+
'xmlns:xlink': dom.XLINK_NS,
|
|
88
|
+
'version': '1.1',
|
|
89
|
+
'class': 'blocklyWsDragSurface blocklyOverflowVisible',
|
|
90
|
+
},
|
|
91
|
+
null);
|
|
92
|
+
this.container_.appendChild(this.SVG_);
|
|
128
93
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Translate the entire drag surface during a drag.
|
|
96
|
+
* We translate the drag surface instead of the blocks inside the surface
|
|
97
|
+
* so that the browser avoids repainting the SVG.
|
|
98
|
+
* Because of this, the drag coordinates must be adjusted by scale.
|
|
99
|
+
* @param {number} x X translation for the entire surface
|
|
100
|
+
* @param {number} y Y translation for the entire surface
|
|
101
|
+
* @package
|
|
102
|
+
*/
|
|
103
|
+
translateSurface(x, y) {
|
|
104
|
+
// This is a work-around to prevent a the blocks from rendering
|
|
105
|
+
// fuzzy while they are being moved on the drag surface.
|
|
106
|
+
const fixedX = x.toFixed(0);
|
|
107
|
+
const fixedY = y.toFixed(0);
|
|
108
|
+
|
|
109
|
+
this.SVG_.style.display = 'block';
|
|
110
|
+
dom.setCssTransform(
|
|
111
|
+
this.SVG_, 'translate3d(' + fixedX + 'px, ' + fixedY + 'px, 0)');
|
|
136
112
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
113
|
+
/**
|
|
114
|
+
* Reports the surface translation in scaled workspace coordinates.
|
|
115
|
+
* Use this when finishing a drag to return blocks to the correct position.
|
|
116
|
+
* @return {!Coordinate} Current translation of the surface
|
|
117
|
+
* @package
|
|
118
|
+
*/
|
|
119
|
+
getSurfaceTranslation() {
|
|
120
|
+
return svgMath.getRelativeXY(/** @type {!SVGElement} */ (this.SVG_));
|
|
144
121
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
122
|
+
/**
|
|
123
|
+
* Move the blockCanvas and bubbleCanvas out of the surface SVG and on to
|
|
124
|
+
* newSurface.
|
|
125
|
+
* @param {SVGElement} newSurface The element to put the drag surface contents
|
|
126
|
+
* into.
|
|
127
|
+
* @package
|
|
128
|
+
*/
|
|
129
|
+
clearAndHide(newSurface) {
|
|
130
|
+
if (!newSurface) {
|
|
131
|
+
throw Error(
|
|
132
|
+
'Couldn\'t clear and hide the drag surface: missing new surface.');
|
|
133
|
+
}
|
|
134
|
+
const blockCanvas = /** @type {!Element} */ (this.SVG_.childNodes[0]);
|
|
135
|
+
const bubbleCanvas = /** @type {!Element} */ (this.SVG_.childNodes[1]);
|
|
136
|
+
if (!blockCanvas || !bubbleCanvas ||
|
|
137
|
+
!dom.hasClass(blockCanvas, 'blocklyBlockCanvas') ||
|
|
138
|
+
!dom.hasClass(bubbleCanvas, 'blocklyBubbleCanvas')) {
|
|
139
|
+
throw Error(
|
|
140
|
+
'Couldn\'t clear and hide the drag surface. A node was missing.');
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// If there is a previous sibling, put the blockCanvas back right
|
|
144
|
+
// afterwards, otherwise insert it as the first child node in newSurface.
|
|
145
|
+
if (this.previousSibling_ !== null) {
|
|
146
|
+
dom.insertAfter(blockCanvas, this.previousSibling_);
|
|
147
|
+
} else {
|
|
148
|
+
newSurface.insertBefore(blockCanvas, newSurface.firstChild);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Reattach the bubble canvas after the blockCanvas.
|
|
152
|
+
dom.insertAfter(bubbleCanvas, blockCanvas);
|
|
153
|
+
// Hide the drag surface.
|
|
154
|
+
this.SVG_.style.display = 'none';
|
|
155
|
+
if (this.SVG_.childNodes.length) {
|
|
156
|
+
throw Error('Drag surface was not cleared.');
|
|
157
|
+
}
|
|
158
|
+
dom.setCssTransform(this.SVG_, '');
|
|
159
|
+
this.previousSibling_ = null;
|
|
152
160
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
161
|
+
/**
|
|
162
|
+
* Set the SVG to have the block canvas and bubble canvas in it and then
|
|
163
|
+
* show the surface.
|
|
164
|
+
* @param {!SVGElement} blockCanvas The block canvas <g> element from the
|
|
165
|
+
* workspace.
|
|
166
|
+
* @param {!SVGElement} bubbleCanvas The <g> element that contains the
|
|
167
|
+
bubbles.
|
|
168
|
+
* @param {Element} previousSibling The element to insert the block canvas and
|
|
169
|
+
bubble canvas after when it goes back in the DOM at the end of a drag.
|
|
170
|
+
* @param {number} width The width of the workspace SVG element.
|
|
171
|
+
* @param {number} height The height of the workspace SVG element.
|
|
172
|
+
* @param {number} scale The scale of the workspace being dragged.
|
|
173
|
+
* @package
|
|
174
|
+
*/
|
|
175
|
+
setContentsAndShow(
|
|
176
|
+
blockCanvas, bubbleCanvas, previousSibling, width, height, scale) {
|
|
177
|
+
if (this.SVG_.childNodes.length) {
|
|
178
|
+
throw Error('Already dragging a block.');
|
|
179
|
+
}
|
|
180
|
+
this.previousSibling_ = previousSibling;
|
|
181
|
+
// Make sure the blocks and bubble canvas are scaled appropriately.
|
|
182
|
+
blockCanvas.setAttribute(
|
|
183
|
+
'transform', 'translate(0, 0) scale(' + scale + ')');
|
|
184
|
+
bubbleCanvas.setAttribute(
|
|
185
|
+
'transform', 'translate(0, 0) scale(' + scale + ')');
|
|
186
|
+
this.SVG_.setAttribute('width', width);
|
|
187
|
+
this.SVG_.setAttribute('height', height);
|
|
188
|
+
this.SVG_.appendChild(blockCanvas);
|
|
189
|
+
this.SVG_.appendChild(bubbleCanvas);
|
|
190
|
+
this.SVG_.style.display = 'block';
|
|
174
191
|
}
|
|
175
|
-
|
|
176
|
-
// Make sure the blocks and bubble canvas are scaled appropriately.
|
|
177
|
-
blockCanvas.setAttribute('transform', 'translate(0, 0) scale(' + scale + ')');
|
|
178
|
-
bubbleCanvas.setAttribute(
|
|
179
|
-
'transform', 'translate(0, 0) scale(' + scale + ')');
|
|
180
|
-
this.SVG_.setAttribute('width', width);
|
|
181
|
-
this.SVG_.setAttribute('height', height);
|
|
182
|
-
this.SVG_.appendChild(blockCanvas);
|
|
183
|
-
this.SVG_.appendChild(bubbleCanvas);
|
|
184
|
-
this.SVG_.style.display = 'block';
|
|
185
|
-
};
|
|
192
|
+
}
|
|
186
193
|
|
|
187
194
|
exports.WorkspaceDragSurfaceSvg = WorkspaceDragSurfaceSvg;
|
|
@@ -27,90 +27,89 @@ const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
|
|
|
27
27
|
* Note that the workspace itself manages whether or not it has a drag surface
|
|
28
28
|
* and how to do translations based on that. This simply passes the right
|
|
29
29
|
* commands based on events.
|
|
30
|
-
* @param {!WorkspaceSvg} workspace The workspace to drag.
|
|
31
|
-
* @constructor
|
|
32
30
|
* @alias Blockly.WorkspaceDragger
|
|
33
31
|
*/
|
|
34
|
-
|
|
32
|
+
class WorkspaceDragger {
|
|
35
33
|
/**
|
|
36
|
-
* @
|
|
37
|
-
* @private
|
|
34
|
+
* @param {!WorkspaceSvg} workspace The workspace to drag.
|
|
38
35
|
*/
|
|
39
|
-
|
|
36
|
+
constructor(workspace) {
|
|
37
|
+
/**
|
|
38
|
+
* @type {!WorkspaceSvg}
|
|
39
|
+
* @private
|
|
40
|
+
*/
|
|
41
|
+
this.workspace_ = workspace;
|
|
40
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Whether horizontal scroll is enabled.
|
|
45
|
+
* @type {boolean}
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
this.horizontalScrollEnabled_ = this.workspace_.isMovableHorizontally();
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Whether vertical scroll is enabled.
|
|
52
|
+
* @type {boolean}
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
this.verticalScrollEnabled_ = this.workspace_.isMovableVertically();
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The scroll position of the workspace at the beginning of the drag.
|
|
59
|
+
* Coordinate system: pixel coordinates.
|
|
60
|
+
* @type {!Coordinate}
|
|
61
|
+
* @protected
|
|
62
|
+
*/
|
|
63
|
+
this.startScrollXY_ = new Coordinate(workspace.scrollX, workspace.scrollY);
|
|
64
|
+
}
|
|
41
65
|
/**
|
|
42
|
-
*
|
|
43
|
-
* @
|
|
44
|
-
* @
|
|
66
|
+
* Sever all links from this object.
|
|
67
|
+
* @package
|
|
68
|
+
* @suppress {checkTypes}
|
|
45
69
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
70
|
+
dispose() {
|
|
71
|
+
this.workspace_ = null;
|
|
72
|
+
}
|
|
48
73
|
/**
|
|
49
|
-
*
|
|
50
|
-
* @
|
|
51
|
-
* @private
|
|
74
|
+
* Start dragging the workspace.
|
|
75
|
+
* @package
|
|
52
76
|
*/
|
|
53
|
-
|
|
54
|
-
|
|
77
|
+
startDrag() {
|
|
78
|
+
if (common.getSelected()) {
|
|
79
|
+
common.getSelected().unselect();
|
|
80
|
+
}
|
|
81
|
+
this.workspace_.setupDragSurface();
|
|
82
|
+
}
|
|
55
83
|
/**
|
|
56
|
-
*
|
|
57
|
-
* Coordinate
|
|
58
|
-
*
|
|
59
|
-
* @
|
|
84
|
+
* Finish dragging the workspace and put everything back where it belongs.
|
|
85
|
+
* @param {!Coordinate} currentDragDeltaXY How far the pointer has
|
|
86
|
+
* moved from the position at the start of the drag, in pixel coordinates.
|
|
87
|
+
* @package
|
|
60
88
|
*/
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
* Sever all links from this object.
|
|
66
|
-
* @package
|
|
67
|
-
* @suppress {checkTypes}
|
|
68
|
-
*/
|
|
69
|
-
WorkspaceDragger.prototype.dispose = function() {
|
|
70
|
-
this.workspace_ = null;
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Start dragging the workspace.
|
|
75
|
-
* @package
|
|
76
|
-
*/
|
|
77
|
-
WorkspaceDragger.prototype.startDrag = function() {
|
|
78
|
-
if (common.getSelected()) {
|
|
79
|
-
common.getSelected().unselect();
|
|
89
|
+
endDrag(currentDragDeltaXY) {
|
|
90
|
+
// Make sure everything is up to date.
|
|
91
|
+
this.drag(currentDragDeltaXY);
|
|
92
|
+
this.workspace_.resetDragSurface();
|
|
80
93
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
*/
|
|
90
|
-
WorkspaceDragger.prototype.endDrag = function(currentDragDeltaXY) {
|
|
91
|
-
// Make sure everything is up to date.
|
|
92
|
-
this.drag(currentDragDeltaXY);
|
|
93
|
-
this.workspace_.resetDragSurface();
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Move the workspace based on the most recent mouse movements.
|
|
98
|
-
* @param {!Coordinate} currentDragDeltaXY How far the pointer has
|
|
99
|
-
* moved from the position at the start of the drag, in pixel coordinates.
|
|
100
|
-
* @package
|
|
101
|
-
*/
|
|
102
|
-
WorkspaceDragger.prototype.drag = function(currentDragDeltaXY) {
|
|
103
|
-
const newXY = Coordinate.sum(this.startScrollXY_, currentDragDeltaXY);
|
|
94
|
+
/**
|
|
95
|
+
* Move the workspace based on the most recent mouse movements.
|
|
96
|
+
* @param {!Coordinate} currentDragDeltaXY How far the pointer has
|
|
97
|
+
* moved from the position at the start of the drag, in pixel coordinates.
|
|
98
|
+
* @package
|
|
99
|
+
*/
|
|
100
|
+
drag(currentDragDeltaXY) {
|
|
101
|
+
const newXY = Coordinate.sum(this.startScrollXY_, currentDragDeltaXY);
|
|
104
102
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
103
|
+
if (this.horizontalScrollEnabled_ && this.verticalScrollEnabled_) {
|
|
104
|
+
this.workspace_.scroll(newXY.x, newXY.y);
|
|
105
|
+
} else if (this.horizontalScrollEnabled_) {
|
|
106
|
+
this.workspace_.scroll(newXY.x, this.workspace_.scrollY);
|
|
107
|
+
} else if (this.verticalScrollEnabled_) {
|
|
108
|
+
this.workspace_.scroll(this.workspace_.scrollX, newXY.y);
|
|
109
|
+
} else {
|
|
110
|
+
throw new TypeError('Invalid state.');
|
|
111
|
+
}
|
|
113
112
|
}
|
|
114
|
-
}
|
|
113
|
+
}
|
|
115
114
|
|
|
116
115
|
exports.WorkspaceDragger = WorkspaceDragger;
|