File: //home/arjun/projects/buyercall/node_modules/detect-it/lib/index.js
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _detectHover = require('detect-hover');
var _detectHover2 = _interopRequireDefault(_detectHover);
var _detectPointer = require('detect-pointer');
var _detectPointer2 = _interopRequireDefault(_detectPointer);
var _detectTouchEvents = require('detect-touch-events');
var _detectTouchEvents2 = _interopRequireDefault(_detectTouchEvents);
var _detectPassiveEvents = require('detect-passive-events');
var _detectPassiveEvents2 = _interopRequireDefault(_detectPassiveEvents);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/*
* detectIt object structure
* const detectIt = {
* deviceType: 'mouseOnly' / 'touchOnly' / 'hybrid',
* passiveEvents: boolean,
* hasTouch: boolean,
* hasMouse: boolean,
* maxTouchPoints: number,
* primaryHover: 'hover' / 'none',
* primaryPointer: 'fine' / 'coarse' / 'none',
* state: {
* detectHover,
* detectPointer,
* detectTouchEvents,
* detectPassiveEvents,
* },
* update() {...},
* }
*/
function determineDeviceType(hasTouch, anyHover, anyFine, state) {
// A hybrid device is one that both hasTouch and any input device can hover
// or has a fine pointer.
if (hasTouch && (anyHover || anyFine)) return 'hybrid';
// workaround for browsers that have the touch events api,
// and have implemented Level 4 media queries but not the
// hover and pointer media queries, so the tests are all false (notable Firefox)
// if it hasTouch, no pointer and hover support, and on an android assume it's touchOnly
// if it hasTouch, no pointer and hover support, and not on an android assume it's a hybrid
if (hasTouch && Object.keys(state.detectHover).filter(function (key) {
return key !== 'update';
}).every(function (key) {
return state.detectHover[key] === false;
}) && Object.keys(state.detectPointer).filter(function (key) {
return key !== 'update';
}).every(function (key) {
return state.detectPointer[key] === false;
})) {
if (window.navigator && /android/.test(window.navigator.userAgent.toLowerCase())) {
return 'touchOnly';
}
return 'hybrid';
}
// In almost all cases a device that doesn’t support touch will have a mouse,
// but there may be rare exceptions. Note that it doesn’t work to do additional tests
// based on hover and pointer media queries as older browsers don’t support these.
// Essentially, 'mouseOnly' is the default.
return hasTouch ? 'touchOnly' : 'mouseOnly';
}
var detectIt = {
state: {
detectHover: _detectHover2.default,
detectPointer: _detectPointer2.default,
detectTouchEvents: _detectTouchEvents2.default,
detectPassiveEvents: _detectPassiveEvents2.default
},
update: function update() {
detectIt.state.detectHover.update();
detectIt.state.detectPointer.update();
detectIt.state.detectTouchEvents.update();
detectIt.state.detectPassiveEvents.update();
detectIt.updateOnlyOwnProperties();
},
updateOnlyOwnProperties: function updateOnlyOwnProperties() {
if (typeof window !== 'undefined') {
detectIt.passiveEvents = detectIt.state.detectPassiveEvents.hasSupport || false;
detectIt.hasTouch = detectIt.state.detectTouchEvents.hasSupport || false;
detectIt.deviceType = determineDeviceType(detectIt.hasTouch, detectIt.state.detectHover.anyHover, detectIt.state.detectPointer.anyFine, detectIt.state);
detectIt.hasMouse = detectIt.deviceType !== 'touchOnly';
detectIt.primaryInput = detectIt.deviceType === 'mouseOnly' && 'mouse' || detectIt.deviceType === 'touchOnly' && 'touch' ||
// deviceType is hybrid:
detectIt.state.detectPointer.fine && 'mouse' || detectIt.state.detectPointer.coarse && 'touch' ||
// if there's no support for hover media queries but detectIt determined it's
// a hybrid device, then assume it's a mouse first device
'mouse';
// issue with Windows Chrome on hybrid devices starting in version 59 where
// media queries represent a touch only device, so if the browser is an
// affected Windows Chrome version and hasTouch,
// then assume it's a hybrid with primaryInput mouse
// note that version 62 of Chrome fixes this issue
// see https://github.com/rafgraph/detect-it/issues/8
var inVersionRange = function inVersionRange(version) {
return version >= 59 && version < 62;
};
var isAffectedWindowsChromeVersion = /windows/.test(window.navigator.userAgent.toLowerCase()) && /chrome/.test(window.navigator.userAgent.toLowerCase()) && inVersionRange(parseInt(/Chrome\/([0-9.]+)/.exec(navigator.userAgent)[1], 10));
if (isAffectedWindowsChromeVersion && detectIt.hasTouch) {
detectIt.deviceType = 'hybrid';
detectIt.hasMouse = true;
detectIt.primaryInput = 'mouse';
}
}
}
};
detectIt.updateOnlyOwnProperties();
exports.default = detectIt;