From 617c75962ba9c6fe56b137f442484cffa0a048c2 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sun, 3 Jun 2018 13:37:38 +0200 Subject: [PATCH] Refactor copy and paste commands --- src/commands/index.js | 40 +++-------------------------- src/commands/view/CopyComponent.js | 10 ++++++++ src/commands/view/PasteComponent.js | 30 ++++++++++++++++++++++ 3 files changed, 43 insertions(+), 37 deletions(-) create mode 100644 src/commands/view/CopyComponent.js create mode 100644 src/commands/view/PasteComponent.js diff --git a/src/commands/index.js b/src/commands/index.js index 983a5ffaf..85aa09b2d 100644 --- a/src/commands/index.js +++ b/src/commands/index.js @@ -38,7 +38,7 @@ * }, * ... */ -import { isFunction, isArray, contains } from 'underscore'; +import { isFunction, isArray } from 'underscore'; module.exports = () => { let em; @@ -194,46 +194,12 @@ module.exports = () => { // Core commands defaultCommands['core:undo'] = e => e.UndoManager.undo(); defaultCommands['core:redo'] = e => e.UndoManager.redo(); + defaultCommands['core:copy'] = require('./view/CopyComponent').run; + defaultCommands['core:paste'] = require('./view/PasteComponent').run; defaultCommands['core:canvas-clear'] = e => { e.DomComponents.clear(); e.CssComposer.clear(); }; - defaultCommands['core:copy'] = ed => { - const em = ed.getModel(); - const models = [...ed.getSelectedAll()]; - - if (models.length && !ed.Canvas.isInputFocused()) { - em.set('clipboard', models); - } - }; - - defaultCommands['core:paste'] = ed => { - const em = ed.getModel(); - const clp = em.get('clipboard'); - const selected = ed.getSelected(); - - if (selected && !ed.Canvas.isInputFocused()) { - ed.getSelectedAll().forEach(comp => { - if (!comp) return; - const coll = comp.collection; - const at = coll.indexOf(comp) + 1; - const copyable = clp.filter(cop => cop.get('copyable')); - let added; - - if (contains(clp, comp) && comp.get('copyable')) { - added = coll.add(comp.clone(), { at }); - } else { - added = coll.add(copyable.map(cop => cop.clone()), { at }); - } - - added = isArray(added) ? added : [added]; - added.forEach(add => ed.trigger('component:clone', add)); - }); - - selected.emitUpdate(); - } - }; - defaultCommands['core:component-delete'] = (ed, sender, opts = {}) => { let components = opts.component || ed.getSelectedAll(); components = isArray(components) ? [...components] : [components]; diff --git a/src/commands/view/CopyComponent.js b/src/commands/view/CopyComponent.js new file mode 100644 index 000000000..4ae6262c3 --- /dev/null +++ b/src/commands/view/CopyComponent.js @@ -0,0 +1,10 @@ +module.exports = { + run(ed) { + const em = ed.getModel(); + const models = [...ed.getSelectedAll()]; + + if (models.length && !ed.Canvas.isInputFocused()) { + em.set('clipboard', models); + } + } +}; diff --git a/src/commands/view/PasteComponent.js b/src/commands/view/PasteComponent.js new file mode 100644 index 000000000..b99afa4ee --- /dev/null +++ b/src/commands/view/PasteComponent.js @@ -0,0 +1,30 @@ +import { isArray, contains } from 'underscore'; + +module.exports = { + run(ed) { + const em = ed.getModel(); + const clp = em.get('clipboard'); + const selected = ed.getSelected(); + + if (clp && selected && !ed.Canvas.isInputFocused()) { + ed.getSelectedAll().forEach(comp => { + if (!comp) return; + const coll = comp.collection; + const at = coll.indexOf(comp) + 1; + const copyable = clp.filter(cop => cop.get('copyable')); + let added; + + if (contains(clp, comp) && comp.get('copyable')) { + added = coll.add(comp.clone(), { at }); + } else { + added = coll.add(copyable.map(cop => cop.clone()), { at }); + } + + added = isArray(added) ? added : [added]; + added.forEach(add => ed.trigger('component:clone', add)); + }); + + selected.emitUpdate(); + } + } +};