Initial commit
This commit is contained in:
Vendored
+166
@@ -0,0 +1,166 @@
|
||||
/* browser.js v0.1-dev | @ajlkn | MIT licensed */
|
||||
|
||||
var browser = (function() { "use strict"; var _ = {
|
||||
|
||||
/**
|
||||
* Name.
|
||||
* @var {string}
|
||||
*/
|
||||
name: null,
|
||||
|
||||
/**
|
||||
* Version.
|
||||
* @var {float}
|
||||
*/
|
||||
version: null,
|
||||
|
||||
/**
|
||||
* OS.
|
||||
* @var {string}
|
||||
*/
|
||||
os: null,
|
||||
|
||||
/**
|
||||
* OS version.
|
||||
* @var {float}
|
||||
*/
|
||||
osVersion: null,
|
||||
|
||||
/**
|
||||
* Touch.
|
||||
* @var {bool}
|
||||
*/
|
||||
touch: null,
|
||||
|
||||
/**
|
||||
* Mobile.
|
||||
* @var {bool}
|
||||
*/
|
||||
mobile: null,
|
||||
|
||||
/**
|
||||
* Temporary element for canUse()
|
||||
* @var {DOMElement}
|
||||
*/
|
||||
_canUse: null,
|
||||
|
||||
/**
|
||||
* Determines if the browser supports a given property.
|
||||
* @param {string} p Property.
|
||||
* @return {bool} True if property is supported, false if not.
|
||||
*/
|
||||
canUse: function(p) {
|
||||
|
||||
// Create temporary element if it doesn't already exist.
|
||||
if (!_._canUse)
|
||||
_._canUse = document.createElement('div');
|
||||
|
||||
// Check for property.
|
||||
var e = _._canUse.style,
|
||||
up = p.charAt(0).toUpperCase() + p.slice(1);
|
||||
|
||||
return (
|
||||
p in e
|
||||
|| ('Moz' + up) in e
|
||||
|| ('Webkit' + up) in e
|
||||
|| ('O' + up) in e
|
||||
|| ('ms' + up) in e
|
||||
);
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Initialize.
|
||||
*/
|
||||
init: function() {
|
||||
|
||||
var x, y, a, i, ua = navigator.userAgent;
|
||||
|
||||
// name, version.
|
||||
x = 'other';
|
||||
y = 0;
|
||||
a = [
|
||||
['firefox', /Firefox\/([0-9\.]+)/],
|
||||
['bb', /BlackBerry.+Version\/([0-9\.]+)/],
|
||||
['bb', /BB[0-9]+.+Version\/([0-9\.]+)/],
|
||||
['opera', /OPR\/([0-9\.]+)/],
|
||||
['opera', /Opera\/([0-9\.]+)/],
|
||||
['edge', /Edge\/([0-9\.]+)/],
|
||||
['safari', /Version\/([0-9\.]+).+Safari/],
|
||||
['chrome', /Chrome\/([0-9\.]+)/],
|
||||
['ie', /MSIE ([0-9]+)/],
|
||||
['ie', /Trident\/.+rv:([0-9]+)/]
|
||||
];
|
||||
|
||||
for (i=0; i < a.length; i++) {
|
||||
|
||||
if (ua.match(a[i][1])) {
|
||||
|
||||
x = a[i][0];
|
||||
y = parseFloat(RegExp.$1);
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_.name = x;
|
||||
_.version = y;
|
||||
|
||||
// os, osVersion.
|
||||
x = 'other';
|
||||
y = 0;
|
||||
a = [
|
||||
['ios', /([0-9_]+) like Mac OS X/, function(v) { return v.replace('_', '.').replace('_', ''); }],
|
||||
['ios', /CPU like Mac OS X/, function(v) { return 0 }],
|
||||
['wp', /Windows Phone ([0-9\.]+)/, null],
|
||||
['android', /Android ([0-9\.]+)/, null],
|
||||
['mac', /Macintosh.+Mac OS X ([0-9_]+)/, function(v) { return v.replace('_', '.').replace('_', ''); }],
|
||||
['windows', /Windows NT ([0-9\.]+)/, null],
|
||||
['bb', /BlackBerry.+Version\/([0-9\.]+)/, null],
|
||||
['bb', /BB[0-9]+.+Version\/([0-9\.]+)/, null]
|
||||
];
|
||||
|
||||
for (i=0; i < a.length; i++) {
|
||||
|
||||
if (ua.match(a[i][1])) {
|
||||
|
||||
x = a[i][0];
|
||||
y = parseFloat( a[i][2] ? (a[i][2])(RegExp.$1) : RegExp.$1 );
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_.os = x;
|
||||
_.osVersion = y;
|
||||
|
||||
// touch.
|
||||
_.touch = (_.os == 'wp' ? (navigator.msMaxTouchPoints > 0) : !!('ontouchstart' in window));
|
||||
|
||||
// mobile.
|
||||
_.mobile = (_.os == 'wp' || _.os == 'android' || _.os == 'ios' || _.os == 'bb');
|
||||
|
||||
},
|
||||
|
||||
}; _.init(); return _; })();
|
||||
|
||||
// UMD Wrapper (github.com/umdjs/umd/blob/master/returnExports.js | @umdjs + @nason)
|
||||
(function(root, factory) {
|
||||
|
||||
// AMD.
|
||||
if (typeof define === 'function' && define.amd)
|
||||
define([], factory);
|
||||
|
||||
// Node.
|
||||
else if (typeof exports === 'object')
|
||||
module.exports = factory();
|
||||
|
||||
// Browser global.
|
||||
else
|
||||
root.browser = factory();
|
||||
|
||||
}(this, function() { return browser; }));
|
||||
Reference in New Issue
Block a user