mirror of
https://github.com/openstf/stf
synced 2025-10-05 19:42:01 +02:00
65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
// NOTE: Most of the detection stuff is from Modernizr 3.0
|
|
module.exports = function BrowserInfoServiceFactory() {
|
|
var service = {}
|
|
|
|
function createElement() {
|
|
return document.createElement.apply(document, arguments)
|
|
}
|
|
|
|
function addTest(key, test) {
|
|
service[key] = (typeof test == 'function') ? test() : test
|
|
}
|
|
|
|
addTest('touch', function () {
|
|
return ('ontouchstart' in window) || window.DocumentTouch &&
|
|
document instanceof window.DocumentTouch
|
|
})
|
|
|
|
addTest('retina', function () {
|
|
var mediaQuery = '(-webkit-min-device-pixel-ratio: 1.5), ' +
|
|
'(min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), ' +
|
|
'(min-resolution: 1.5dppx)'
|
|
if (window.devicePixelRatio > 1) {
|
|
return true
|
|
}
|
|
return !!(window.matchMedia && window.matchMedia(mediaQuery).matches)
|
|
})
|
|
|
|
addTest('small', function () {
|
|
var windowWidth = window.screen.width < window.outerWidth ?
|
|
window.screen.width : window.outerWidth
|
|
return windowWidth < 800
|
|
})
|
|
|
|
addTest('mobile', function () {
|
|
return !!(service.small && service.touch)
|
|
})
|
|
|
|
addTest('os', function () {
|
|
var ua = navigator.userAgent
|
|
if (ua.match(/Android/i)) {
|
|
return 'android'
|
|
} else if (ua.match(/iPhone|iPad|iPod/i)) {
|
|
return 'ios'
|
|
} else {
|
|
return 'pc'
|
|
}
|
|
})
|
|
|
|
addTest('webgl', function () {
|
|
var canvas = createElement('canvas')
|
|
if ('supportsContext' in canvas) {
|
|
return canvas.supportsContext('webgl') ||
|
|
canvas.supportsContext('experimental-webgl')
|
|
}
|
|
return !!window.WebGLRenderingContext
|
|
})
|
|
|
|
addTest('ua', navigator.userAgent)
|
|
|
|
addTest('devicemotion', 'DeviceMotionEvent' in window)
|
|
|
|
addTest('deviceorientation', 'DeviceOrientationEvent' in window)
|
|
|
|
return service
|
|
}
|