Merge pull request #230 from toasted-nutbread/edge-fixes
Use toIterable for cross-window origin objects
This commit is contained in:
commit
3c3a2c9474
@ -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));
|
||||
}
|
||||
|
||||
|
@ -425,7 +425,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 = '';
|
||||
}
|
||||
@ -474,7 +474,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,
|
||||
|
@ -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() {
|
||||
|
Loading…
Reference in New Issue
Block a user