diff --git a/client/src/structs/settings/settingsscheme.js b/client/src/structs/settings/settingsscheme.js index 5d8f03f3..19f9aad6 100644 --- a/client/src/structs/settings/settingsscheme.js +++ b/client/src/structs/settings/settingsscheme.js @@ -64,8 +64,12 @@ export default class SettingsScheme { /** * An array of stripped settings categories this scheme manages. */ + get categories() { + return this.args.categories || this.args.settings || []; + } + get settings() { - return this.args.settings || []; + return this.categories; } /** @@ -82,21 +86,21 @@ export default class SettingsScheme { * @return {Boolean} */ isActive(set) { - for (let schemeCategory of this.settings) { - const category = set.categories.find(c => c.category === schemeCategory.category); + for (let schemeCategory of this.categories) { + const category = set.categories.find(c => c.id === (schemeCategory.id || schemeCategory.category)); if (!category) { - Logger.warn('SettingsScheme', `Category ${schemeCategory.category} does not exist`); + Logger.warn('SettingsScheme', `Category ${schemeCategory.id || schemeCategory.category} does not exist`); return false; } for (let schemeSetting of schemeCategory.settings) { const setting = category.settings.find(s => s.id === schemeSetting.id); if (!setting) { - Logger.warn('SettingsScheme', `Setting ${schemeCategory.category}/${schemeSetting.id} does not exist`); + Logger.warn('SettingsScheme', `Setting ${category.category}/${schemeSetting.id} does not exist`); return false; } - if (!Utils.compare(setting.value, schemeSetting.value)) return false; + if (!Utils.compare(setting.args.value, schemeSetting.value)) return false; } } diff --git a/client/src/structs/settings/settingsset.js b/client/src/structs/settings/settingsset.js index 51aaba2c..d822ea1a 100644 --- a/client/src/structs/settings/settingsset.js +++ b/client/src/structs/settings/settingsset.js @@ -372,9 +372,9 @@ export default class SettingsSet extends AsyncEventEmitter { if (!categories) return []; for (let newCategory of categories) { - const category = this.find(category => category.category === newCategory.category); + const category = this.find(category => category.id === (newCategory.id || newCategory.category)); if (!category) { - Logger.warn('SettingsCategory', `Trying to merge category ${newCategory.id}, which does not exist.`); + Logger.warn('SettingsSet', `Trying to merge category ${newCategory.id}, which does not exist.`); continue; } @@ -398,14 +398,14 @@ export default class SettingsSet extends AsyncEventEmitter { */ async merge(newSet, emit_multi = true) { let updatedSettings = []; - // const categories = newSet instanceof Array ? newSet : newSet.settings; - const categories = newSet && newSet.args ? newSet.args.settings : newSet ? newSet.settings : newSet; + const categories = newSet && newSet.args ? newSet.args.categories || newSet.args.settings : + newSet ? newSet.categories || newSet.settings : newSet; if (!categories) return []; for (let newCategory of categories) { - const category = this.find(category => category.category === newCategory.category); + const category = this.find(category => category.id === (newCategory.id || newCategory.category)); if (!category) { - Logger.warn('SettingsCategory', `Trying to merge category ${newCategory.id}, which does not exist.`); + Logger.warn('SettingsSet', `Trying to merge category ${newCategory.id}, which does not exist.`); continue; } diff --git a/client/src/structs/settings/types/array.js b/client/src/structs/settings/types/array.js index 11fcd6b4..a4095025 100644 --- a/client/src/structs/settings/types/array.js +++ b/client/src/structs/settings/types/array.js @@ -21,7 +21,7 @@ export default class ArraySetting extends Setting { constructor(args, ...merge) { super(args, ...merge); - this.args.settings = this.settings.map(category => new SettingsCategory(category)); + this.args.categories = this.categories.map(category => new SettingsCategory(category)); this.args.schemes = this.schemes.map(scheme => new SettingsScheme(scheme)); this.args.items = this.value ? this.value.map(item => this.createItem(item.args || item)) : []; @@ -143,7 +143,7 @@ export default class ArraySetting extends Setting { const set = new SettingsSet({ id: item ? item.args ? item.args.id : item.id : Math.random(), - settings: Utils.deepclone(this.settings), + categories: this.categories.map(c => c.clone()), schemes: this.schemes }, item ? item.args || item : undefined); diff --git a/tests/ext/themes/Example/config.json b/tests/ext/themes/Example/config.json index 2cb7cf59..2e657e4a 100644 --- a/tests/ext/themes/Example/config.json +++ b/tests/ext/themes/Example/config.json @@ -143,7 +143,7 @@ "max": 100, "step": 1, "unit": "%", - "multi": "0.01", + "multi": 0.01, "text": "Span border opacity", "hint": "test" }, @@ -246,9 +246,9 @@ "name": "Test scheme", "hint": "Sets the span border opacity to 1%.", "icon_path": "scheme-icon.jpg", - "settings": [ + "categories": [ { - "category": "default", + "id": "default", "settings": [ { "id": "spanOpacity", @@ -263,9 +263,9 @@ "name": "Another test scheme", "hint": "Sets the primary colour to red and the span border opacity to 99%.", "icon_path": "scheme-icon.jpg", - "settings": [ + "categories": [ { - "category": "default", + "id": "default", "settings": [ { "id": "divBg", @@ -288,17 +288,13 @@ "name": "Final test scheme", "hint": "Sets the primary colour to transparent and the span border opacity to 50%.", "icon_path": "scheme-icon.jpg", - "settings": [ + "categories": [ { - "category": "default", + "id": "default", "settings": [ { "id": "divBg", - "type": "text", - "value": "transparent", - "text": "Primary colour", - "hint": "A colour setting type would be nice here", - "scss_raw": true + "value": "transparent" }, { "id": "spanOpacity", @@ -313,9 +309,9 @@ "name": "Reset to default background", "hint": "Better than editing user.config.json.", "icon_path": "background.jpg", - "settings": [ + "categories": [ { - "category": "default", + "id": "default", "settings": [ { "id": "relative-file-test",