/*
* Copyright (c) 2016-2017, Michael A. Updike All rights reserved.
* Licensed under Apache 2.0
* https://opensource.org/licenses/Apache-2.0
* https://github.com/opus1269/chrome-extension-utils/blob/master/LICENSE.md
*/
window.Chrome = window.Chrome || {};
/**
* Utility methods
* @namespace
*/
Chrome.Utils = (function() {
'use strict';
new ExceptionHandler();
const chromep = new ChromePromise();
/**
* Set to true if development build
* @type {boolean}
* @private
* @memberOf Chrome.Utils
*/
const _DEBUG = false;
return {
/**
* True if development build
* @type {boolean}
* @memberOf Chrome.Utils
*/
DEBUG: _DEBUG,
/** Get the extension's name
* @returns {string} Extension name
* @memberOf Chrome.Utils
*/
getExtensionName: function() {
return `chrome-extension://${chrome.runtime.id}`;
},
/**
* Get the Extension version
* @returns {string} Extension version
* @memberOf Chrome.Utils
*/
getVersion: function() {
const manifest = chrome.runtime.getManifest();
return manifest.version;
},
/**
* Get the Chrome version
* @see http://stackoverflow.com/a/4900484/4468645
* @returns {int} Chrome major version
* @memberOf Chrome.Utils
*/
getChromeVersion: function() {
const raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
return raw ? parseInt(raw[2], 10) : false;
},
/**
* Get the full Chrome version
* @see https://goo.gl/2ITMNO
* @returns {string} Chrome version
* @memberOf Chrome.Utils
*/
getFullChromeVersion: function() {
const raw = navigator.userAgent;
return raw ? raw : 'Unknown';
},
/**
* Get the OS as a human readable string
* @returns {Promise.<string>} OS name
* @memberOf Chrome.Utils
*/
getPlatformOS: function() {
return chromep.runtime.getPlatformInfo().then((info) => {
let output = 'Unknown';
const os = info.os;
switch (os) {
case 'win':
output = 'MS Windows';
break;
case 'mac':
output = 'Mac';
break;
case 'android':
output = 'Android';
break;
case 'cros':
output = 'Chrome OS';
break;
case 'linux':
output = 'Linux';
break;
case 'openbsd':
output = 'OpenBSD';
break;
default:
break;
}
return Promise.resolve(output);
});
},
/**
* Determine if we are MS windows
* @returns {Promise.<boolean>} true if MS Windows
* @memberOf Chrome.Utils
*/
isWindows: function() {
return chromep.runtime.getPlatformInfo().then((info) => {
return Promise.resolve((info.os === 'win'));
});
},
/**
* Determine if we are Chrome OS
* @returns {Promise.<boolean>} true if ChromeOS
* @memberOf Chrome.Utils
*/
isChromeOS: function() {
return chromep.runtime.getPlatformInfo().then((info) => {
return Promise.resolve((info.os === 'cros'));
});
},
/**
* Determine if we are a Mac
* @returns {Promise.<boolean>} true if Mac
* @memberOf Chrome.Utils
*/
isMac: function() {
return chromep.runtime.getPlatformInfo().then((info) => {
return Promise.resolve((info.os === 'mac'));
});
},
/**
* No operation
* @memberOf Chrome.Utils
*/
noop: function() {},
/**
* Determine if a String is null or whitespace only
* @param {?string} str - string to check
* @returns {boolean} true is str is whitespace or null
* @memberOf Chrome.Utils
*/
isWhiteSpace: function(str) {
return (!str || str.length === 0 || /^\s*$/.test(str));
},
/**
* Get a random string of the given length
* @param {int} [len=8] - length of generated string
* @returns {string} a random string
* @memberOf Chrome.Utils
*/
getRandomString: function(len = 8) {
const POSS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
'abcdefghijklmnopqrstuvwxyz0123456789';
let text = '';
for (let i = 0; i < len; i++) {
text +=
POSS.charAt(Math.floor(Math.random() * POSS.length));
}
return text;
},
/**
* Returns a random integer between min and max inclusive
* @param {int} min - min value
* @param {int} max - max value
* @returns {int} random int
* @memberOf Chrome.Utils
*/
getRandomInt: function(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
},
/**
* Randomly sort an Array in place
* Fisher-Yates shuffle algorithm.
* @param {Array} array - Array to sort
* @memberOf Chrome.Utils
*/
shuffleArray: function(array) {
const len = array ? array.length : 0;
for (let i = len - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
const temp = array[i];
array[i] = array[j];
array[j] = temp;
}
},
};
})();