Organize core.js
This commit is contained in:
parent
099847729c
commit
50604b25e6
|
@ -17,27 +17,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// toIterable is required on Edge for cross-window origin objects.
|
/*
|
||||||
function toIterable(value) {
|
* Extension information
|
||||||
if (typeof Symbol !== 'undefined' && typeof value[Symbol.iterator] !== 'undefined') {
|
*/
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value !== null && typeof value === 'object') {
|
function _extensionHasChrome() {
|
||||||
const length = value.length;
|
|
||||||
if (typeof length === 'number' && Number.isFinite(length)) {
|
|
||||||
const array = [];
|
|
||||||
for (let i = 0; i < length; ++i) {
|
|
||||||
array.push(value[i]);
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Error('Could not convert to iterable');
|
|
||||||
}
|
|
||||||
|
|
||||||
function extensionHasChrome() {
|
|
||||||
try {
|
try {
|
||||||
return typeof chrome === 'object' && chrome !== null;
|
return typeof chrome === 'object' && chrome !== null;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -45,7 +29,7 @@ function extensionHasChrome() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function extensionHasBrowser() {
|
function _extensionHasBrowser() {
|
||||||
try {
|
try {
|
||||||
return typeof browser === 'object' && browser !== null;
|
return typeof browser === 'object' && browser !== null;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -53,6 +37,21 @@ function extensionHasBrowser() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const EXTENSION_IS_BROWSER_EDGE = (
|
||||||
|
_extensionHasBrowser() &&
|
||||||
|
(!_extensionHasChrome() || (typeof chrome.runtime === 'undefined' && typeof browser.runtime !== 'undefined'))
|
||||||
|
);
|
||||||
|
|
||||||
|
if (EXTENSION_IS_BROWSER_EDGE) {
|
||||||
|
// Edge does not have chrome defined.
|
||||||
|
chrome = browser;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Error handling
|
||||||
|
*/
|
||||||
|
|
||||||
function errorToJson(error) {
|
function errorToJson(error) {
|
||||||
return {
|
return {
|
||||||
name: error.name,
|
name: error.name,
|
||||||
|
@ -86,16 +85,40 @@ function logError(error, alert) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const EXTENSION_IS_BROWSER_EDGE = (
|
|
||||||
extensionHasBrowser() &&
|
|
||||||
(!extensionHasChrome() || (typeof chrome.runtime === 'undefined' && typeof browser.runtime !== 'undefined'))
|
|
||||||
);
|
|
||||||
|
|
||||||
if (EXTENSION_IS_BROWSER_EDGE) {
|
/*
|
||||||
// Edge does not have chrome defined.
|
* Common helpers
|
||||||
chrome = browser;
|
*/
|
||||||
|
|
||||||
|
function isObject(value) {
|
||||||
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// toIterable is required on Edge for cross-window origin objects.
|
||||||
|
function toIterable(value) {
|
||||||
|
if (typeof Symbol !== 'undefined' && typeof value[Symbol.iterator] !== 'undefined') {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value !== null && typeof value === 'object') {
|
||||||
|
const length = value.length;
|
||||||
|
if (typeof length === 'number' && Number.isFinite(length)) {
|
||||||
|
const array = [];
|
||||||
|
for (let i = 0; i < length; ++i) {
|
||||||
|
array.push(value[i]);
|
||||||
|
}
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error('Could not convert to iterable');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Async utilities
|
||||||
|
*/
|
||||||
|
|
||||||
function promiseTimeout(delay, resolveValue) {
|
function promiseTimeout(delay, resolveValue) {
|
||||||
if (delay <= 0) {
|
if (delay <= 0) {
|
||||||
return Promise.resolve(resolveValue);
|
return Promise.resolve(resolveValue);
|
||||||
|
@ -148,7 +171,3 @@ function stringReplaceAsync(str, regex, replacer) {
|
||||||
parts.push(str.substring(index));
|
parts.push(str.substring(index));
|
||||||
return Promise.all(parts).then(v => v.join(''));
|
return Promise.all(parts).then(v => v.join(''));
|
||||||
}
|
}
|
||||||
|
|
||||||
function isObject(value) {
|
|
||||||
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user