Merge branch 'PR723'
authorAdrian Iain Lam <adrianiainlam@users.noreply.github.com>
Tue, 31 Jul 2018 03:55:13 +0000 (11:55 +0800)
committerAdrian Iain Lam <adrianiainlam@users.noreply.github.com>
Tue, 31 Jul 2018 03:55:13 +0000 (11:55 +0800)
This merges changes by @kbaggott in danvk/dygraphs PR #723,
to allow points to be selected (and thus legends to show up)
on touchscreens.

src/dygraph-interaction-model.js
src/dygraph-utils.js

index 494b638..4fd33d9 100644 (file)
@@ -430,7 +430,9 @@ DygraphInteraction.startTouch = function(event, g, context) {
   context.initialTouches = touches;
 
   if (touches.length == 1) {
-    // This is just a swipe.
+    // This is possbily a touchOVER, save the last touch to check
+    context.lastTouch = event;
+    // or This is just a swipe. 
     context.initialPinchCenter = touches[0];
     context.touchDirections = { x: true, y: true };
   } else if (touches.length >= 2) {
@@ -475,6 +477,9 @@ DygraphInteraction.startTouch = function(event, g, context) {
 DygraphInteraction.moveTouch = function(event, g, context) {
   // If the tap moves, then it's definitely not part of a double-tap.
   context.startTimeForDoubleTapMs = null;
+ // clear the last touch if it's doing something else
+  context.lastTouch = null;
 
   var i, touches = [];
   for (i = 0; i < event.touches.length; i++) {
@@ -581,6 +586,13 @@ DygraphInteraction.endTouch = function(event, g, context) {
         context.doubleTapY && Math.abs(context.doubleTapY - t.screenY) < 50) {
       g.resetZoom();
     } else {
+      
+      if (context.lastTouch !== null){
+        // no double-tap, pan or pinch so it's a touchOVER
+        event.isTouchOver = true;
+        g.mouseMove(event);
+      }
+
       context.startTimeForDoubleTapMs = now;
       context.doubleTapX = t.screenX;
       context.doubleTapY = t.screenY;
index c0b8f34..54b6b69 100644 (file)
@@ -199,6 +199,7 @@ export function findPos(obj) {
  * @private
  */
 export function pageX(e) {
+  if (e.isTouchOver) return (!e.changedTouches[0] || e.changedTouches[0].pageX < 0) ? 0 : e.changedTouches[0].pageX;
   return (!e.pageX || e.pageX < 0) ? 0 : e.pageX;
 };
 
@@ -211,6 +212,7 @@ export function pageX(e) {
  * @private
  */
 export function pageY(e) {
+  if (e.isTouchOver) return (!e.changedTouches[0] || e.changedTouches[0].pageY < 0) ? 0 : e.changedTouches[0].pageY;
   return (!e.pageY || e.pageY < 0) ? 0 : e.pageY;
 };