diff --git a/core/block_dragger.js b/core/block_dragger.js index eca2cfbec..9b6110f6b 100644 --- a/core/block_dragger.js +++ b/core/block_dragger.js @@ -26,6 +26,7 @@ goog.provide('Blockly.BlockDragger'); goog.require('Blockly.blockAnimations'); goog.require('Blockly.Events'); goog.require('Blockly.Events.BlockMove'); +goog.require('Blockly.Events.Ui'); goog.require('Blockly.InsertionMarkerManager'); goog.require('Blockly.utils.Coordinate'); goog.require('Blockly.utils.dom'); @@ -147,6 +148,7 @@ Blockly.BlockDragger.prototype.startBlockDrag = function(currentDragDeltaXY, if (!Blockly.Events.getGroup()) { Blockly.Events.setGroup(true); } + this.fireDragStartEvent_(); // Mutators don't have the same type of z-ordering as the normal workspace // during a drag. They have to rely on the order of the blocks in the SVG. @@ -186,6 +188,16 @@ Blockly.BlockDragger.prototype.startBlockDrag = function(currentDragDeltaXY, } }; +/** + * Fire a UI event at the start of a block drag. + * @private + */ +Blockly.BlockDragger.prototype.fireDragStartEvent_ = function() { + var event = new Blockly.Events.Ui(this.draggingBlock_, 'dragStart', + null, this.draggingBlock_.getDescendants(false)); + Blockly.Events.fire(event); +}; + /** * Execute a step of block dragging, based on the given event. Update the * display accordingly. @@ -218,7 +230,8 @@ Blockly.BlockDragger.prototype.endBlockDrag = function(e, currentDragDeltaXY) { // Make sure internal state is fresh. this.dragBlock(e, currentDragDeltaXY); this.dragIconData_ = []; - + this.fireDragEndEvent_(); + Blockly.utils.dom.stopTextWidthCache(); Blockly.blockAnimations.disconnectUiStop(); @@ -252,6 +265,16 @@ Blockly.BlockDragger.prototype.endBlockDrag = function(e, currentDragDeltaXY) { Blockly.Events.setGroup(false); }; +/** + * Fire a UI event at the end of a block drag. + * @private + */ +Blockly.BlockDragger.prototype.fireDragEndEvent_ = function() { + var event = new Blockly.Events.Ui(this.draggingBlock_, 'dragStop', + this.draggingBlock_.getDescendants(false), null); + Blockly.Events.fire(event); +}; + /** * Fire a move event at the end of a block drag. * @private