mirror of
https://github.com/lancedikson/bowser
synced 2026-03-02 03:40:27 +00:00
Add a bit of docs
This commit is contained in:
194
docs/utils.js.html
Normal file
194
docs/utils.js.html
Normal file
@@ -0,0 +1,194 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>utils.js - Documentation</title>
|
||||
|
||||
<script src="scripts/prettify/prettify.js"></script>
|
||||
<script src="scripts/prettify/lang-css.js"></script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
|
||||
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
|
||||
<label for="nav-trigger" class="navicon-button x">
|
||||
<div class="navicon"></div>
|
||||
</label>
|
||||
|
||||
<label for="nav-trigger" class="overlay"></label>
|
||||
|
||||
<nav>
|
||||
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Bowser.html">Bowser</a><ul class='methods'><li data-type='method'><a href="Bowser.html#.getParser">getParser</a></li><li data-type='method'><a href="Bowser.html#.parse">parse</a></li></ul></li><li><a href="Parser.html">Parser</a><ul class='methods'><li data-type='method'><a href="Parser.html#compare">compare</a></li><li data-type='method'><a href="Parser.html#getBrowser">getBrowser</a></li><li data-type='method'><a href="Parser.html#getBrowserName">getBrowserName</a></li><li data-type='method'><a href="Parser.html#getBrowserVersion">getBrowserVersion</a></li><li data-type='method'><a href="Parser.html#getEngine">getEngine</a></li><li data-type='method'><a href="Parser.html#getOS">getOS</a></li><li data-type='method'><a href="Parser.html#getOSName">getOSName</a></li><li data-type='method'><a href="Parser.html#getOSVersion">getOSVersion</a></li><li data-type='method'><a href="Parser.html#getPlatform">getPlatform</a></li><li data-type='method'><a href="Parser.html#getPlatformType">getPlatformType</a></li><li data-type='method'><a href="Parser.html#getResult">getResult</a></li><li data-type='method'><a href="Parser.html#getUA">getUA</a></li><li data-type='method'><a href="Parser.html#is">is</a></li><li data-type='method'><a href="Parser.html#parse">parse</a></li><li data-type='method'><a href="Parser.html#parseBrowser">parseBrowser</a></li><li data-type='method'><a href="Parser.html#parseEngine">parseEngine</a></li><li data-type='method'><a href="Parser.html#parseOS">parseOS</a></li><li data-type='method'><a href="Parser.html#parsePlatform">parsePlatform</a></li><li data-type='method'><a href="Parser.html#test">test</a></li></ul></li></ul><h3><a href="global.html">Global</a></h3>
|
||||
</nav>
|
||||
|
||||
<div id="main">
|
||||
|
||||
<h1 class="page-title">utils.js</h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<section>
|
||||
<article>
|
||||
<pre class="prettyprint source linenums"><code>class Utils {
|
||||
/**
|
||||
* Get first matched item for a string
|
||||
* @param {RegExp} regexp
|
||||
* @param {String} ua
|
||||
* @return {Array|{index: number, input: string}|*|boolean|string}
|
||||
*/
|
||||
static getFirstMatch(regexp, ua) {
|
||||
const match = ua.match(regexp);
|
||||
return (match && match.length > 0 && match[1]) || '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get second matched item for a string
|
||||
* @param regexp
|
||||
* @param {String} ua
|
||||
* @return {Array|{index: number, input: string}|*|boolean|string}
|
||||
*/
|
||||
static getSecondMatch(regexp, ua) {
|
||||
const match = ua.match(regexp);
|
||||
return (match && match.length > 1 && match[2]) || '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Match a regexp and return a constant or undefined
|
||||
* @param {RegExp} regexp
|
||||
* @param {String} ua
|
||||
* @param {*} _const Any const that will be returned if regexp matches the string
|
||||
* @return {*}
|
||||
*/
|
||||
static matchAndReturnConst(regexp, ua, _const) {
|
||||
if (regexp.test(ua)) {
|
||||
return _const;
|
||||
}
|
||||
return void (0);
|
||||
}
|
||||
|
||||
static getWindowsVersionName(version) {
|
||||
switch (version) {
|
||||
case 'NT': return 'NT';
|
||||
case 'XP': return 'XP';
|
||||
case 'NT 5.0': return '2000';
|
||||
case 'NT 5.1': return 'XP';
|
||||
case 'NT 5.2': return '2003';
|
||||
case 'NT 6.0': return 'Vista';
|
||||
case 'NT 6.1': return '7';
|
||||
case 'NT 6.2': return '8';
|
||||
case 'NT 6.3': return '8.1';
|
||||
case 'NT 10.0': return '10';
|
||||
default: return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get version precisions count
|
||||
*
|
||||
* @example
|
||||
* getVersionPrecision("1.10.3") // 3
|
||||
*
|
||||
* @param {string} version
|
||||
* @return {number}
|
||||
*/
|
||||
static getVersionPrecision(version) {
|
||||
return version.split('.').length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate browser version weight
|
||||
*
|
||||
* @example
|
||||
* compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1
|
||||
* compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1
|
||||
* compareVersions(['1.10.2.1', '1.10.2.1']); // 0
|
||||
* compareVersions(['1.10.2.1', '1.0800.2']); // -1
|
||||
*
|
||||
* @param {String} versionA versions versions to compare
|
||||
* @param {String} versionB versions versions to compare
|
||||
* @return {Number} comparison result: -1 when versionA is lower,
|
||||
* 1 when versionA is bigger, 0 when both equal
|
||||
*/
|
||||
static compareVersions(versionA, versionB) {
|
||||
// 1) get common precision for both versions, for example for "10.0" and "9" it should be 2
|
||||
let precision = Math.max(
|
||||
Utils.getVersionPrecision(versionA),
|
||||
Utils.getVersionPrecision(versionB),
|
||||
);
|
||||
|
||||
const chunks = Utils.map([versionA, versionB], (version) => {
|
||||
const delta = precision - Utils.getVersionPrecision(version);
|
||||
|
||||
// 2) "9" -> "9.0" (for precision = 2)
|
||||
const _version = version + new Array(delta + 1).join('.0');
|
||||
|
||||
// 3) "9.0" -> ["000000000"", "000000009"]
|
||||
return Utils.map(_version.split('.'), chunk => new Array(20 - chunk.length).join('0') + chunk).reverse();
|
||||
});
|
||||
|
||||
// iterate in reverse order by reversed chunks array
|
||||
precision -= 1;
|
||||
while (precision >= 0) {
|
||||
// 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true)
|
||||
if (chunks[0][precision] > chunks[1][precision]) {
|
||||
return 1;
|
||||
} else if (chunks[0][precision] === chunks[1][precision]) {
|
||||
if (precision === 0) {
|
||||
// all version chunks are same
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
precision -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Array::map polyfill
|
||||
*
|
||||
* @param {Array} arr
|
||||
* @param {Function} iterator
|
||||
* @return {Array}
|
||||
*/
|
||||
static map(arr, iterator) {
|
||||
const result = [];
|
||||
let i;
|
||||
if (Array.prototype.map) {
|
||||
return Array.prototype.map.call(arr, iterator);
|
||||
}
|
||||
for (i = 0; i < arr.length; i += 1) {
|
||||
result.push(iterator(arr[i]));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Utils;
|
||||
</code></pre>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<br class="clear">
|
||||
|
||||
<footer>
|
||||
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Jul 05 2018 22:44:07 GMT+0300 (EEST) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
||||
</footer>
|
||||
|
||||
<script>prettyPrint();</script>
|
||||
<script src="scripts/linenumber.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user