     @redrawMain()
     @redrawHighlights()
 
+Editor::performFloatingOperation = (op, direction) ->
+  console.log 'performing floating operation'
+  if (op.type is 'create') is (direction is 'forward')
+    @floatingBlocks.push new FloatingBlockRecord(
+      op.block.clone()
+      op.position
+    )
+  else
+    @floatingBlocks = @floatingBlocks.filter (record) ->
+      not (record.block.stringify() is op.block.stringify() and
+           record.position.equals(op.position))
+
+class FloatingOperation
+  constructor: (@block, @position, @type) ->
+
 # On mousedown, we can hit test for floating blocks.
 hook 'mousedown', 5, (point, event, state) ->
   # If someone else has already taken this click, pass.

      (@redoStack[@redoStack.length - 1] is 'CAPTURE' and
      @getValue() isnt currentValue)
    operation = @popRedo()
    @tree.perform(operation, 'forward') unless operation is 'CAPTURE'

  @popRedo()
  @redrawMain()


    # Add the undo operation associated
    # with creating this floating block
    @pushUndo new FloatingOperation @draggingBlock, renderPoint, 'create'

    # Add this block to our list of floating blocks
    @floatingBlocks.push new FloatingBlockRecord(
