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.
Files changed (262) hide show
  1. package/blockly.d.ts +18963 -18432
  2. package/blockly.min.js +852 -844
  3. package/blockly_compressed.js +669 -664
  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 +41 -27
  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 +146 -141
  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 +19 -9
  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/dart_compressed.js +40 -43
  208. package/dart_compressed.js.map +1 -1
  209. package/generators/dart/colour.js +56 -64
  210. package/generators/dart/lists.js +61 -50
  211. package/generators/dart/math.js +160 -148
  212. package/generators/dart/text.js +83 -61
  213. package/generators/javascript/colour.js +37 -34
  214. package/generators/javascript/lists.js +50 -43
  215. package/generators/javascript/math.js +123 -139
  216. package/generators/javascript/text.js +67 -81
  217. package/generators/lua/colour.js +25 -23
  218. package/generators/lua/lists.js +97 -69
  219. package/generators/lua/logic.js +1 -2
  220. package/generators/lua/math.js +182 -144
  221. package/generators/lua/text.js +116 -99
  222. package/generators/php/colour.js +38 -32
  223. package/generators/php/lists.js +109 -89
  224. package/generators/php/math.js +90 -81
  225. package/generators/php/text.js +63 -61
  226. package/generators/python/colour.js +18 -18
  227. package/generators/python/lists.js +38 -30
  228. package/generators/python/loops.js +12 -8
  229. package/generators/python/math.js +104 -106
  230. package/generators/python/text.js +34 -30
  231. package/javascript_compressed.js +37 -39
  232. package/javascript_compressed.js.map +1 -1
  233. package/lua_compressed.js +39 -42
  234. package/lua_compressed.js.map +1 -1
  235. package/msg/az.js +2 -2
  236. package/msg/be.js +4 -4
  237. package/msg/cs.js +15 -15
  238. package/msg/de.js +1 -1
  239. package/msg/diq.js +1 -1
  240. package/msg/eo.js +1 -1
  241. package/msg/es.js +1 -1
  242. package/msg/fa.js +1 -1
  243. package/msg/fr.js +4 -4
  244. package/msg/he.js +1 -1
  245. package/msg/hr.js +2 -2
  246. package/msg/hy.js +2 -2
  247. package/msg/id.js +12 -12
  248. package/msg/inh.js +14 -14
  249. package/msg/ja.js +7 -7
  250. package/msg/lv.js +29 -29
  251. package/msg/pa.js +3 -3
  252. package/msg/smn.js +436 -0
  253. package/msg/te.js +1 -1
  254. package/msg/yue.js +1 -1
  255. package/msg/zh-hans.js +3 -3
  256. package/msg/zh-hant.js +3 -3
  257. package/package.json +7 -6
  258. package/php_compressed.js +38 -42
  259. package/php_compressed.js.map +1 -1
  260. package/python_compressed.js +26 -25
  261. package/python_compressed.js.map +1 -1
  262. package/blocks/all.js +0 -23
@@ -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
- const TouchGesture = function(e, creatorWorkspace) {
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
- * A map of cached points used for tracking multi-touch gestures.
55
- * @type {!Object<number|string, Coordinate>}
56
- * @private
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
- this.cachedPoints_ = Object.create(null);
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
- * This is the ratio between the starting distance between the touch points
62
- * and the most recent distance between the touch points.
63
- * Scales between 0 and 1 mean the most recent zoom was a zoom out.
64
- * Scales above 1.0 mean the most recent zoom was a zoom in.
65
- * @type {number}
66
- * @private
67
- */
68
- this.previousScale_ = 0;
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
- * The starting distance between two touch points.
72
- * @type {number}
73
- * @private
74
- */
75
- this.startDistance_ = 0;
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
- * A handle to use to unbind the second touch start or pointer down listener
79
- * at the end of a drag.
80
- * Opaque data returned from Blockly.bindEventWithChecks_.
81
- * @type {?browserEvents.Data}
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
- this.onStartWrapper_ = null;
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
- * Boolean for whether or not the workspace supports pinch-zoom.
88
- * @type {?boolean}
89
- * @private
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
- this.isPinchZoomEnabled_ = null;
92
- };
93
- object.inherits(TouchGesture, Gesture);
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
- * A multiplier used to convert the gesture scale to a zoom in delta.
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
- * Bind gesture events.
124
- * Overriding the gesture definition of this function, binding the same
125
- * functions for onMoveWrapper_ and onUpWrapper_ but passing
126
- * opt_noCaptureIdentifier.
127
- * In addition, binding a second mouse down event to detect multi-touch events.
128
- * @param {!Event} e A mouse down or touch start event.
129
- * @package
130
- */
131
- TouchGesture.prototype.bindMouseEvents = function(e) {
132
- this.onStartWrapper_ = browserEvents.conditionalBind(
133
- document, 'mousedown', null, this.handleStart.bind(this),
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
- * Handle a mouse down, touch start, or pointer down event.
148
- * @param {!Event} e A mouse down, touch start, or pointer down event.
149
- * @package
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
- * Handle a mouse move, touch move, or pointer move event.
167
- * @param {!Event} e A mouse move, touch move, or pointer move event.
168
- * @package
169
- */
170
- TouchGesture.prototype.handleMove = function(e) {
171
- if (this.isDragging()) {
172
- // We are in the middle of a drag, only handle the relevant events
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
- return;
177
- }
178
- if (this.isMultiTouch()) {
179
- if (Touch.isTouchEvent(e)) {
180
- this.handleTouchMove(e);
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
- * Handle a mouse up, touch end, or pointer up event.
190
- * @param {!Event} e A mouse up, touch end, or pointer up event.
191
- * @package
192
- */
193
- TouchGesture.prototype.handleUp = function(e) {
194
- if (Touch.isTouchEvent(e) && !this.isDragging()) {
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
- this.dispose();
207
- }
208
- };
221
+ /**
222
+ * Sever all links from this object.
223
+ * @package
224
+ */
225
+ dispose() {
226
+ super.dispose();
209
227
 
210
- /**
211
- * Whether this gesture is part of a multi-touch gesture.
212
- * @return {boolean} Whether this gesture is part of a multi-touch gesture.
213
- * @package
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
- * Sever all links from this object.
221
- * @package
222
- */
223
- TouchGesture.prototype.dispose = function() {
224
- TouchGesture.superClass_.dispose.call(this);
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
- if (this.onStartWrapper_) {
227
- browserEvents.unbind(this.onStartWrapper_);
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
- * Handle a touch start or pointer down event and keep track of current
233
- * pointers.
234
- * @param {!Event} e A touch start, or pointer down event.
235
- * @package
236
- */
237
- TouchGesture.prototype.handleTouchStart = function(e) {
238
- const pointerId = Touch.getTouchIdentifierFromEvent(e);
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
- this.startDistance_ = Coordinate.distance(point0, point1);
247
- this.isMultiTouch_ = true;
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
- * Handle a touch end or pointer end event and end the gesture.
301
- * @param {!Event} e A touch end, or pointer end event.
302
- * @package
303
- */
304
- TouchGesture.prototype.handleTouchEnd = function(e) {
305
- const pointerId = Touch.getTouchIdentifierFromEvent(e);
306
- if (this.cachedPoints_[pointerId]) {
307
- delete this.cachedPoints_[pointerId];
308
- }
309
- if (Object.keys(this.cachedPoints_).length < 2) {
310
- this.cachedPoints_ = Object.create(null);
311
- this.previousScale_ = 0;
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
- * Helper function returning the current touch point coordinate.
317
- * @param {!Event} e A touch or pointer event.
318
- * @return {?Coordinate} The current touch point coordinate
319
- * @package
320
- */
321
- TouchGesture.prototype.getTouchPoint = function(e) {
322
- if (!this.startWorkspace_) {
323
- return null;
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
- return new Coordinate(
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;