From 401fdeb9b6630ed3d609dab437d1dc1a114a17b0 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Fri, 30 Apr 2021 20:50:39 +0200 Subject: [PATCH] Start with symbol override --- src/dom_components/model/Component.js | 16 +++++++++++++--- test/specs/dom_components/model/Symbols.js | 17 ++++++++++++++++- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/dom_components/model/Component.js b/src/dom_components/model/Component.js index e2e22898a..f4d29e3c0 100644 --- a/src/dom_components/model/Component.js +++ b/src/dom_components/model/Component.js @@ -29,7 +29,7 @@ const avoidInline = em => em && em.getConfig('avoidInlineStyle'); export const eventDrag = 'component:drag'; export const keySymbols = '__symbols'; export const keySymbol = '__symbol'; -export const keySymbol2w = '__symbol2w'; +export const keySymbolOvrd = '__symbol_ovrd'; export const keyUpdate = 'component:update'; export const keyUpdateInside = `${keyUpdate}-inside`; @@ -127,6 +127,7 @@ const Component = Backbone.Model.extend(Styleable).extend( toolbar: null, [keySymbol]: 0, [keySymbols]: 0, + [keySymbolOvrd]: 0, _undo: true, _undoexc: ['status', 'open'] }, @@ -733,6 +734,11 @@ const Component = Backbone.Model.extend(Styleable).extend( return symbs; }, + __isSymbOvrd(prop) { + const ovrd = this.get(keySymbolOvrd); + return ovrd === true || (isArray(ovrd) && ovrd.indexOf(prop) >= 0); + }, + __getSymbToUp(opts = {}) { let result = []; const { em } = this; @@ -773,11 +779,16 @@ const Component = Backbone.Model.extend(Styleable).extend( delete changed.open; delete changed[keySymbols]; delete changed[keySymbol]; + delete changed[keySymbolOvrd]; delete changed.attributes; delete attrs.id; if (!isEmptyObj(attrs)) changed.attributes = attrs; if (!isEmptyObj(changed)) { const toUp = this.__getSymbToUp(opts); + keys(changed).map(prop => { + if (this.__isSymbOvrd(prop)) delete changed[prop]; + }); + this.__logSymbol('props', toUp, { opts, changed }); toUp.forEach(child => child.set(changed, { fromInstance: this, ...opts }) @@ -803,7 +814,7 @@ const Component = Backbone.Model.extend(Styleable).extend( if (!o) { const toUp = this.__getSymbToUp(toUpOpts); - this.__logSymbol('reset', toUp); + this.__logSymbol('reset', toUp, { components: m.models }); toUp.forEach(symb => { const newMods = m.models.map(mod => mod.clone({ symbol: 1 })); symb.components().reset(newMods, { fromInstance: this, ...c }); @@ -1283,7 +1294,6 @@ const Component = Backbone.Model.extend(Styleable).extend( [this, cloned].map(i => i.__initSymb()); this.set(keySymbol, cloned); } - // opt.symbol2w && cloned.set(keySymbol2w, 1); } const event = 'component:clone'; diff --git a/test/specs/dom_components/model/Symbols.js b/test/specs/dom_components/model/Symbols.js index f654a864b..596462e10 100644 --- a/test/specs/dom_components/model/Symbols.js +++ b/test/specs/dom_components/model/Symbols.js @@ -1,5 +1,9 @@ import Editor from 'editor'; -import { keySymbol, keySymbols } from 'dom_components/model/Component'; +import { + keySymbol, + keySymbols, + keySymbolOvrd +} from 'dom_components/model/Component'; describe('Symbols', () => { let editor; @@ -381,6 +385,17 @@ describe('Symbols', () => { const innerSymb = allInst.map(i => getInnerComp(i, 1)); expect(clonedSymb.__getSymbols()).toEqual(innerSymb); }); + + describe.only('Symbols override', () => { + test('Symbol is not propagating data if override is set', () => { + const propKey = 'someprop'; + const propValue = 'somevalue'; + symbol.set(keySymbolOvrd, true); + symbol.set(propKey, propValue); + // symbol.set(propKey, propValue); + allInst.forEach(cmp => expect(cmp.get(propKey)).toBeFalsy()); + }); + }); }); describe('Nested symbols', () => {