diff --git a/src/block_manager/model/Block.js b/src/block_manager/model/Block.js index b66d3779d..c1dba314f 100644 --- a/src/block_manager/model/Block.js +++ b/src/block_manager/model/Block.js @@ -3,6 +3,10 @@ var Category = require('./Category'); module.exports = Backbone.Model.extend({ defaults: { + // If true, triggers an 'active' event on dropped component + activate: 0, + // If true, the dropped component will be selected + select: 0, label: '', content: '', category: '', diff --git a/src/block_manager/view/BlockView.js b/src/block_manager/view/BlockView.js index ac7a904a6..6f8f0a7f5 100644 --- a/src/block_manager/view/BlockView.js +++ b/src/block_manager/view/BlockView.js @@ -47,7 +47,27 @@ module.exports = Backbone.View.extend({ }, handleDragEnd() { - this.em.set('dragContent', ''); + const { em, model } = this; + const result = em.get('dragResult'); + + if (result) { + const oldKey = 'activeOnRender'; + const oldActive = result.get && result.get(oldKey); + + if (model.get('activate') || oldActive) { + result.trigger('active'); + result.set(oldKey, 0); + } + + if (model.get('select')) { + em.setSelected(result); + } + } + + em.set({ + dragResult: null, + dragContent: null + }); }, /** diff --git a/src/utils/Droppable.js b/src/utils/Droppable.js index 8622c7972..4d4ccb376 100644 --- a/src/utils/Droppable.js +++ b/src/utils/Droppable.js @@ -72,12 +72,7 @@ export default class Droppable { onStart: () => em.stopDefault(), onEndMove: model => { em.runDefault(); - - if (model && model.get && model.get('activeOnRender')) { - model.trigger('active'); - model.set('activeOnRender', 0); - } - + em.set('dragResult', model); model && em.trigger('canvas:drop', dt, model); }, document: canvas.getFrameEl().contentDocument