-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathpreserve_drawing_buffer.js
60 lines (50 loc) · 1.51 KB
/
preserve_drawing_buffer.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
'use strict';
var isNumeric = require('fast-isnumeric');
var isMobileOrTablet = require('is-mobile');
module.exports = function preserveDrawingBuffer(opts) {
var ua;
if(opts && opts.hasOwnProperty('userAgent')) {
ua = opts.userAgent;
} else {
ua = getUserAgent();
}
if(typeof ua !== 'string') return true;
var enable = isMobileOrTablet({
ua: { headers: {'user-agent': ua }},
tablet: true,
featureDetect: false
});
if(!enable) {
var allParts = ua.split(' ');
for(var i = 1; i < allParts.length; i++) {
var part = allParts[i];
if(part.indexOf('Safari') !== -1) {
// find Safari version
for(var k = i - 1; k > -1; k--) {
var prevPart = allParts[k];
if(prevPart.substr(0, 8) === 'Version/') {
var v = prevPart.substr(8).split('.')[0];
if(isNumeric(v)) v = +v;
if(v >= 13) return true;
}
}
}
}
}
return enable;
};
function getUserAgent() {
// similar to https://github.com/juliangruber/is-mobile/blob/91ca39ccdd4cfc5edfb5391e2515b923a730fbea/index.js#L14-L17
var ua;
if(typeof navigator !== 'undefined') {
ua = navigator.userAgent;
}
if(
ua &&
ua.headers &&
typeof ua.headers['user-agent'] === 'string'
) {
ua = ua.headers['user-agent'];
}
return ua;
}