From 63c51d1840d1911b6fc2a34587bbcdf625aaadf5 Mon Sep 17 00:00:00 2001 From: archmoj Date: Mon, 3 Feb 2020 11:41:35 -0500 Subject: [PATCH 1/3] bump gl-plot3d and fix issue 4502 - handle Safari with iPad (Pro) + iOS 13 --- package-lock.json | 6 +++--- package.json | 2 +- src/plots/gl3d/scene.js | 29 +++++++++++++++++++++++++++-- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1a57fd85b31..e6f196adeb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4975,9 +4975,9 @@ } }, "gl-plot3d": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/gl-plot3d/-/gl-plot3d-2.4.1.tgz", - "integrity": "sha512-Xm2VmZL7re85KADU1FBj6qMVLgb3jL1RcoUuQ96BgFJp9I0YiVwA4kCxK9asFhE0I2/J0PAXDtSmqbafvAV9Tw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/gl-plot3d/-/gl-plot3d-2.4.2.tgz", + "integrity": "sha512-nBLTqKCLOlPnf/8kWJdZxZTdcK7U0KqHO13T08dakfv2a1xiiy4qgqjjI42UXZOkthrqyt4VszBQ/D4qBgTHBw==", "requires": { "3d-view": "^2.0.0", "a-big-triangle": "^1.0.3", diff --git a/package.json b/package.json index 98e45f2e3f1..39eedfab985 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "gl-mat4": "^1.2.0", "gl-mesh3d": "^2.3.0", "gl-plot2d": "^1.4.3", - "gl-plot3d": "^2.4.1", + "gl-plot3d": "^2.4.2", "gl-pointcloud2d": "^1.0.2", "gl-scatter3d": "^1.2.2", "gl-select-box": "^1.0.3", diff --git a/src/plots/gl3d/scene.js b/src/plots/gl3d/scene.js index 4f12b0dc4da..cc32ef4377d 100644 --- a/src/plots/gl3d/scene.js +++ b/src/plots/gl3d/scene.js @@ -15,7 +15,6 @@ var createPlot = glPlot3d.createScene; var getContext = require('webgl-context'); var passiveSupported = require('has-passive-events'); -var isMobile = require('is-mobile')({ tablet: true }); var Registry = require('../../registry'); var Lib = require('../../lib'); @@ -31,6 +30,32 @@ var createAxesOptions = require('./layout/convert'); var createSpikeOptions = require('./layout/spikes'); var computeTickMarks = require('./layout/tick_marks'); +var isMobile = require('is-mobile'); +var tablet = isTablet(); + +function isTablet() { + var navigator = window.navigator; + var userAgent = navigator.userAgent; + + var result = isMobile({ + ua: userAgent, + tablet: true + }); + + // handle iPad pro or iPad with iOs 13 using Safari + // see https://github.com/plotly/plotly.js/issues/4502 + if( + result === false && + userAgent.indexOf('Macintosh') !== -1 && + userAgent.indexOf('Safari') !== -1 && + navigator.maxTouchPoints > 1 + ) { + result = true; + } + + return result; +} + var STATIC_CANVAS, STATIC_CONTEXT; @@ -96,7 +121,7 @@ proto.tryCreatePlot = function() { canvas: scene.canvas, gl: scene.gl, glOptions: { - preserveDrawingBuffer: isMobile, + preserveDrawingBuffer: tablet, premultipliedAlpha: true, antialias: true }, From 436fca46dad2226913b07f3ab0d01b04cb0ad03c Mon Sep 17 00:00:00 2001 From: archmoj Date: Mon, 3 Feb 2020 14:22:04 -0500 Subject: [PATCH 2/3] add extra logic to get userAgent --- src/plots/gl3d/scene.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/plots/gl3d/scene.js b/src/plots/gl3d/scene.js index cc32ef4377d..8c4c6c10002 100644 --- a/src/plots/gl3d/scene.js +++ b/src/plots/gl3d/scene.js @@ -34,11 +34,16 @@ var isMobile = require('is-mobile'); var tablet = isTablet(); function isTablet() { - var navigator = window.navigator; - var userAgent = navigator.userAgent; + var ua; + // same interface as applied by is-mobile module + if(!ua && typeof navigator !== 'undefined') ua = navigator.userAgent; + if(ua && ua.headers && typeof ua.headers['user-agent'] === 'string') { + ua = ua.headers['user-agent']; + } + if(typeof ua !== 'string') return false; var result = isMobile({ - ua: userAgent, + ua: ua, tablet: true }); @@ -46,8 +51,8 @@ function isTablet() { // see https://github.com/plotly/plotly.js/issues/4502 if( result === false && - userAgent.indexOf('Macintosh') !== -1 && - userAgent.indexOf('Safari') !== -1 && + ua.indexOf('Macintosh') !== -1 && + ua.indexOf('Safari') !== -1 && navigator.maxTouchPoints > 1 ) { result = true; From aa28ebafd53a0fc5cb34a54b5f0718cb0aad4f43 Mon Sep 17 00:00:00 2001 From: archmoj Date: Mon, 3 Feb 2020 14:48:36 -0500 Subject: [PATCH 3/3] return early if there is no navigator --- src/plots/gl3d/scene.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plots/gl3d/scene.js b/src/plots/gl3d/scene.js index 8c4c6c10002..1b05755a0cb 100644 --- a/src/plots/gl3d/scene.js +++ b/src/plots/gl3d/scene.js @@ -34,6 +34,8 @@ var isMobile = require('is-mobile'); var tablet = isTablet(); function isTablet() { + if(!navigator) return false; + var ua; // same interface as applied by is-mobile module if(!ua && typeof navigator !== 'undefined') ua = navigator.userAgent;