Browse Source

Start update UndoManager for multipages

pull/3411/head
Artur Arseniev 6 years ago
parent
commit
03174fe149
  1. 9
      src/pages/index.js
  2. 74
      src/undo_manager/index.js

9
src/pages/index.js

@ -30,10 +30,10 @@ export default () => {
const mainPage = !pages.length const mainPage = !pages.length
? this.add({ type: typeMain }) ? this.add({ type: typeMain })
: this.getMain(); : this.getMain();
this.select(mainPage); this.em = em;
this.select(mainPage, { silent: 1, main: 1 });
pages.on('add', (p, c, o) => em.trigger(`${evPfx}add`, p, o)); pages.on('add', (p, c, o) => em.trigger(`${evPfx}add`, p, o));
pages.on('remove', (p, c, o) => em.trigger(`${evPfx}remove`, p, o)); pages.on('remove', (p, c, o) => em.trigger(`${evPfx}remove`, p, o));
this.em = em;
return this; return this;
}, },
@ -99,11 +99,12 @@ export default () => {
* @param {String|Page} page Page or page id * @param {String|Page} page Page or page id
* @returns {this} * @returns {this}
*/ */
select(pg) { select(pg, opts = {}) {
const { em, selected } = this; const { em, selected } = this;
const page = isString(pg) ? this.get(pg) : pg; const page = isString(pg) ? this.get(pg) : pg;
this.selected = page; this.selected = page;
em && em.trigger(evPageSelect, page, selected); em.get('UndoManager').select(page.id, { ...opts, create: 1 });
!opts.silent && em.trigger(evPageSelect, page, selected);
return this; return this;
}, },

74
src/undo_manager/index.js

@ -26,6 +26,10 @@
import UndoManager from 'backbone-undo'; import UndoManager from 'backbone-undo';
export const evPfx = 'um:';
export const evSelect = `${evPfx}select`;
const typeMain = 'main';
export default () => { export default () => {
let em; let em;
let um; let um;
@ -105,9 +109,48 @@ export default () => {
); );
['undo', 'redo'].forEach(ev => um.on(ev, () => em.trigger(ev))); ['undo', 'redo'].forEach(ev => um.on(ev, () => em.trigger(ev)));
const umObj = { id: typeMain, um };
this.all = [umObj];
this.select(typeMain, { silent: 1 });
return this; return this;
}, },
/**
* Get all undo instances (eg. from all pages)
*/
getAll() {
return this.all;
},
/**
* Get undo instance by id
*/
getInst(id, opts = {}) {
return this.getAll().filter(i => i.id === id)[0];
},
addInst(id, um) {
let result = this.getInst(id);
if (!result) {
result = { id, um };
this.getAll().push(result);
}
return result;
},
select(id, opts = {}) {
const { selected } = this;
const inst = this.getInst(id);
this.selected = inst;
console.log('Select um', inst, opts);
!opts.silent && this.em.trigger(evSelect, inst, selected);
},
getSelected() {
return this.selected;
},
/** /**
* Get module configurations * Get module configurations
* @return {Object} Configuration object * @return {Object} Configuration object
@ -128,7 +171,7 @@ export default () => {
* um.add(someModelOrCollection); * um.add(someModelOrCollection);
*/ */
add(entity) { add(entity) {
um.register(entity); this._um().register(entity);
return this; return this;
}, },
@ -140,7 +183,7 @@ export default () => {
* um.remove(someModelOrCollection); * um.remove(someModelOrCollection);
*/ */
remove(entity) { remove(entity) {
um.unregister(entity); this._um().unregister(entity);
return this; return this;
}, },
@ -151,7 +194,7 @@ export default () => {
* um.removeAll(); * um.removeAll();
*/ */
removeAll() { removeAll() {
um.unregisterAll(); this._um().unregisterAll();
return this; return this;
}, },
@ -162,7 +205,7 @@ export default () => {
* um.start(); * um.start();
*/ */
start() { start() {
um.startTracking(); this._um().startTracking();
return this; return this;
}, },
@ -173,7 +216,7 @@ export default () => {
* um.stop(); * um.stop();
*/ */
stop() { stop() {
um.stopTracking(); this._um().stopTracking();
return this; return this;
}, },
@ -184,7 +227,7 @@ export default () => {
* um.undo(); * um.undo();
*/ */
undo(all = true) { undo(all = true) {
!em.isEditing() && um.undo(all); !em.isEditing() && this._um().undo(all);
return this; return this;
}, },
@ -195,7 +238,7 @@ export default () => {
* um.undoAll(); * um.undoAll();
*/ */
undoAll() { undoAll() {
um.undoAll(); this._um().undoAll();
return this; return this;
}, },
@ -206,7 +249,7 @@ export default () => {
* um.redo(); * um.redo();
*/ */
redo(all = true) { redo(all = true) {
!em.isEditing() && um.redo(all); !em.isEditing() && this._um().redo(all);
return this; return this;
}, },
@ -217,7 +260,7 @@ export default () => {
* um.redoAll(); * um.redoAll();
*/ */
redoAll() { redoAll() {
um.redoAll(); this._um().redoAll();
return this; return this;
}, },
@ -228,7 +271,7 @@ export default () => {
* um.hasUndo(); * um.hasUndo();
*/ */
hasUndo() { hasUndo() {
return um.isAvailable('undo'); return this._um().isAvailable('undo');
}, },
/** /**
@ -238,7 +281,7 @@ export default () => {
* um.hasRedo(); * um.hasRedo();
*/ */
hasRedo() { hasRedo() {
return um.isAvailable('redo'); return this._um().isAvailable('redo');
}, },
/** /**
@ -249,7 +292,7 @@ export default () => {
* stack.each(item => ...); * stack.each(item => ...);
*/ */
getStack() { getStack() {
return um.stack; return this._um().stack;
}, },
/** /**
@ -288,10 +331,14 @@ export default () => {
* um.clear(); * um.clear();
*/ */
clear() { clear() {
um.clear(); this._um().clear();
return this; return this;
}, },
_um() {
return this.getInstance();
},
getInstance() { getInstance() {
return um; return um;
}, },
@ -299,6 +346,7 @@ export default () => {
destroy() { destroy() {
this.clear().removeAll(); this.clear().removeAll();
[em, um, config, beforeCache].forEach(i => (i = {})); [em, um, config, beforeCache].forEach(i => (i = {}));
['all', 'selected'].forEach(i => (this[i] = {}));
this.em = {}; this.em = {};
} }
}; };

Loading…
Cancel
Save