Fix scheme matching

This commit is contained in:
Samuel Elliott 2018-08-06 10:28:35 +01:00
parent 4b4b3c341f
commit 0e34fdaa8d
No known key found for this signature in database
GPG Key ID: 8420C7CDE43DC4D6
4 changed files with 28 additions and 28 deletions

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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",