blockly 7.20211209.2 → 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
|
@@ -26,105 +26,109 @@ const {MarkerSvg} = goog.requireType('Blockly.blockRendering.MarkerSvg');
|
|
|
26
26
|
/**
|
|
27
27
|
* Class for a marker.
|
|
28
28
|
* This is used in keyboard navigation to save a location in the Blockly AST.
|
|
29
|
-
* @constructor
|
|
30
29
|
* @alias Blockly.Marker
|
|
31
30
|
*/
|
|
32
|
-
|
|
31
|
+
class Marker {
|
|
33
32
|
/**
|
|
34
|
-
*
|
|
35
|
-
* @type {?string}
|
|
33
|
+
* Constructs a new Marker instance.
|
|
36
34
|
*/
|
|
37
|
-
|
|
35
|
+
constructor() {
|
|
36
|
+
/**
|
|
37
|
+
* The colour of the marker.
|
|
38
|
+
* @type {?string}
|
|
39
|
+
*/
|
|
40
|
+
this.colour = null;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The current location of the marker.
|
|
44
|
+
* @type {ASTNode}
|
|
45
|
+
* @private
|
|
46
|
+
*/
|
|
47
|
+
this.curNode_ = null;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The object in charge of drawing the visual representation of the current
|
|
51
|
+
* node.
|
|
52
|
+
* @type {MarkerSvg}
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
this.drawer_ = null;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The type of the marker.
|
|
59
|
+
* @type {string}
|
|
60
|
+
*/
|
|
61
|
+
this.type = 'marker';
|
|
62
|
+
}
|
|
38
63
|
|
|
39
64
|
/**
|
|
40
|
-
*
|
|
41
|
-
* @
|
|
42
|
-
*
|
|
65
|
+
* Sets the object in charge of drawing the marker.
|
|
66
|
+
* @param {MarkerSvg} drawer The object in charge of
|
|
67
|
+
* drawing the marker.
|
|
43
68
|
*/
|
|
44
|
-
|
|
69
|
+
setDrawer(drawer) {
|
|
70
|
+
this.drawer_ = drawer;
|
|
71
|
+
}
|
|
45
72
|
|
|
46
73
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* @private
|
|
74
|
+
* Get the current drawer for the marker.
|
|
75
|
+
* @return {MarkerSvg} The object in charge of drawing
|
|
76
|
+
* the marker.
|
|
51
77
|
*/
|
|
52
|
-
|
|
78
|
+
getDrawer() {
|
|
79
|
+
return this.drawer_;
|
|
80
|
+
}
|
|
53
81
|
|
|
54
82
|
/**
|
|
55
|
-
*
|
|
56
|
-
* @
|
|
83
|
+
* Gets the current location of the marker.
|
|
84
|
+
* @return {ASTNode} The current field, connection, or block the marker
|
|
85
|
+
* is on.
|
|
57
86
|
*/
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Sets the object in charge of drawing the marker.
|
|
63
|
-
* @param {MarkerSvg} drawer The object in charge of
|
|
64
|
-
* drawing the marker.
|
|
65
|
-
*/
|
|
66
|
-
Marker.prototype.setDrawer = function(drawer) {
|
|
67
|
-
this.drawer_ = drawer;
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Get the current drawer for the marker.
|
|
72
|
-
* @return {MarkerSvg} The object in charge of drawing
|
|
73
|
-
* the marker.
|
|
74
|
-
*/
|
|
75
|
-
Marker.prototype.getDrawer = function() {
|
|
76
|
-
return this.drawer_;
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Gets the current location of the marker.
|
|
81
|
-
* @return {ASTNode} The current field, connection, or block the marker
|
|
82
|
-
* is on.
|
|
83
|
-
*/
|
|
84
|
-
Marker.prototype.getCurNode = function() {
|
|
85
|
-
return this.curNode_;
|
|
86
|
-
};
|
|
87
|
+
getCurNode() {
|
|
88
|
+
return this.curNode_;
|
|
89
|
+
}
|
|
87
90
|
|
|
88
|
-
/**
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Set the location of the marker and call the update method.
|
|
93
|
+
* Setting isStack to true will only work if the newLocation is the top most
|
|
94
|
+
* output or previous connection on a stack.
|
|
95
|
+
* @param {ASTNode} newNode The new location of the marker.
|
|
96
|
+
*/
|
|
97
|
+
setCurNode(newNode) {
|
|
98
|
+
const oldNode = this.curNode_;
|
|
99
|
+
this.curNode_ = newNode;
|
|
100
|
+
if (this.drawer_) {
|
|
101
|
+
this.drawer_.draw(oldNode, this.curNode_);
|
|
102
|
+
}
|
|
99
103
|
}
|
|
100
|
-
};
|
|
101
104
|
|
|
102
|
-
/**
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Redraw the current marker.
|
|
107
|
+
* @package
|
|
108
|
+
*/
|
|
109
|
+
draw() {
|
|
110
|
+
if (this.drawer_) {
|
|
111
|
+
this.drawer_.draw(this.curNode_, this.curNode_);
|
|
112
|
+
}
|
|
109
113
|
}
|
|
110
|
-
};
|
|
111
114
|
|
|
112
|
-
/**
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
/**
|
|
116
|
+
* Hide the marker SVG.
|
|
117
|
+
*/
|
|
118
|
+
hide() {
|
|
119
|
+
if (this.drawer_) {
|
|
120
|
+
this.drawer_.hide();
|
|
121
|
+
}
|
|
118
122
|
}
|
|
119
|
-
};
|
|
120
123
|
|
|
121
|
-
/**
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
/**
|
|
125
|
+
* Dispose of this marker.
|
|
126
|
+
*/
|
|
127
|
+
dispose() {
|
|
128
|
+
if (this.getDrawer()) {
|
|
129
|
+
this.getDrawer().dispose();
|
|
130
|
+
}
|
|
127
131
|
}
|
|
128
|
-
}
|
|
132
|
+
}
|
|
129
133
|
|
|
130
134
|
exports.Marker = Marker;
|
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
*/
|
|
18
18
|
goog.module('Blockly.TabNavigateCursor');
|
|
19
19
|
|
|
20
|
-
const object = goog.require('Blockly.utils.object');
|
|
21
20
|
const {ASTNode} = goog.require('Blockly.ASTNode');
|
|
22
21
|
const {BasicCursor} = goog.require('Blockly.BasicCursor');
|
|
23
22
|
/* eslint-disable-next-line no-unused-vars */
|
|
@@ -26,32 +25,28 @@ const {Field} = goog.requireType('Blockly.Field');
|
|
|
26
25
|
|
|
27
26
|
/**
|
|
28
27
|
* A cursor for navigating between tab navigable fields.
|
|
29
|
-
* @constructor
|
|
30
28
|
* @extends {BasicCursor}
|
|
31
29
|
* @alias Blockly.TabNavigateCursor
|
|
32
30
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (type === ASTNode.types.FIELD && location && location.isTabNavigable() &&
|
|
50
|
-
location.isClickable()) {
|
|
51
|
-
isValid = true;
|
|
31
|
+
class TabNavigateCursor extends BasicCursor {
|
|
32
|
+
/**
|
|
33
|
+
* Skip all nodes except for tab navigable fields.
|
|
34
|
+
* @param {?ASTNode} node The AST node to check whether it is valid.
|
|
35
|
+
* @return {boolean} True if the node should be visited, false otherwise.
|
|
36
|
+
* @override
|
|
37
|
+
*/
|
|
38
|
+
validNode_(node) {
|
|
39
|
+
let isValid = false;
|
|
40
|
+
const type = node && node.getType();
|
|
41
|
+
if (node) {
|
|
42
|
+
const location = /** @type {Field} */ (node.getLocation());
|
|
43
|
+
if (type === ASTNode.types.FIELD && location &&
|
|
44
|
+
location.isTabNavigable() && location.isClickable()) {
|
|
45
|
+
isValid = true;
|
|
46
|
+
}
|
|
52
47
|
}
|
|
48
|
+
return isValid;
|
|
53
49
|
}
|
|
54
|
-
|
|
55
|
-
};
|
|
50
|
+
}
|
|
56
51
|
|
|
57
52
|
exports.TabNavigateCursor = TabNavigateCursor;
|
package/core/marker_manager.js
CHANGED
|
@@ -25,177 +25,189 @@ const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
|
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* Class to manage the multiple markers and the cursor on a workspace.
|
|
28
|
-
* @param {!WorkspaceSvg} workspace The workspace for the marker manager.
|
|
29
|
-
* @constructor
|
|
30
28
|
* @alias Blockly.MarkerManager
|
|
31
|
-
* @package
|
|
32
29
|
*/
|
|
33
|
-
|
|
30
|
+
class MarkerManager {
|
|
34
31
|
/**
|
|
35
|
-
* The
|
|
36
|
-
* @
|
|
37
|
-
* @private
|
|
32
|
+
* @param {!WorkspaceSvg} workspace The workspace for the marker manager.
|
|
33
|
+
* @package
|
|
38
34
|
*/
|
|
39
|
-
|
|
35
|
+
constructor(workspace) {
|
|
36
|
+
/**
|
|
37
|
+
* The cursor.
|
|
38
|
+
* @type {?Cursor}
|
|
39
|
+
* @private
|
|
40
|
+
*/
|
|
41
|
+
this.cursor_ = null;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The cursor's SVG element.
|
|
45
|
+
* @type {?SVGElement}
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
this.cursorSvg_ = null;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The map of markers for the workspace.
|
|
52
|
+
* @type {!Object<string, !Marker>}
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
this.markers_ = Object.create(null);
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The workspace this marker manager is associated with.
|
|
59
|
+
* @type {!WorkspaceSvg}
|
|
60
|
+
* @private
|
|
61
|
+
*/
|
|
62
|
+
this.workspace_ = workspace;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The marker's SVG element.
|
|
66
|
+
* @type {?SVGElement}
|
|
67
|
+
* @private
|
|
68
|
+
*/
|
|
69
|
+
this.markerSvg_ = null;
|
|
70
|
+
}
|
|
40
71
|
|
|
41
72
|
/**
|
|
42
|
-
*
|
|
43
|
-
* @
|
|
44
|
-
* @
|
|
73
|
+
* Register the marker by adding it to the map of markers.
|
|
74
|
+
* @param {string} id A unique identifier for the marker.
|
|
75
|
+
* @param {!Marker} marker The marker to register.
|
|
45
76
|
*/
|
|
46
|
-
|
|
77
|
+
registerMarker(id, marker) {
|
|
78
|
+
if (this.markers_[id]) {
|
|
79
|
+
this.unregisterMarker(id);
|
|
80
|
+
}
|
|
81
|
+
marker.setDrawer(this.workspace_.getRenderer().makeMarkerDrawer(
|
|
82
|
+
this.workspace_, marker));
|
|
83
|
+
this.setMarkerSvg(marker.getDrawer().createDom());
|
|
84
|
+
this.markers_[id] = marker;
|
|
85
|
+
}
|
|
47
86
|
|
|
48
87
|
/**
|
|
49
|
-
*
|
|
50
|
-
* @
|
|
51
|
-
* @private
|
|
88
|
+
* Unregister the marker by removing it from the map of markers.
|
|
89
|
+
* @param {string} id The ID of the marker to unregister.
|
|
52
90
|
*/
|
|
53
|
-
|
|
91
|
+
unregisterMarker(id) {
|
|
92
|
+
const marker = this.markers_[id];
|
|
93
|
+
if (marker) {
|
|
94
|
+
marker.dispose();
|
|
95
|
+
delete this.markers_[id];
|
|
96
|
+
} else {
|
|
97
|
+
throw Error(
|
|
98
|
+
'Marker with ID ' + id + ' does not exist. ' +
|
|
99
|
+
'Can only unregister markers that exist.');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
54
102
|
|
|
55
103
|
/**
|
|
56
|
-
*
|
|
57
|
-
* @
|
|
58
|
-
* @private
|
|
104
|
+
* Get the cursor for the workspace.
|
|
105
|
+
* @return {?Cursor} The cursor for this workspace.
|
|
59
106
|
*/
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* The name of the local marker.
|
|
65
|
-
* @type {string}
|
|
66
|
-
* @const
|
|
67
|
-
*/
|
|
68
|
-
MarkerManager.LOCAL_MARKER = 'local_marker_1';
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Register the marker by adding it to the map of markers.
|
|
72
|
-
* @param {string} id A unique identifier for the marker.
|
|
73
|
-
* @param {!Marker} marker The marker to register.
|
|
74
|
-
*/
|
|
75
|
-
MarkerManager.prototype.registerMarker = function(id, marker) {
|
|
76
|
-
if (this.markers_[id]) {
|
|
77
|
-
this.unregisterMarker(id);
|
|
107
|
+
getCursor() {
|
|
108
|
+
return this.cursor_;
|
|
78
109
|
}
|
|
79
|
-
marker.setDrawer(
|
|
80
|
-
this.workspace_.getRenderer().makeMarkerDrawer(this.workspace_, marker));
|
|
81
|
-
this.setMarkerSvg(marker.getDrawer().createDom());
|
|
82
|
-
this.markers_[id] = marker;
|
|
83
|
-
};
|
|
84
110
|
|
|
85
|
-
/**
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
delete this.markers_[id];
|
|
94
|
-
} else {
|
|
95
|
-
throw Error(
|
|
96
|
-
'Marker with ID ' + id + ' does not exist. ' +
|
|
97
|
-
'Can only unregister markers that exist.');
|
|
111
|
+
/**
|
|
112
|
+
* Get a single marker that corresponds to the given ID.
|
|
113
|
+
* @param {string} id A unique identifier for the marker.
|
|
114
|
+
* @return {?Marker} The marker that corresponds to the given ID,
|
|
115
|
+
* or null if none exists.
|
|
116
|
+
*/
|
|
117
|
+
getMarker(id) {
|
|
118
|
+
return this.markers_[id] || null;
|
|
98
119
|
}
|
|
99
|
-
};
|
|
100
120
|
|
|
101
|
-
/**
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Sets the cursor and initializes the drawer for use with keyboard navigation.
|
|
121
|
-
* @param {Cursor} cursor The cursor used to move around this workspace.
|
|
122
|
-
*/
|
|
123
|
-
MarkerManager.prototype.setCursor = function(cursor) {
|
|
124
|
-
if (this.cursor_ && this.cursor_.getDrawer()) {
|
|
125
|
-
this.cursor_.getDrawer().dispose();
|
|
126
|
-
}
|
|
127
|
-
this.cursor_ = cursor;
|
|
128
|
-
if (this.cursor_) {
|
|
129
|
-
const drawer = this.workspace_.getRenderer().makeMarkerDrawer(
|
|
130
|
-
this.workspace_, this.cursor_);
|
|
131
|
-
this.cursor_.setDrawer(drawer);
|
|
132
|
-
this.setCursorSvg(this.cursor_.getDrawer().createDom());
|
|
121
|
+
/**
|
|
122
|
+
* Sets the cursor and initializes the drawer for use with keyboard
|
|
123
|
+
* navigation.
|
|
124
|
+
* @param {Cursor} cursor The cursor used to move around this workspace.
|
|
125
|
+
*/
|
|
126
|
+
setCursor(cursor) {
|
|
127
|
+
if (this.cursor_ && this.cursor_.getDrawer()) {
|
|
128
|
+
this.cursor_.getDrawer().dispose();
|
|
129
|
+
}
|
|
130
|
+
this.cursor_ = cursor;
|
|
131
|
+
if (this.cursor_) {
|
|
132
|
+
const drawer = this.workspace_.getRenderer().makeMarkerDrawer(
|
|
133
|
+
this.workspace_, this.cursor_);
|
|
134
|
+
this.cursor_.setDrawer(drawer);
|
|
135
|
+
this.setCursorSvg(this.cursor_.getDrawer().createDom());
|
|
136
|
+
}
|
|
133
137
|
}
|
|
134
|
-
};
|
|
135
138
|
|
|
136
|
-
/**
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
139
|
+
/**
|
|
140
|
+
* Add the cursor SVG to this workspace SVG group.
|
|
141
|
+
* @param {?SVGElement} cursorSvg The SVG root of the cursor to be added to
|
|
142
|
+
* the workspace SVG group.
|
|
143
|
+
* @package
|
|
144
|
+
*/
|
|
145
|
+
setCursorSvg(cursorSvg) {
|
|
146
|
+
if (!cursorSvg) {
|
|
147
|
+
this.cursorSvg_ = null;
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
this.workspace_.getBlockCanvas().appendChild(cursorSvg);
|
|
152
|
+
this.cursorSvg_ = cursorSvg;
|
|
146
153
|
}
|
|
147
154
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
155
|
+
/**
|
|
156
|
+
* Add the marker SVG to this workspaces SVG group.
|
|
157
|
+
* @param {?SVGElement} markerSvg The SVG root of the marker to be added to
|
|
158
|
+
* the workspace SVG group.
|
|
159
|
+
* @package
|
|
160
|
+
*/
|
|
161
|
+
setMarkerSvg(markerSvg) {
|
|
162
|
+
if (!markerSvg) {
|
|
163
|
+
this.markerSvg_ = null;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
151
166
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
this.markerSvg_ = null;
|
|
161
|
-
return;
|
|
167
|
+
if (this.workspace_.getBlockCanvas()) {
|
|
168
|
+
if (this.cursorSvg_) {
|
|
169
|
+
this.workspace_.getBlockCanvas().insertBefore(
|
|
170
|
+
markerSvg, this.cursorSvg_);
|
|
171
|
+
} else {
|
|
172
|
+
this.workspace_.getBlockCanvas().appendChild(markerSvg);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
162
175
|
}
|
|
163
176
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
177
|
+
/**
|
|
178
|
+
* Redraw the attached cursor SVG if needed.
|
|
179
|
+
* @package
|
|
180
|
+
*/
|
|
181
|
+
updateMarkers() {
|
|
182
|
+
if (this.workspace_.keyboardAccessibilityMode && this.cursorSvg_) {
|
|
183
|
+
this.workspace_.getCursor().draw();
|
|
169
184
|
}
|
|
170
185
|
}
|
|
171
|
-
};
|
|
172
186
|
|
|
173
|
-
/**
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
187
|
+
/**
|
|
188
|
+
* Dispose of the marker manager.
|
|
189
|
+
* Go through and delete all markers associated with this marker manager.
|
|
190
|
+
* @suppress {checkTypes}
|
|
191
|
+
* @package
|
|
192
|
+
*/
|
|
193
|
+
dispose() {
|
|
194
|
+
const markerIds = Object.keys(this.markers_);
|
|
195
|
+
for (let i = 0, markerId; (markerId = markerIds[i]); i++) {
|
|
196
|
+
this.unregisterMarker(markerId);
|
|
197
|
+
}
|
|
198
|
+
this.markers_ = null;
|
|
199
|
+
if (this.cursor_) {
|
|
200
|
+
this.cursor_.dispose();
|
|
201
|
+
this.cursor_ = null;
|
|
202
|
+
}
|
|
180
203
|
}
|
|
181
|
-
}
|
|
204
|
+
}
|
|
182
205
|
|
|
183
206
|
/**
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
* @
|
|
187
|
-
* @package
|
|
207
|
+
* The name of the local marker.
|
|
208
|
+
* @type {string}
|
|
209
|
+
* @const
|
|
188
210
|
*/
|
|
189
|
-
MarkerManager.
|
|
190
|
-
const markerIds = Object.keys(this.markers_);
|
|
191
|
-
for (let i = 0, markerId; (markerId = markerIds[i]); i++) {
|
|
192
|
-
this.unregisterMarker(markerId);
|
|
193
|
-
}
|
|
194
|
-
this.markers_ = null;
|
|
195
|
-
if (this.cursor_) {
|
|
196
|
-
this.cursor_.dispose();
|
|
197
|
-
this.cursor_ = null;
|
|
198
|
-
}
|
|
199
|
-
};
|
|
211
|
+
MarkerManager.LOCAL_MARKER = 'local_marker_1';
|
|
200
212
|
|
|
201
213
|
exports.MarkerManager = MarkerManager;
|