Skip to content

Commit bd21327

Browse files
committedDec 18, 2020
make a lib function to get preserve drawing buffer
1 parent 4bb651f commit bd21327

File tree

3 files changed

+64
-56
lines changed

3 files changed

+64
-56
lines changed
 

‎src/lib/index.js

+1
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ lib.getElementAndAncestors = domModule.getElementAndAncestors;
154154
lib.equalDomRects = domModule.equalDomRects;
155155

156156
lib.clearResponsive = require('./clear_responsive');
157+
lib.preserveDrawingBuffer = require('./preserve_drawing_buffer');
157158

158159
lib.makeTraceGroups = require('./make_trace_groups');
159160

‎src/lib/preserve_drawing_buffer.js

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/**
2+
* Copyright 2012-2020, Plotly, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the MIT license found in the
6+
* LICENSE file in the root directory of this source tree.
7+
*/
8+
9+
'use strict';
10+
11+
var isNumeric = require('fast-isnumeric');
12+
var isMobileOrTablet = require('is-mobile');
13+
14+
module.exports = function getPreserveDrawingBuffer() {
15+
var ua = getUserAgent();
16+
if(typeof ua !== 'string') return true;
17+
18+
var hasDrawingBuffer = isMobileOrTablet({
19+
ua: ua,
20+
tablet: true,
21+
featureDetect: true
22+
});
23+
24+
if(!hasDrawingBuffer) {
25+
var allParts = ua.split(' ');
26+
for(var i = 1; i < allParts.length; i++) {
27+
var part = allParts[i];
28+
if(part.indexOf('Safari') !== -1) {
29+
// find Safari version
30+
var prevPart = allParts[i - 1];
31+
if(prevPart.substr(0, 8) === 'Version/') {
32+
var v = prevPart.substr(8).split('.')[0];
33+
34+
if(isNumeric(v)) v = +v;
35+
36+
// to fix https://github.com/plotly/plotly.js/issues/5158
37+
if(v >= 14) return true;
38+
}
39+
}
40+
}
41+
}
42+
43+
return hasDrawingBuffer;
44+
};
45+
46+
function getUserAgent() {
47+
// similar to https://github.com/juliangruber/is-mobile/blob/91ca39ccdd4cfc5edfb5391e2515b923a730fbea/index.js#L14-L17
48+
var ua;
49+
if(typeof navigator !== 'undefined') {
50+
ua = navigator.userAgent;
51+
}
52+
53+
if(
54+
ua &&
55+
ua.headers &&
56+
typeof ua.headers['user-agent'] === 'string'
57+
) {
58+
ua = ua.headers['user-agent'];
59+
}
60+
61+
return ua;
62+
}

‎src/plots/gl3d/scene.js

+1-56
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99

1010
'use strict';
1111

12-
var isNumeric = require('fast-isnumeric');
13-
1412
var glPlot3d = require('gl-plot3d');
1513
var createCamera = glPlot3d.createCamera;
1614
var createPlot = glPlot3d.createScene;
@@ -20,6 +18,7 @@ var passiveSupported = require('has-passive-events');
2018

2119
var Registry = require('../../registry');
2220
var Lib = require('../../lib');
21+
var preserveDrawingBuffer = Lib.preserveDrawingBuffer();
2322

2423
var Axes = require('../../plots/cartesian/axes');
2524
var Fx = require('../../components/fx');
@@ -32,60 +31,6 @@ var createAxesOptions = require('./layout/convert');
3231
var createSpikeOptions = require('./layout/spikes');
3332
var computeTickMarks = require('./layout/tick_marks');
3433

35-
var isMobileOrTablet = require('is-mobile');
36-
var preserveDrawingBuffer = getPreserveDrawingBuffer();
37-
38-
function getPreserveDrawingBuffer() {
39-
var ua = getUserAgent();
40-
if(typeof ua !== 'string') return true;
41-
42-
var hasDrawingBuffer = isMobileOrTablet({
43-
ua: ua,
44-
tablet: true,
45-
featureDetect: true
46-
});
47-
48-
if(!hasDrawingBuffer) {
49-
var allParts = ua.split(' ');
50-
for(var i = 1; i < allParts.length; i++) {
51-
var part = allParts[i];
52-
if(part.indexOf('Safari') !== -1) {
53-
// find Safari version
54-
var prevPart = allParts[i - 1];
55-
if(prevPart.substr(0, 8) === 'Version/') {
56-
var v = prevPart.substr(8).split('.')[0];
57-
58-
if(isNumeric(v)) v = +v;
59-
60-
// to fix https://github.com/plotly/plotly.js/issues/5158
61-
if(v >= 14) return true;
62-
}
63-
}
64-
}
65-
}
66-
67-
return hasDrawingBuffer;
68-
}
69-
70-
function getUserAgent() {
71-
// similar to https://github.com/juliangruber/is-mobile/blob/91ca39ccdd4cfc5edfb5391e2515b923a730fbea/index.js#L14-L17
72-
var ua;
73-
if(typeof navigator !== 'undefined') {
74-
ua = navigator.userAgent;
75-
}
76-
77-
if(
78-
ua &&
79-
ua.headers &&
80-
typeof ua.headers['user-agent'] === 'string'
81-
) {
82-
ua = ua.headers['user-agent'];
83-
}
84-
85-
return ua;
86-
}
87-
88-
8934
var STATIC_CANVAS, STATIC_CONTEXT;
9035

9136
function Scene(options, fullLayout) {

0 commit comments

Comments
 (0)
Please sign in to comment.