Use toIterable for cross-window origin objects

This commit is contained in:
toasted-nutbread 2019-09-29 15:26:46 -04:00
parent 8195e5109b
commit 8b7558a757
3 changed files with 17 additions and 6 deletions

View File

@ -36,7 +36,7 @@ ConditionsUI.Container = class Container {
this.container.empty();
for (const conditionGroup of conditionGroups) {
for (const conditionGroup of toIterable(conditionGroups)) {
this.children.push(new ConditionsUI.ConditionGroup(this, conditionGroup));
}
@ -122,7 +122,7 @@ ConditionsUI.ConditionGroup = class ConditionGroup {
this.separator = ConditionsUI.instantiateTemplate('#condition-group-separator-template').appendTo(parent.container);
this.addButton = this.options.find('.condition-add');
for (const condition of conditionGroup.conditions) {
for (const condition of toIterable(conditionGroup.conditions)) {
this.children.push(new ConditionsUI.Condition(this, condition));
}

View File

@ -422,7 +422,7 @@ async function onDictionaryPurge(e) {
dictionarySpinnerShow(true);
await utilDatabasePurge();
for (const options of await getOptionsArray()) {
for (const options of toIterable(await getOptionsArray())) {
options.dictionaries = utilBackgroundIsolate({});
options.general.mainDictionary = '';
}
@ -466,7 +466,7 @@ async function onDictionaryImport(e) {
const exceptions = [];
const summary = await utilDatabaseImport(e.target.files[0], updateProgress, exceptions);
for (const options of await getOptionsArray()) {
for (const options of toIterable(await getOptionsArray())) {
options.dictionaries[summary.title] = utilBackgroundIsolate({
enabled: true,
priority: 0,

View File

@ -17,13 +17,24 @@
*/
// toIterable is required on Edge for cross-window origin objects.
function toIterable(value) {
if (typeof Symbol !== 'undefined' && typeof value[Symbol.iterator] !== 'undefined') {
return value;
}
const array = JSON.parse(JSON.stringify(value));
return Array.isArray(array) ? array : [];
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 'Could not convert to iterable';
}
function extensionHasChrome() {