Browse Source

Start with symbol override

pull/3428/head
Artur Arseniev 5 years ago
parent
commit
401fdeb9b6
  1. 16
      src/dom_components/model/Component.js
  2. 17
      test/specs/dom_components/model/Symbols.js

16
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';

17
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', () => {

Loading…
Cancel
Save