docs: function (e) {
  
        if (this.isDrawingMode && this._isCurrentlyDrawing) {
          this._finalizeDrawingPath();
          this.fire('mouse:up', { e: e });
          return;
        }
  
        if (this._currentTransform) {
  
          var transform = this._currentTransform,
              target = transform.target;
  
          if (target._scaling) {
            target._scaling = false;
          }
  
          // determine the new coords everytime the image changes its position
          var i = this._objects.length;
          while (i--) {
            this._objects[i].setCoords();
          }
  
          // only fire :modified event if target coordinates were changed during mousedown-mouseup
          if (this.stateful && target.hasStateChanged()) {
            target.isMoving = false;
            this.fire('object:modified', { target: target });
            target.fire('modified');
          }
        }
  
        this._currentTransform = null;
  
        if (this._groupSelector) {
          // group selection was completed, determine its bounds
          this._findSelectedObjects(e);
        }
        var activeGroup = this.getActiveGroup();
        if (activeGroup) {
          activeGroup.setObjectsCoords();
          activeGroup.set('isMoving', false);
          this._setCursor(this.defaultCursor);
        }
  
        // clear selection
        this._groupSelector = null;
        this.renderAll();
  
        this._setCursorFromEvent(e, target);
  
        // fix for FF
        this._setCursor('');
  
        var _this = this;
        setTimeout(function () {
          _this._setCursorFromEvent(e, target);
        }, 50);
  
        this.fire('mouse:up', { target: target, e: e });
        target && target.fire('mouseup', { e: e })
      }