env.js
2.33 KB
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
export var HAS_WINDOW_SUPPORT = typeof window !== 'undefined';
export var HAS_DOCUMENT_SUPPORT = typeof document !== 'undefined';
export var HAS_NAVIGATOR_SUPPORT = typeof navigator !== 'undefined';
export var HAS_PROMISE_SUPPORT = typeof Promise !== 'undefined';
/* istanbul ignore next: JSDOM always returns false */
export var HAS_MUTATION_OBSERVER_SUPPORT = typeof MutationObserver !== 'undefined' || typeof WebKitMutationObserver !== 'undefined' || typeof MozMutationObserver !== 'undefined';
export var IS_BROWSER = HAS_WINDOW_SUPPORT && HAS_DOCUMENT_SUPPORT && HAS_NAVIGATOR_SUPPORT;
export var WINDOW = HAS_WINDOW_SUPPORT ? window : {};
export var DOCUMENT = HAS_DOCUMENT_SUPPORT ? document : {};
export var NAVIGATOR = HAS_NAVIGATOR_SUPPORT ? navigator : {};
export var USER_AGENT = (NAVIGATOR.userAgent || '').toLowerCase();
export var IS_JSDOM = USER_AGENT.indexOf('jsdom') > 0;
export var IS_IE = /msie|trident/.test(USER_AGENT); // Determine if the browser supports the option passive for events
export var HAS_PASSIVE_EVENT_SUPPORT = function () {
var passiveEventSupported = false;
if (IS_BROWSER) {
try {
var options = {
// This function will be called when the browser
// attempts to access the passive property
get passive() {
/* istanbul ignore next: will never be called in JSDOM */
passiveEventSupported = true;
}
};
WINDOW.addEventListener('test', options, options);
WINDOW.removeEventListener('test', options, options);
} catch (_unused) {
/* istanbul ignore next: will never be called in JSDOM */
passiveEventSupported = false;
}
}
return passiveEventSupported;
}();
export var HAS_TOUCH_SUPPORT = IS_BROWSER && ('ontouchstart' in DOCUMENT.documentElement || NAVIGATOR.maxTouchPoints > 0);
export var HAS_POINTER_EVENT_SUPPORT = IS_BROWSER && Boolean(WINDOW.PointerEvent || WINDOW.MSPointerEvent);
/* istanbul ignore next: JSDOM only checks for 'IntersectionObserver' */
export var HAS_INTERACTION_OBSERVER_SUPPORT = IS_BROWSER && 'IntersectionObserver' in WINDOW && 'IntersectionObserverEntry' in WINDOW && // Edge 15 and UC Browser lack support for `isIntersecting`
// but we an use `intersectionRatio > 0` instead
// 'isIntersecting' in window.IntersectionObserverEntry.prototype &&
'intersectionRatio' in WINDOW.IntersectionObserverEntry.prototype;