rb-sdk
Version:
rb client sdk
272 lines (261 loc) • 8.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var OS = [['iOS', function (ua) {
return (/iP(hone|od|ad)/
);
}], ['Android OS', function (ua) {
return (/(Android)/
);
}], ['BlackBerry OS', function (ua) {
return (/(BlackBerry)|(BB10)/
);
}], ['Windows Mobile', function (ua) {
return (/(IEMobile)/
);
}], ['Amazon OS', function (ua) {
return (/(Kindle)/
);
}], ['Windows 3.11', function (ua) {
return (/(Win16)/
);
}], ['Windows 95', function (ua) {
return (/(Windows 95)|(Win95)|(Windows_95)/
);
}], ['Windows 98', function (ua) {
return (/(Windows 98)|(Win98)/
);
}], ['Windows 2000', function (ua) {
return (/(Windows NT 5.0)|(Windows 2000)/
);
}], ['Windows XP', function (ua) {
return (/(Windows NT 5.1)|(Windows XP)/
);
}], ['Windows Server 2003', function (ua) {
return (/(Windows NT 5.2)/
);
}], ['Windows Vista', function (ua) {
return (/(Windows NT 6.0)/
);
}], ['Windows 7', function (ua) {
return (/(Windows NT 6.1)/
);
}], ['Windows 8', function (ua) {
return (/(Windows NT 6.2)/
);
}], ['Windows 8.1', function (ua) {
return (/(Windows NT 6.3)/
);
}], ['Windows 10', function (ua) {
return (/(Windows NT 10.0)/
);
}], ['Windows ME', function (ua) {
return (/(Windows ME)/
);
}], ['Open BSD', function (ua) {
return (/(OpenBSD)/
);
}], ['Sun OS', function (ua) {
return (/(SunOS)/
);
}], ['Chrome OS', function (ua) {
return (/(CrOS)/
);
}], ['Linux', function (ua) {
return (/(Linux)|(X11)/
);
}], ['Mac OS', function (ua) {
return (/(Mac_PowerPC)|(Macintosh)/
);
}], ['QNX', function (ua) {
return (/(QNX)/
);
}], ['BeOS', function (ua) {
return (/(BeOS)/
);
}], ['OS/2', function (ua) {
return (/(OS\/2)/
);
}]];
var BROWSER = [["micromessenger", /\bmicromessenger\/([\d.]+)/], ["qq", /\bm?qqbrowser\/([0-9.]+)/], ["tt", /\btencenttraveler ([0-9.]+)/], ["weibo", /weibo__([0-9.]+)/], ["uc", function (ua) {
if (ua.indexOf("ucbrowser/") >= 0) {
return (/\bucbrowser\/([0-9.]+)/
);
} else if (ua.indexOf("ubrowser/") >= 0) {
return (/\bubrowser\/([0-9.]+)/
);
} else if (/\buc\/[0-9]/.test(ua)) {
return (/\buc\/([0-9.]+)/
);
} else if (ua.indexOf("ucweb") >= 0) {
return (/\bucweb([0-9.]+)?/
);
} else {
return (/\b(?:ucbrowser|uc)\b/
);
}
}], ["360", function (ua) {
if (ua.indexOf("360 aphone browser") !== -1) {
return (/\b360 aphone browser \(([^\)]+)\)/
);
}
return (/\b360(?:se|ee|chrome|browser)\b/
);
}], ["baidu", /\b(?:ba?idubrowser|baiduhd)[ \/]([0-9.x]+)/], ["baiduboxapp", function (ua) {
var back = 0;
var a;
if (/ baiduboxapp\//i.test(ua)) {
if (a = /([\d+.]+)_(?:diordna|enohpi)_/.exec(ua)) {
a = a[1].split(".");
back = a.reverse().join(".");
} else if (a = /baiduboxapp\/([\d+.]+)/.exec(ua)) {
back = a[1];
}
return {
version: back
};
}
return false;
}], ["sogou", function (ua) {
if (ua.indexOf("sogoumobilebrowser") >= 0) {
return (/sogoumobilebrowser\/([0-9.]+)/
);
} else if (ua.indexOf("sogoumse") >= 0) {
return true;
}
return (/ se ([0-9.x]+)/
);
}], ["ali-ap", function (ua) {
if (ua.indexOf("aliapp") > 0) {
return (/\baliapp\(ap\/([0-9.]+)\)/
);
} else {
return (/\balipayclient\/([0-9.]+)\b/
);
}
}], ["ali-tb", /\baliapp\(tb\/([0-9.]+)\)/], ["ali-tm", /\baliapp\(tm\/([0-9.]+)\)/], ["tao", /\btaobrowser\/([0-9.]+)/], ["mi", /\bmiuibrowser\/([0-9.]+)/], ["oppo", /\boppobrowser\/([0-9.]+)/], ["vivo", /\bvivobrowser\/([0-9.]+)/], ["meizu", /\bmzbrowser\/([0-9.]+)/], ["nokia", /\bnokiabrowser\/([0-9.]+)/], ["samsung", /\bsamsungbrowser\/([0-9.]+)/], ["maxthon", /\b(?:maxthon|mxbrowser)(?:[ \/]([0-9.]+))?/], ["opera", function (ua) {
var re_opera_old = /\bopera.+version\/([0-9.ab]+)/;
var re_opera_new = /\bopr\/([0-9.]+)/;
return re_opera_old.test(ua) ? re_opera_old : re_opera_new;
}], ["edge", /edge\/([0-9.]+)/], ["firefox", /\bfirefox\/([0-9.ab]+)/], ["chrome", / (?:chrome|crios|crmo)\/([0-9.]+)/], ["android", function (ua) {
if (ua.indexOf("android") === -1) {
return;
}
return (/\bversion\/([0-9.]+(?: beta)?)/
);
}], ["safari", /\bversion\/([0-9.]+(?: beta)?)(?: mobile(?:\/[a-z0-9]+)?)? safari\//], ["webview", /\bcpu(?: iphone)? os (?:[0-9._]+).+\bapplewebkit\b/]];
var typeOf = function typeOf(type) {
return function (object) {
return Object.prototype.toString.call(object) === "[object " + type + "]";
};
};
var each = function each(object, factory) {
for (var i = 0, l = object.length; i < l; i++) {
if (factory.call(object, object[i], i) === false) {
break;
}
}
};
var Detector = function () {
function Detector(rules) {
_classCallCheck(this, Detector);
this.rules = rules;
}
_createClass(Detector, [{
key: '_detect',
value: function _detect(name, expression, ua) {
var expr = typeOf("Function")(expression) ? expression.call(null, ua) : expression;
if (!expr) {
return null;
}
var info = {
name: name,
version: "0",
codename: ""
};
if (expr === true) {
return info;
} else if (typeOf("String")(expr)) {
if (ua.indexOf(expr) !== -1) {
return info;
}
} else if (typeOf("Object")(expr)) {
if (expr.hasOwnProperty("version")) {
info.version = expr.version;
}
return info;
} else if (typeOf("RegExp")(expr)) {
var m = expr.exec(ua);
if (m) {
if (m.length >= 2 && m[1]) {
info.version = m[1].replace(/_/g, ".");
}
return info;
}
}
}
}, {
key: '_parseItem',
value: function _parseItem(ua, patterns, factory, detector) {
var self = this;
var detected = {
name: "na",
version: "0"
};
each(patterns, function (pattern) {
var d = self._detect(pattern[0], pattern[1], ua);
if (d) {
detected = d;
return false;
}
});
factory.call(detector, detected.name, detected.version);
}
}, {
key: 'parse',
value: function parse(ua) {
var d = {};
this._parseItem(ua, this.rules.os, function (name, version) {
var v = null;
try {
v = parseFloat(version);
} catch (e) {}
d.os = {
name: name,
version: v,
fullVersion: version
};
}, d);
ua = (ua || "").toLowerCase();
this._parseItem(ua, this.rules.browser, function (name, version) {
var mode = version;
var v = null;
try {
v = parseFloat(version);
} catch (e) {}
d.browser = {
name: name,
version: v,
fullVersion: version,
fullMode: mode
};
}, d);
return d;
}
}]);
return Detector;
}();
var browserDetector = new Detector({
os: OS,
browser: BROWSER
});
var browser = null;
if (navigator) {
var ua = navigator.userAgent + " " + navigator.appVersion + " " + navigator.vendor;
browser = browserDetector.parse(ua);
}
var exportObj = { browserDetector: browserDetector, browser: browser };
exports.default = exportObj;