@@ -15,7 +15,6 @@ var createPlot = glPlot3d.createScene;
1515
1616var getContext = require ( 'webgl-context' ) ;
1717var passiveSupported = require ( 'has-passive-events' ) ;
18- var isMobile = require ( 'is-mobile' ) ( { tablet : true } ) ;
1918
2019var Registry = require ( '../../registry' ) ;
2120var Lib = require ( '../../lib' ) ;
@@ -31,6 +30,39 @@ var createAxesOptions = require('./layout/convert');
3130var createSpikeOptions = require ( './layout/spikes' ) ;
3231var computeTickMarks = require ( './layout/tick_marks' ) ;
3332
33+ var isMobile = require ( 'is-mobile' ) ;
34+ var tablet = isTablet ( ) ;
35+
36+ function isTablet ( ) {
37+ if ( ! navigator ) return false ;
38+
39+ var ua ;
40+ // same interface as applied by is-mobile module
41+ if ( ! ua && typeof navigator !== 'undefined' ) ua = navigator . userAgent ;
42+ if ( ua && ua . headers && typeof ua . headers [ 'user-agent' ] === 'string' ) {
43+ ua = ua . headers [ 'user-agent' ] ;
44+ }
45+ if ( typeof ua !== 'string' ) return false ;
46+
47+ var result = isMobile ( {
48+ ua : ua ,
49+ tablet : true
50+ } ) ;
51+
52+ // handle iPad pro or iPad with iOs 13 using Safari
53+ // see https://github.com/plotly/plotly.js/issues/4502
54+ if (
55+ result === false &&
56+ ua . indexOf ( 'Macintosh' ) !== - 1 &&
57+ ua . indexOf ( 'Safari' ) !== - 1 &&
58+ navigator . maxTouchPoints > 1
59+ ) {
60+ result = true ;
61+ }
62+
63+ return result ;
64+ }
65+
3466
3567var STATIC_CANVAS , STATIC_CONTEXT ;
3668
@@ -96,7 +128,7 @@ proto.tryCreatePlot = function() {
96128 canvas : scene . canvas ,
97129 gl : scene . gl ,
98130 glOptions : {
99- preserveDrawingBuffer : isMobile ,
131+ preserveDrawingBuffer : tablet ,
100132 premultipliedAlpha : true ,
101133 antialias : true
102134 } ,
0 commit comments