Internal refactor: new helper methods to check for string & window

This commit is contained in:
Faisal Salman 2023-10-26 11:41:06 +07:00
parent 26f7e7d59e
commit 7ad3e3b451

View File

@ -19,7 +19,6 @@
// Constants // Constants
///////////// /////////////
var LIBVERSION = '2.0.0-beta.1', var LIBVERSION = '2.0.0-beta.1',
EMPTY = '', EMPTY = '',
UNKNOWN = '?', UNKNOWN = '?',
@ -89,7 +88,8 @@
SOGOU = 'Sogou', SOGOU = 'Sogou',
WINDOWS = 'Windows'; WINDOWS = 'Windows';
var NAVIGATOR = (typeof window !== UNDEF_TYPE && window.navigator) ? var isWindow = typeof window !== UNDEF_TYPE,
NAVIGATOR = (isWindow && window.navigator) ?
window.navigator : window.navigator :
undefined, undefined,
NAVIGATOR_UADATA = (NAVIGATOR && NAVIGATOR.userAgentData) ? NAVIGATOR_UADATA = (NAVIGATOR && NAVIGATOR.userAgentData) ?
@ -121,13 +121,16 @@
} }
return false; return false;
} }
return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false; return isString(str1) ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;
}, },
isExtensions = function (obj) { isExtensions = function (obj) {
for (var prop in obj) { for (var prop in obj) {
return /^(browser|cpu|device|engine|os)$/.test(prop); return /^(browser|cpu|device|engine|os)$/.test(prop);
} }
}, },
isString = function (val) {
return typeof val === STR_TYPE;
},
itemListToArray = function (header) { itemListToArray = function (header) {
if (!header) return undefined; if (!header) return undefined;
var arr = []; var arr = [];
@ -143,10 +146,10 @@
return arr; return arr;
}, },
lowerize = function (str) { lowerize = function (str) {
return typeof(str) === STR_TYPE ? str.toLowerCase() : str; return isString(str) ? str.toLowerCase() : str;
}, },
majorize = function (version) { majorize = function (version) {
return typeof(version) === STR_TYPE ? strip(/[^\d\.]/g, version).split('.')[0] : undefined; return isString(version) ? strip(/[^\d\.]/g, version).split('.')[0] : undefined;
}, },
setProps = function (arr) { setProps = function (arr) {
for (var i in arr) { for (var i in arr) {
@ -160,15 +163,15 @@
return this; return this;
}, },
strip = function (pattern, str) { strip = function (pattern, str) {
return str.replace(pattern, EMPTY); return isString(str) ? str.replace(pattern, EMPTY) : str;
}, },
stripQuotes = function (val) { stripQuotes = function (str) {
return typeof val === STR_TYPE ? strip(/\\?\"/g, val) : val; return strip(/\\?\"/g, str);
}, },
trim = function (str, len) { trim = function (str, len) {
if (typeof(str) === STR_TYPE) { if (isString(str)) {
str = strip(/^\s\s*/, str); str = strip(/^\s\s*/, str);
return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH); return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);
} }
}; };
@ -1191,7 +1194,7 @@
['getResult', createItemFunc(UA_RESULT)], ['getResult', createItemFunc(UA_RESULT)],
['getUA', function () { return userAgent; }], ['getUA', function () { return userAgent; }],
['setUA', function (ua) { ['setUA', function (ua) {
if (typeof ua === STR_TYPE) if (isString(ua))
userAgent = ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua; userAgent = ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua;
return this; return this;
}] }]
@ -1212,7 +1215,7 @@
////////// //////////
// check js environment // check js environment
if (typeof(exports) !== UNDEF_TYPE) { if (typeof exports !== UNDEF_TYPE) {
// nodejs env // nodejs env
if (typeof module !== UNDEF_TYPE && module.exports) { if (typeof module !== UNDEF_TYPE && module.exports) {
exports = module.exports = UAParser; exports = module.exports = UAParser;
@ -1220,11 +1223,11 @@
exports.UAParser = UAParser; exports.UAParser = UAParser;
} else { } else {
// requirejs env (optional) // requirejs env (optional)
if (typeof(define) === FUNC_TYPE && define.amd) { if (typeof define === FUNC_TYPE && define.amd) {
define(function () { define(function () {
return UAParser; return UAParser;
}); });
} else if (typeof window !== UNDEF_TYPE) { } else if (isWindow) {
// browser env // browser env
window.UAParser = UAParser; window.UAParser = UAParser;
} }
@ -1235,7 +1238,7 @@
// In AMD env the global scope should be kept clean, but jQuery is an exception. // In AMD env the global scope should be kept clean, but jQuery is an exception.
// jQuery always exports to global scope, unless jQuery.noConflict(true) is used, // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,
// and we should catch that. // and we should catch that.
var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto); var $ = isWindow && (window.jQuery || window.Zepto);
if ($ && !$.ua) { if ($ && !$.ua) {
var parser = new UAParser(); var parser = new UAParser();
$.ua = parser.getResult(); $.ua = parser.getResult();