Free and Open source Web Builder Framework. Next generation tool for building templates without coding
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

42 lines
1.2 KiB

import { isArray, contains } from 'underscore';
export default {
run(ed, s, opts = {}) {
const em = ed.getModel();
const clp = em.get('clipboard');
const selected = ed.getSelected();
const sorter = ed.BlockManager.getConfig().getSorter();
if (clp && selected) {
ed.getSelectedAll().forEach(comp => {
if (!comp) return;
const coll = comp.collection;
if (!coll) return;
let added;
const at = coll.indexOf(comp) + 1;
const addOpts = { at, action: opts.action || 'paste-component' };
const copyable = clp.filter(cop => cop.get('copyable'));
const pasteable = copyable.filter(cop => {
return sorter.validTarget(cop.getEl(), selected.getEl()).valid
|| sorter.validTarget(cop.parent()?.getEl(), selected.getEl()).valid;
});
if (contains(clp, comp) && comp.get('copyable')) {
added = coll.add(comp.clone(), addOpts);
} else {
added = coll.add(
pasteable.map(cop => cop.clone()),
addOpts
);
}
added = isArray(added) ? added : [added];
added.forEach(add => ed.trigger('component:paste', add));
});
selected.emitUpdate();
}
},
};