|
|
|
@ -4,25 +4,23 @@ export default { |
|
|
|
run(ed, s, opts = {}) { |
|
|
|
const em = ed.getModel(); |
|
|
|
const clp = em.get('clipboard'); |
|
|
|
const selected = ed.getSelected(); |
|
|
|
const lastSelected = ed.getSelected(); |
|
|
|
|
|
|
|
if (clp && selected) { |
|
|
|
ed.getSelectedAll().forEach(comp => { |
|
|
|
if (!comp) return; |
|
|
|
|
|
|
|
const coll = comp.collection; |
|
|
|
if (!coll) return; |
|
|
|
if (clp && lastSelected) { |
|
|
|
ed.getSelectedAll().forEach(selected => { |
|
|
|
const { collection } = selected; |
|
|
|
if (!collection) return; |
|
|
|
|
|
|
|
let added; |
|
|
|
const at = coll.indexOf(comp) + 1; |
|
|
|
const at = selected.index() + 1; |
|
|
|
const addOpts = { at, action: opts.action || 'paste-component' }; |
|
|
|
const copyable = clp.filter(cop => cop.get('copyable')); |
|
|
|
const pasteable = copyable.filter(cop => ed.Components.canMove(comp.parent(), cop).result); |
|
|
|
|
|
|
|
if (contains(clp, comp) && comp.get('copyable')) { |
|
|
|
added = coll.add(comp.clone(), addOpts); |
|
|
|
if (contains(clp, selected) && selected.get('copyable')) { |
|
|
|
added = collection.add(selected.clone(), addOpts); |
|
|
|
} else { |
|
|
|
added = coll.add( |
|
|
|
const copyable = clp.filter(cop => cop.get('copyable')); |
|
|
|
const pasteable = copyable.filter(cop => ed.Components.canMove(selected.parent(), cop).result); |
|
|
|
added = collection.add( |
|
|
|
pasteable.map(cop => cop.clone()), |
|
|
|
addOpts |
|
|
|
); |
|
|
|
@ -32,7 +30,7 @@ export default { |
|
|
|
added.forEach(add => ed.trigger('component:paste', add)); |
|
|
|
}); |
|
|
|
|
|
|
|
selected.emitUpdate(); |
|
|
|
lastSelected.emitUpdate(); |
|
|
|
} |
|
|
|
}, |
|
|
|
}; |
|
|
|
|