Browse Source

Ensure UndoManager on components

pull/3411/head
Artur Arseniev 6 years ago
parent
commit
3c28507460
  1. 2
      src/canvas/model/Frame.js
  2. 22
      src/dom_components/model/Component.js
  3. 7
      src/dom_components/model/Components.js

2
src/canvas/model/Frame.js

@ -44,8 +44,6 @@ export default Model.extend({
!props.width && this.set(keyAutoW, 1); !props.width && this.set(keyAutoW, 1);
!props.height && this.set(keyAutoH, 1); !props.height && this.set(keyAutoH, 1);
this.getComponent()._initUm();
}, },
changesUp: debounce(function(opt = {}) { changesUp: debounce(function(opt = {}) {

22
src/dom_components/model/Component.js

@ -208,17 +208,31 @@ const Component = Backbone.Model.extend(Styleable).extend(
}); });
if (!opt.temporary) { if (!opt.temporary) {
this.__postAdd();
this.init(); this.init();
this.__isSymbolOrInst() && this.__initSymb(); this.__isSymbolOrInst() && this.__initSymb();
em && em.trigger('component:create', this); em && em.trigger('component:create', this);
} }
}, },
_initUm() { __postAdd(opts = {}) {
const um = this.em.get('UndoManager'); const um = this.em.get('UndoManager');
if (!um) return; const comps = this.components();
um.add(this); if (um && !this.__hasUm) {
um.add(this.components()); um.add(this);
um.add(comps);
this.__hasUm = 1;
}
opts.recursive && comps.map(c => c.__postAdd(opts));
},
__postRemove() {
const um = this.em.get('UndoManager');
if (um) {
um.remove(this);
um.remove(this.components());
delete this.__hasUm;
}
}, },
__onChange(m, opts) { __onChange(m, opts) {

7
src/dom_components/model/Components.js

@ -97,12 +97,10 @@ export default Backbone.Collection.extend({
// Remove stuff registered in DomComponents.handleChanges // Remove stuff registered in DomComponents.handleChanges
const inner = removed.components(); const inner = removed.components();
const um = em.get('UndoManager');
em.stopListening(inner); em.stopListening(inner);
em.stopListening(removed); em.stopListening(removed);
em.stopListening(removed.get('classes')); em.stopListening(removed.get('classes'));
um.remove(removed); removed.__postRemove();
um.remove(inner);
}, },
model(attrs, options) { model(attrs, options) {
@ -252,7 +250,8 @@ export default Backbone.Collection.extend({
model.setStyle({}); model.setStyle({});
model.addClass(name); model.addClass(name);
} }
model._initUm();
model.__postAdd({ recursive: 1 });
this.__onAddEnd(); this.__onAddEnd();
}, },

Loading…
Cancel
Save