blockly 7.20211209.4 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blockly.d.ts +18963 -18432
- package/blockly.min.js +852 -844
- package/blockly_compressed.js +669 -664
- package/blockly_compressed.js.map +1 -1
- package/blocks/blocks.js +47 -0
- package/blocks/colour.js +13 -3
- package/blocks/lists.js +22 -13
- package/blocks/logic.js +13 -3
- package/blocks/loops.js +24 -11
- package/blocks/math.js +12 -3
- package/blocks/procedures.js +41 -27
- package/blocks/text.js +22 -13
- package/blocks/variables.js +14 -3
- package/blocks/variables_dynamic.js +13 -3
- package/blocks_compressed.js +146 -141
- package/blocks_compressed.js.map +1 -1
- package/core/block.js +1869 -1814
- package/core/block_drag_surface.js +201 -200
- package/core/block_dragger.js +377 -373
- package/core/block_svg.js +1593 -1479
- package/core/blockly.js +8 -22
- package/core/blocks.js +9 -2
- package/core/browser_events.js +22 -5
- package/core/bubble.js +841 -797
- package/core/bubble_dragger.js +213 -206
- package/core/bump_objects.js +2 -2
- package/core/clipboard.js +9 -9
- package/core/comment.js +353 -332
- package/core/common.js +46 -17
- package/core/component_manager.js +181 -174
- package/core/config.js +87 -0
- package/core/connection.js +595 -584
- package/core/connection_checker.js +242 -244
- package/core/connection_db.js +235 -230
- package/core/contextmenu.js +9 -6
- package/core/contextmenu_items.js +1 -2
- package/core/contextmenu_registry.js +93 -89
- package/core/css.js +474 -474
- package/core/delete_area.js +45 -42
- package/core/drag_target.js +57 -56
- package/core/dropdowndiv.js +153 -163
- package/core/events/events.js +2 -2
- package/core/events/events_abstract.js +89 -77
- package/core/events/events_block_base.js +37 -36
- package/core/events/events_block_change.js +130 -124
- package/core/events/events_block_create.js +73 -71
- package/core/events/events_block_delete.js +84 -82
- package/core/events/events_block_drag.js +50 -49
- package/core/events/events_block_move.js +147 -140
- package/core/events/events_bubble_open.js +51 -50
- package/core/events/events_click.js +48 -44
- package/core/events/events_comment_base.js +72 -69
- package/core/events/events_comment_change.js +63 -61
- package/core/events/events_comment_create.js +44 -42
- package/core/events/events_comment_delete.js +42 -40
- package/core/events/events_comment_move.js +106 -104
- package/core/events/events_marker_move.js +65 -64
- package/core/events/events_selected.js +46 -45
- package/core/events/events_theme_change.js +36 -35
- package/core/events/events_toolbox_item_select.js +46 -45
- package/core/events/events_trashcan_open.js +37 -36
- package/core/events/events_ui.js +47 -46
- package/core/events/events_ui_base.js +30 -29
- package/core/events/events_var_base.js +37 -36
- package/core/events/events_var_create.js +50 -48
- package/core/events/events_var_delete.js +50 -48
- package/core/events/events_var_rename.js +51 -49
- package/core/events/events_viewport.js +66 -65
- package/core/events/utils.js +29 -14
- package/core/events/workspace_events.js +49 -55
- package/core/extensions.js +4 -3
- package/core/field.js +1061 -997
- package/core/field_angle.js +462 -442
- package/core/field_checkbox.js +194 -182
- package/core/field_colour.js +519 -505
- package/core/field_dropdown.js +617 -598
- package/core/field_image.js +229 -220
- package/core/field_label.js +102 -91
- package/core/field_label_serializable.js +42 -41
- package/core/field_multilineinput.js +372 -358
- package/core/field_number.js +272 -253
- package/core/field_textinput.js +499 -467
- package/core/field_variable.js +458 -420
- package/core/flyout_base.js +1005 -952
- package/core/flyout_button.js +277 -260
- package/core/flyout_horizontal.js +304 -302
- package/core/flyout_metrics_manager.js +64 -64
- package/core/flyout_vertical.js +306 -300
- package/core/generator.js +459 -446
- package/core/gesture.js +829 -813
- package/core/grid.js +166 -163
- package/core/icon.js +168 -159
- package/core/inject.js +7 -5
- package/core/input.js +257 -248
- package/core/insertion_marker_manager.js +655 -624
- package/core/internal_constants.js +0 -129
- package/core/keyboard_nav/ast_node.js +605 -596
- package/core/keyboard_nav/basic_cursor.js +166 -165
- package/core/keyboard_nav/cursor.js +99 -97
- package/core/keyboard_nav/marker.js +83 -79
- package/core/keyboard_nav/tab_navigate_cursor.js +18 -23
- package/core/marker_manager.js +153 -141
- package/core/menu.js +377 -372
- package/core/menuitem.js +223 -217
- package/core/metrics_manager.js +403 -390
- package/core/mutator.js +468 -437
- package/core/names.js +229 -188
- package/core/options.js +290 -284
- package/core/procedures.js +29 -17
- package/core/registry.js +19 -16
- package/core/rendered_connection.js +482 -463
- package/core/renderers/common/block_rendering.js +9 -3
- package/core/renderers/common/constants.js +1119 -1112
- package/core/renderers/common/debug.js +14 -0
- package/core/renderers/common/debugger.js +338 -316
- package/core/renderers/common/drawer.js +380 -370
- package/core/renderers/common/i_path_object.js +2 -2
- package/core/renderers/common/info.js +626 -618
- package/core/renderers/common/marker_svg.js +579 -541
- package/core/renderers/common/path_object.js +203 -200
- package/core/renderers/common/renderer.js +220 -218
- package/core/renderers/geras/constants.js +36 -36
- package/core/renderers/geras/drawer.js +155 -147
- package/core/renderers/geras/highlight_constants.js +244 -238
- package/core/renderers/geras/highlighter.js +231 -179
- package/core/renderers/geras/info.js +392 -369
- package/core/renderers/geras/measurables/inline_input.js +25 -19
- package/core/renderers/geras/measurables/statement_input.js +23 -17
- package/core/renderers/geras/path_object.js +106 -121
- package/core/renderers/geras/renderer.js +96 -98
- package/core/renderers/measurables/base.js +30 -18
- package/core/renderers/measurables/bottom_row.js +83 -80
- package/core/renderers/measurables/connection.js +22 -15
- package/core/renderers/measurables/external_value_input.js +35 -22
- package/core/renderers/measurables/field.js +35 -20
- package/core/renderers/measurables/hat.js +18 -13
- package/core/renderers/measurables/icon.js +24 -17
- package/core/renderers/measurables/in_row_spacer.js +15 -13
- package/core/renderers/measurables/inline_input.js +43 -33
- package/core/renderers/measurables/input_connection.js +41 -28
- package/core/renderers/measurables/input_row.js +50 -44
- package/core/renderers/measurables/jagged_edge.js +14 -12
- package/core/renderers/measurables/next_connection.js +16 -14
- package/core/renderers/measurables/output_connection.js +26 -20
- package/core/renderers/measurables/previous_connection.js +16 -15
- package/core/renderers/measurables/round_corner.js +20 -18
- package/core/renderers/measurables/row.js +184 -168
- package/core/renderers/measurables/spacer_row.js +38 -23
- package/core/renderers/measurables/square_corner.js +18 -16
- package/core/renderers/measurables/statement_input.js +23 -20
- package/core/renderers/measurables/top_row.js +88 -85
- package/core/renderers/minimalist/constants.js +8 -7
- package/core/renderers/minimalist/drawer.js +11 -10
- package/core/renderers/minimalist/info.js +18 -18
- package/core/renderers/minimalist/renderer.js +40 -39
- package/core/renderers/thrasos/info.js +258 -248
- package/core/renderers/thrasos/renderer.js +20 -20
- package/core/renderers/zelos/constants.js +898 -873
- package/core/renderers/zelos/drawer.js +186 -169
- package/core/renderers/zelos/info.js +502 -479
- package/core/renderers/zelos/marker_svg.js +129 -115
- package/core/renderers/zelos/measurables/bottom_row.js +31 -30
- package/core/renderers/zelos/measurables/inputs.js +22 -21
- package/core/renderers/zelos/measurables/row_elements.js +14 -13
- package/core/renderers/zelos/measurables/top_row.js +34 -33
- package/core/renderers/zelos/path_object.js +181 -180
- package/core/renderers/zelos/renderer.js +91 -92
- package/core/scrollbar.js +759 -713
- package/core/scrollbar_pair.js +250 -245
- package/core/serialization/blocks.js +19 -9
- package/core/serialization/workspaces.js +3 -2
- package/core/shortcut_registry.js +286 -277
- package/core/sprites.js +31 -0
- package/core/theme.js +135 -141
- package/core/theme_manager.js +147 -143
- package/core/toolbox/category.js +602 -576
- package/core/toolbox/collapsible_category.js +226 -227
- package/core/toolbox/separator.js +70 -61
- package/core/toolbox/toolbox.js +934 -927
- package/core/toolbox/toolbox_item.js +115 -99
- package/core/tooltip.js +108 -35
- package/core/touch.js +8 -3
- package/core/touch_gesture.js +254 -251
- package/core/trashcan.js +606 -595
- package/core/utils/coordinate.js +97 -95
- package/core/utils/dom.js +2 -2
- package/core/utils/global.js +2 -0
- package/core/utils/rect.js +41 -37
- package/core/utils/sentinel.js +25 -0
- package/core/utils/size.js +30 -27
- package/core/utils/svg.js +18 -16
- package/core/variable_map.js +325 -341
- package/core/variable_model.js +55 -54
- package/core/variables.js +9 -2
- package/core/variables_dynamic.js +3 -1
- package/core/warning.js +126 -120
- package/core/widgetdiv.js +4 -4
- package/core/workspace.js +685 -664
- package/core/workspace_audio.js +124 -118
- package/core/workspace_comment.js +308 -298
- package/core/workspace_comment_svg.js +1029 -951
- package/core/workspace_drag_surface_svg.js +147 -140
- package/core/workspace_dragger.js +70 -71
- package/core/workspace_svg.js +2322 -2297
- package/core/xml.js +30 -20
- package/core/zoom_controls.js +431 -439
- package/dart_compressed.js +40 -43
- package/dart_compressed.js.map +1 -1
- package/generators/dart/colour.js +56 -64
- package/generators/dart/lists.js +61 -50
- package/generators/dart/math.js +160 -148
- package/generators/dart/text.js +83 -61
- package/generators/javascript/colour.js +37 -34
- package/generators/javascript/lists.js +50 -43
- package/generators/javascript/math.js +123 -139
- package/generators/javascript/text.js +67 -81
- package/generators/lua/colour.js +25 -23
- package/generators/lua/lists.js +97 -69
- package/generators/lua/logic.js +1 -2
- package/generators/lua/math.js +182 -144
- package/generators/lua/text.js +116 -99
- package/generators/php/colour.js +38 -32
- package/generators/php/lists.js +109 -89
- package/generators/php/math.js +90 -81
- package/generators/php/text.js +63 -61
- package/generators/python/colour.js +18 -18
- package/generators/python/lists.js +38 -30
- package/generators/python/loops.js +12 -8
- package/generators/python/math.js +104 -106
- package/generators/python/text.js +34 -30
- package/javascript_compressed.js +37 -39
- package/javascript_compressed.js.map +1 -1
- package/lua_compressed.js +39 -42
- package/lua_compressed.js.map +1 -1
- package/msg/az.js +2 -2
- package/msg/be.js +4 -4
- package/msg/cs.js +15 -15
- package/msg/de.js +1 -1
- package/msg/diq.js +1 -1
- package/msg/eo.js +1 -1
- package/msg/es.js +1 -1
- package/msg/fa.js +1 -1
- package/msg/fr.js +4 -4
- package/msg/he.js +1 -1
- package/msg/hr.js +2 -2
- package/msg/hy.js +2 -2
- package/msg/id.js +12 -12
- package/msg/inh.js +14 -14
- package/msg/ja.js +7 -7
- package/msg/lv.js +29 -29
- package/msg/pa.js +3 -3
- package/msg/smn.js +436 -0
- package/msg/te.js +1 -1
- package/msg/yue.js +1 -1
- package/msg/zh-hans.js +3 -3
- package/msg/zh-hant.js +3 -3
- package/package.json +7 -6
- package/php_compressed.js +38 -42
- package/php_compressed.js.map +1 -1
- package/python_compressed.js +26 -25
- package/python_compressed.js.map +1 -1
- package/blocks/all.js +0 -23
package/core/touch_gesture.js
CHANGED
|
@@ -19,7 +19,6 @@ goog.module('Blockly.TouchGesture');
|
|
|
19
19
|
|
|
20
20
|
const Touch = goog.require('Blockly.Touch');
|
|
21
21
|
const browserEvents = goog.require('Blockly.browserEvents');
|
|
22
|
-
const object = goog.require('Blockly.utils.object');
|
|
23
22
|
const {Coordinate} = goog.require('Blockly.utils.Coordinate');
|
|
24
23
|
const {Gesture} = goog.require('Blockly.Gesture');
|
|
25
24
|
/* eslint-disable-next-line no-unused-vars */
|
|
@@ -31,300 +30,304 @@ const {WorkspaceSvg} = goog.requireType('Blockly.WorkspaceSvg');
|
|
|
31
30
|
* events. "End" refers to touchend, mouseup, and pointerend events.
|
|
32
31
|
*/
|
|
33
32
|
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* A multiplier used to convert the gesture scale to a zoom in delta.
|
|
36
|
+
* @const
|
|
37
|
+
*/
|
|
38
|
+
const ZOOM_IN_MULTIPLIER = 5;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* A multiplier used to convert the gesture scale to a zoom out delta.
|
|
42
|
+
* @const
|
|
43
|
+
*/
|
|
44
|
+
const ZOOM_OUT_MULTIPLIER = 6;
|
|
45
|
+
|
|
34
46
|
/**
|
|
35
47
|
* Class for one gesture.
|
|
36
|
-
* @param {!Event} e The event that kicked off this gesture.
|
|
37
|
-
* @param {!WorkspaceSvg} creatorWorkspace The workspace that created
|
|
38
|
-
* this gesture and has a reference to it.
|
|
39
48
|
* @extends {Gesture}
|
|
40
|
-
* @constructor
|
|
41
49
|
* @alias Blockly.TouchGesture
|
|
42
50
|
*/
|
|
43
|
-
|
|
44
|
-
TouchGesture.superClass_.constructor.call(this, e, creatorWorkspace);
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Boolean for whether or not this gesture is a multi-touch gesture.
|
|
48
|
-
* @type {boolean}
|
|
49
|
-
* @private
|
|
50
|
-
*/
|
|
51
|
-
this.isMultiTouch_ = false;
|
|
52
|
-
|
|
51
|
+
class TouchGesture extends Gesture {
|
|
53
52
|
/**
|
|
54
|
-
*
|
|
55
|
-
* @
|
|
56
|
-
*
|
|
53
|
+
* @param {!Event} e The event that kicked off this gesture.
|
|
54
|
+
* @param {!WorkspaceSvg} creatorWorkspace The workspace that created
|
|
55
|
+
* this gesture and has a reference to it.
|
|
57
56
|
*/
|
|
58
|
-
|
|
57
|
+
constructor(e, creatorWorkspace) {
|
|
58
|
+
super(e, creatorWorkspace);
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Boolean for whether or not this gesture is a multi-touch gesture.
|
|
62
|
+
* @type {boolean}
|
|
63
|
+
* @private
|
|
64
|
+
*/
|
|
65
|
+
this.isMultiTouch_ = false;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* A map of cached points used for tracking multi-touch gestures.
|
|
69
|
+
* @type {!Object<number|string, Coordinate>}
|
|
70
|
+
* @private
|
|
71
|
+
*/
|
|
72
|
+
this.cachedPoints_ = Object.create(null);
|
|
59
73
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
74
|
+
/**
|
|
75
|
+
* This is the ratio between the starting distance between the touch points
|
|
76
|
+
* and the most recent distance between the touch points.
|
|
77
|
+
* Scales between 0 and 1 mean the most recent zoom was a zoom out.
|
|
78
|
+
* Scales above 1.0 mean the most recent zoom was a zoom in.
|
|
79
|
+
* @type {number}
|
|
80
|
+
* @private
|
|
81
|
+
*/
|
|
82
|
+
this.previousScale_ = 0;
|
|
69
83
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
84
|
+
/**
|
|
85
|
+
* The starting distance between two touch points.
|
|
86
|
+
* @type {number}
|
|
87
|
+
* @private
|
|
88
|
+
*/
|
|
89
|
+
this.startDistance_ = 0;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* A handle to use to unbind the second touch start or pointer down listener
|
|
93
|
+
* at the end of a drag.
|
|
94
|
+
* Opaque data returned from Blockly.bindEventWithChecks_.
|
|
95
|
+
* @type {?browserEvents.Data}
|
|
96
|
+
* @private
|
|
97
|
+
*/
|
|
98
|
+
this.onStartWrapper_ = null;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Boolean for whether or not the workspace supports pinch-zoom.
|
|
102
|
+
* @type {?boolean}
|
|
103
|
+
* @private
|
|
104
|
+
*/
|
|
105
|
+
this.isPinchZoomEnabled_ = null;
|
|
106
|
+
}
|
|
76
107
|
|
|
77
108
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* @
|
|
82
|
-
* @private
|
|
109
|
+
* Start a gesture: update the workspace to indicate that a gesture is in
|
|
110
|
+
* progress and bind mousemove and mouseup handlers.
|
|
111
|
+
* @param {!Event} e A mouse down, touch start or pointer down event.
|
|
112
|
+
* @package
|
|
83
113
|
*/
|
|
84
|
-
|
|
114
|
+
doStart(e) {
|
|
115
|
+
this.isPinchZoomEnabled_ = this.startWorkspace_.options.zoomOptions &&
|
|
116
|
+
this.startWorkspace_.options.zoomOptions.pinch;
|
|
117
|
+
super.doStart(e);
|
|
118
|
+
if (!this.isEnding_ && Touch.isTouchEvent(e)) {
|
|
119
|
+
this.handleTouchStart(e);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
85
122
|
|
|
86
123
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
124
|
+
* Bind gesture events.
|
|
125
|
+
* Overriding the gesture definition of this function, binding the same
|
|
126
|
+
* functions for onMoveWrapper_ and onUpWrapper_ but passing
|
|
127
|
+
* opt_noCaptureIdentifier.
|
|
128
|
+
* In addition, binding a second mouse down event to detect multi-touch
|
|
129
|
+
* events.
|
|
130
|
+
* @param {!Event} e A mouse down or touch start event.
|
|
131
|
+
* @package
|
|
90
132
|
*/
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
133
|
+
bindMouseEvents(e) {
|
|
134
|
+
this.onStartWrapper_ = browserEvents.conditionalBind(
|
|
135
|
+
document, 'mousedown', null, this.handleStart.bind(this),
|
|
136
|
+
/* opt_noCaptureIdentifier */ true);
|
|
137
|
+
this.onMoveWrapper_ = browserEvents.conditionalBind(
|
|
138
|
+
document, 'mousemove', null, this.handleMove.bind(this),
|
|
139
|
+
/* opt_noCaptureIdentifier */ true);
|
|
140
|
+
this.onUpWrapper_ = browserEvents.conditionalBind(
|
|
141
|
+
document, 'mouseup', null, this.handleUp.bind(this),
|
|
142
|
+
/* opt_noCaptureIdentifier */ true);
|
|
94
143
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
* @const
|
|
98
|
-
*/
|
|
99
|
-
TouchGesture.ZOOM_IN_MULTIPLIER = 5;
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* A multiplier used to convert the gesture scale to a zoom out delta.
|
|
103
|
-
* @const
|
|
104
|
-
*/
|
|
105
|
-
TouchGesture.ZOOM_OUT_MULTIPLIER = 6;
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Start a gesture: update the workspace to indicate that a gesture is in
|
|
109
|
-
* progress and bind mousemove and mouseup handlers.
|
|
110
|
-
* @param {!Event} e A mouse down, touch start or pointer down event.
|
|
111
|
-
* @package
|
|
112
|
-
*/
|
|
113
|
-
TouchGesture.prototype.doStart = function(e) {
|
|
114
|
-
this.isPinchZoomEnabled_ = this.startWorkspace_.options.zoomOptions &&
|
|
115
|
-
this.startWorkspace_.options.zoomOptions.pinch;
|
|
116
|
-
TouchGesture.superClass_.doStart.call(this, e);
|
|
117
|
-
if (!this.isEnding_ && Touch.isTouchEvent(e)) {
|
|
118
|
-
this.handleTouchStart(e);
|
|
144
|
+
e.preventDefault();
|
|
145
|
+
e.stopPropagation();
|
|
119
146
|
}
|
|
120
|
-
};
|
|
121
147
|
|
|
122
|
-
/**
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
/* opt_noCaptureIdentifier */ true);
|
|
135
|
-
this.onMoveWrapper_ = browserEvents.conditionalBind(
|
|
136
|
-
document, 'mousemove', null, this.handleMove.bind(this),
|
|
137
|
-
/* opt_noCaptureIdentifier */ true);
|
|
138
|
-
this.onUpWrapper_ = browserEvents.conditionalBind(
|
|
139
|
-
document, 'mouseup', null, this.handleUp.bind(this),
|
|
140
|
-
/* opt_noCaptureIdentifier */ true);
|
|
141
|
-
|
|
142
|
-
e.preventDefault();
|
|
143
|
-
e.stopPropagation();
|
|
144
|
-
};
|
|
148
|
+
/**
|
|
149
|
+
* Handle a mouse down, touch start, or pointer down event.
|
|
150
|
+
* @param {!Event} e A mouse down, touch start, or pointer down event.
|
|
151
|
+
* @package
|
|
152
|
+
*/
|
|
153
|
+
handleStart(e) {
|
|
154
|
+
if (this.isDragging()) {
|
|
155
|
+
// A drag has already started, so this can no longer be a pinch-zoom.
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (Touch.isTouchEvent(e)) {
|
|
159
|
+
this.handleTouchStart(e);
|
|
145
160
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
*/
|
|
151
|
-
TouchGesture.prototype.handleStart = function(e) {
|
|
152
|
-
if (this.isDragging()) {
|
|
153
|
-
// A drag has already started, so this can no longer be a pinch-zoom.
|
|
154
|
-
return;
|
|
161
|
+
if (this.isMultiTouch()) {
|
|
162
|
+
Touch.longStop();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
155
165
|
}
|
|
156
|
-
if (Touch.isTouchEvent(e)) {
|
|
157
|
-
this.handleTouchStart(e);
|
|
158
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Handle a mouse move, touch move, or pointer move event.
|
|
169
|
+
* @param {!Event} e A mouse move, touch move, or pointer move event.
|
|
170
|
+
* @package
|
|
171
|
+
*/
|
|
172
|
+
handleMove(e) {
|
|
173
|
+
if (this.isDragging()) {
|
|
174
|
+
// We are in the middle of a drag, only handle the relevant events
|
|
175
|
+
if (Touch.shouldHandleEvent(e)) {
|
|
176
|
+
super.handleMove(e);
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
159
180
|
if (this.isMultiTouch()) {
|
|
181
|
+
if (Touch.isTouchEvent(e)) {
|
|
182
|
+
this.handleTouchMove(e);
|
|
183
|
+
}
|
|
160
184
|
Touch.longStop();
|
|
185
|
+
} else {
|
|
186
|
+
super.handleMove(e);
|
|
161
187
|
}
|
|
162
188
|
}
|
|
163
|
-
};
|
|
164
189
|
|
|
165
|
-
/**
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
if (Touch.shouldHandleEvent(e)) {
|
|
174
|
-
TouchGesture.superClass_.handleMove.call(this, e);
|
|
190
|
+
/**
|
|
191
|
+
* Handle a mouse up, touch end, or pointer up event.
|
|
192
|
+
* @param {!Event} e A mouse up, touch end, or pointer up event.
|
|
193
|
+
* @package
|
|
194
|
+
*/
|
|
195
|
+
handleUp(e) {
|
|
196
|
+
if (Touch.isTouchEvent(e) && !this.isDragging()) {
|
|
197
|
+
this.handleTouchEnd(e);
|
|
175
198
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
199
|
+
if (!this.isMultiTouch() || this.isDragging()) {
|
|
200
|
+
if (!Touch.shouldHandleEvent(e)) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
super.handleUp(e);
|
|
204
|
+
} else {
|
|
205
|
+
e.preventDefault();
|
|
206
|
+
e.stopPropagation();
|
|
207
|
+
|
|
208
|
+
this.dispose();
|
|
181
209
|
}
|
|
182
|
-
Touch.longStop();
|
|
183
|
-
} else {
|
|
184
|
-
TouchGesture.superClass_.handleMove.call(this, e);
|
|
185
210
|
}
|
|
186
|
-
};
|
|
187
211
|
|
|
188
|
-
/**
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
this.handleTouchEnd(e);
|
|
212
|
+
/**
|
|
213
|
+
* Whether this gesture is part of a multi-touch gesture.
|
|
214
|
+
* @return {boolean} Whether this gesture is part of a multi-touch gesture.
|
|
215
|
+
* @package
|
|
216
|
+
*/
|
|
217
|
+
isMultiTouch() {
|
|
218
|
+
return this.isMultiTouch_;
|
|
196
219
|
}
|
|
197
|
-
if (!this.isMultiTouch() || this.isDragging()) {
|
|
198
|
-
if (!Touch.shouldHandleEvent(e)) {
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
TouchGesture.superClass_.handleUp.call(this, e);
|
|
202
|
-
} else {
|
|
203
|
-
e.preventDefault();
|
|
204
|
-
e.stopPropagation();
|
|
205
220
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
221
|
+
/**
|
|
222
|
+
* Sever all links from this object.
|
|
223
|
+
* @package
|
|
224
|
+
*/
|
|
225
|
+
dispose() {
|
|
226
|
+
super.dispose();
|
|
209
227
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
*/
|
|
215
|
-
TouchGesture.prototype.isMultiTouch = function() {
|
|
216
|
-
return this.isMultiTouch_;
|
|
217
|
-
};
|
|
228
|
+
if (this.onStartWrapper_) {
|
|
229
|
+
browserEvents.unbind(this.onStartWrapper_);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
218
232
|
|
|
219
|
-
/**
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
233
|
+
/**
|
|
234
|
+
* Handle a touch start or pointer down event and keep track of current
|
|
235
|
+
* pointers.
|
|
236
|
+
* @param {!Event} e A touch start, or pointer down event.
|
|
237
|
+
* @package
|
|
238
|
+
*/
|
|
239
|
+
handleTouchStart(e) {
|
|
240
|
+
const pointerId = Touch.getTouchIdentifierFromEvent(e);
|
|
241
|
+
// store the pointerId in the current list of pointers
|
|
242
|
+
this.cachedPoints_[pointerId] = this.getTouchPoint(e);
|
|
243
|
+
const pointers = Object.keys(this.cachedPoints_);
|
|
244
|
+
// If two pointers are down, store info
|
|
245
|
+
if (pointers.length === 2) {
|
|
246
|
+
const point0 =
|
|
247
|
+
/** @type {!Coordinate} */ (this.cachedPoints_[pointers[0]]);
|
|
248
|
+
const point1 =
|
|
249
|
+
/** @type {!Coordinate} */ (this.cachedPoints_[pointers[1]]);
|
|
250
|
+
this.startDistance_ = Coordinate.distance(point0, point1);
|
|
251
|
+
this.isMultiTouch_ = true;
|
|
252
|
+
e.preventDefault();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
225
255
|
|
|
226
|
-
|
|
227
|
-
|
|
256
|
+
/**
|
|
257
|
+
* Handle a touch move or pointer move event and zoom in/out if two pointers
|
|
258
|
+
* are on the screen.
|
|
259
|
+
* @param {!Event} e A touch move, or pointer move event.
|
|
260
|
+
* @package
|
|
261
|
+
*/
|
|
262
|
+
handleTouchMove(e) {
|
|
263
|
+
const pointerId = Touch.getTouchIdentifierFromEvent(e);
|
|
264
|
+
// Update the cache
|
|
265
|
+
this.cachedPoints_[pointerId] = this.getTouchPoint(e);
|
|
266
|
+
|
|
267
|
+
const pointers = Object.keys(this.cachedPoints_);
|
|
268
|
+
if (this.isPinchZoomEnabled_ && pointers.length === 2) {
|
|
269
|
+
this.handlePinch_(e);
|
|
270
|
+
} else {
|
|
271
|
+
super.handleMove(e);
|
|
272
|
+
}
|
|
228
273
|
}
|
|
229
|
-
};
|
|
230
274
|
|
|
231
|
-
/**
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
// store the pointerId in the current list of pointers
|
|
240
|
-
this.cachedPoints_[pointerId] = this.getTouchPoint(e);
|
|
241
|
-
const pointers = Object.keys(this.cachedPoints_);
|
|
242
|
-
// If two pointers are down, store info
|
|
243
|
-
if (pointers.length === 2) {
|
|
275
|
+
/**
|
|
276
|
+
* Handle pinch zoom gesture.
|
|
277
|
+
* @param {!Event} e A touch move, or pointer move event.
|
|
278
|
+
* @private
|
|
279
|
+
*/
|
|
280
|
+
handlePinch_(e) {
|
|
281
|
+
const pointers = Object.keys(this.cachedPoints_);
|
|
282
|
+
// Calculate the distance between the two pointers
|
|
244
283
|
const point0 = /** @type {!Coordinate} */ (this.cachedPoints_[pointers[0]]);
|
|
245
284
|
const point1 = /** @type {!Coordinate} */ (this.cachedPoints_[pointers[1]]);
|
|
246
|
-
|
|
247
|
-
|
|
285
|
+
const moveDistance = Coordinate.distance(point0, point1);
|
|
286
|
+
const scale = moveDistance / this.startDistance_;
|
|
287
|
+
|
|
288
|
+
if (this.previousScale_ > 0 && this.previousScale_ < Infinity) {
|
|
289
|
+
const gestureScale = scale - this.previousScale_;
|
|
290
|
+
const delta = gestureScale > 0 ? gestureScale * ZOOM_IN_MULTIPLIER :
|
|
291
|
+
gestureScale * ZOOM_OUT_MULTIPLIER;
|
|
292
|
+
const workspace = this.startWorkspace_;
|
|
293
|
+
const position = browserEvents.mouseToSvg(
|
|
294
|
+
e, workspace.getParentSvg(), workspace.getInverseScreenCTM());
|
|
295
|
+
workspace.zoom(position.x, position.y, delta);
|
|
296
|
+
}
|
|
297
|
+
this.previousScale_ = scale;
|
|
248
298
|
e.preventDefault();
|
|
249
299
|
}
|
|
250
|
-
};
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* Handle a touch move or pointer move event and zoom in/out if two pointers
|
|
254
|
-
* are on the screen.
|
|
255
|
-
* @param {!Event} e A touch move, or pointer move event.
|
|
256
|
-
* @package
|
|
257
|
-
*/
|
|
258
|
-
TouchGesture.prototype.handleTouchMove = function(e) {
|
|
259
|
-
const pointerId = Touch.getTouchIdentifierFromEvent(e);
|
|
260
|
-
// Update the cache
|
|
261
|
-
this.cachedPoints_[pointerId] = this.getTouchPoint(e);
|
|
262
|
-
|
|
263
|
-
const pointers = Object.keys(this.cachedPoints_);
|
|
264
|
-
if (this.isPinchZoomEnabled_ && pointers.length === 2) {
|
|
265
|
-
this.handlePinch_(e);
|
|
266
|
-
} else {
|
|
267
|
-
TouchGesture.superClass_.handleMove.call(this, e);
|
|
268
|
-
}
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* Handle pinch zoom gesture.
|
|
273
|
-
* @param {!Event} e A touch move, or pointer move event.
|
|
274
|
-
* @private
|
|
275
|
-
*/
|
|
276
|
-
TouchGesture.prototype.handlePinch_ = function(e) {
|
|
277
|
-
const pointers = Object.keys(this.cachedPoints_);
|
|
278
|
-
// Calculate the distance between the two pointers
|
|
279
|
-
const point0 = /** @type {!Coordinate} */ (this.cachedPoints_[pointers[0]]);
|
|
280
|
-
const point1 = /** @type {!Coordinate} */ (this.cachedPoints_[pointers[1]]);
|
|
281
|
-
const moveDistance = Coordinate.distance(point0, point1);
|
|
282
|
-
const scale = moveDistance / this.startDistance_;
|
|
283
|
-
|
|
284
|
-
if (this.previousScale_ > 0 && this.previousScale_ < Infinity) {
|
|
285
|
-
const gestureScale = scale - this.previousScale_;
|
|
286
|
-
const delta = gestureScale > 0 ?
|
|
287
|
-
gestureScale * TouchGesture.ZOOM_IN_MULTIPLIER :
|
|
288
|
-
gestureScale * TouchGesture.ZOOM_OUT_MULTIPLIER;
|
|
289
|
-
const workspace = this.startWorkspace_;
|
|
290
|
-
const position = browserEvents.mouseToSvg(
|
|
291
|
-
e, workspace.getParentSvg(), workspace.getInverseScreenCTM());
|
|
292
|
-
workspace.zoom(position.x, position.y, delta);
|
|
293
|
-
}
|
|
294
|
-
this.previousScale_ = scale;
|
|
295
|
-
e.preventDefault();
|
|
296
|
-
};
|
|
297
|
-
|
|
298
300
|
|
|
299
|
-
/**
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
301
|
+
/**
|
|
302
|
+
* Handle a touch end or pointer end event and end the gesture.
|
|
303
|
+
* @param {!Event} e A touch end, or pointer end event.
|
|
304
|
+
* @package
|
|
305
|
+
*/
|
|
306
|
+
handleTouchEnd(e) {
|
|
307
|
+
const pointerId = Touch.getTouchIdentifierFromEvent(e);
|
|
308
|
+
if (this.cachedPoints_[pointerId]) {
|
|
309
|
+
delete this.cachedPoints_[pointerId];
|
|
310
|
+
}
|
|
311
|
+
if (Object.keys(this.cachedPoints_).length < 2) {
|
|
312
|
+
this.cachedPoints_ = Object.create(null);
|
|
313
|
+
this.previousScale_ = 0;
|
|
314
|
+
}
|
|
312
315
|
}
|
|
313
|
-
};
|
|
314
316
|
|
|
315
|
-
/**
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
317
|
+
/**
|
|
318
|
+
* Helper function returning the current touch point coordinate.
|
|
319
|
+
* @param {!Event} e A touch or pointer event.
|
|
320
|
+
* @return {?Coordinate} The current touch point coordinate
|
|
321
|
+
* @package
|
|
322
|
+
*/
|
|
323
|
+
getTouchPoint(e) {
|
|
324
|
+
if (!this.startWorkspace_) {
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
return new Coordinate(
|
|
328
|
+
(e.changedTouches ? e.changedTouches[0].pageX : e.pageX),
|
|
329
|
+
(e.changedTouches ? e.changedTouches[0].pageY : e.pageY));
|
|
324
330
|
}
|
|
325
|
-
|
|
326
|
-
(e.changedTouches ? e.changedTouches[0].pageX : e.pageX),
|
|
327
|
-
(e.changedTouches ? e.changedTouches[0].pageY : e.pageY));
|
|
328
|
-
};
|
|
331
|
+
}
|
|
329
332
|
|
|
330
333
|
exports.TouchGesture = TouchGesture;
|