From 39f78b2a45d307f3a40719c0db57a83e65015dac Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sat, 5 Dec 2020 19:33:32 +0100 Subject: [PATCH] Apply avoidDefaults option to Selectors --- src/dom_components/model/Component.js | 3 ++- src/selector_manager/model/Selector.js | 35 +++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/dom_components/model/Component.js b/src/dom_components/model/Component.js index 186ea2c47..b5eb513c5 100644 --- a/src/dom_components/model/Component.js +++ b/src/dom_components/model/Component.js @@ -1036,6 +1036,7 @@ const Component = Backbone.Model.extend(Styleable).extend( delete obj.attributes.class; delete obj.toolbar; delete obj.traits; + delete obj.status; if (this.em.getConfig('avoidDefaults')) { this.getChangedProps(obj); @@ -1052,7 +1053,7 @@ const Component = Backbone.Model.extend(Styleable).extend( const defaults = result(this, 'defaults'); forEach(defaults, (value, key) => { - if (['type', 'content'].indexOf(key) === -1 && obj[key] === value) { + if (['type'].indexOf(key) === -1 && obj[key] === value) { delete obj[key]; } }); diff --git a/src/selector_manager/model/Selector.js b/src/selector_manager/model/Selector.js index 8fdfeb263..5c0c03956 100644 --- a/src/selector_manager/model/Selector.js +++ b/src/selector_manager/model/Selector.js @@ -1,9 +1,11 @@ import Backbone from 'backbone'; +import { result, forEach, keys } from 'underscore'; const TYPE_CLASS = 1; const TYPE_ID = 2; +const { Model } = Backbone; -const Selector = Backbone.Model.extend( +const Selector = Model.extend( { idAttribute: 'name', @@ -43,6 +45,7 @@ const Selector = Backbone.Model.extend( ? escapeName(namePreEsc) : Selector.escapeName(namePreEsc); this.set('name', nameEsc); + this.em = config.em; }, /** @@ -64,6 +67,36 @@ const Selector = Backbone.Model.extend( } return init + (escape ? escape(name) : name); + }, + + toJSON(opts = {}) { + const { em } = this; + let obj = Model.prototype.toJSON.call(this, [opts]); + const defaults = result(this, 'defaults'); + + if (em && em.getConfig('avoidDefaults')) { + forEach(defaults, (value, key) => { + if (obj[key] === value) { + delete obj[key]; + } + }); + + if (obj.label === obj.name) { + delete obj.label; + } + + const objLen = keys(obj).length; + + if (objLen === 1 && obj.name) { + obj = obj.name; + } + + if (objLen === 2 && obj.name && obj.type) { + obj = this.getFullName(); + } + } + + return obj; } }, {