       input_cell.$el.attr 'data-cell-number', input_cell.number
       input_cell.output_cell = output_cell
 
+      # TODO cell type
       run_context = context.create_run_context [input_cell.context, {input_cell, output_cell}, create_notebook_run_context input_cell]
       eval_coffeescript_into_output_cell run_context, string
       input_cell.notebook.cell_run.push input_cell

      notebook = cell.notebook
      run_context =
        notebook: notebook
        set_code: (code) ->
          cell = add_input_cell notebook, code: code, after: run_context.output_cell
          focus_cell cell
        run: (code) ->
          cell = add_input_cell notebook, code: code, after: run_context.output_cell
          run cell
        # TODO does it make sense to use output cells here?

      cell

    # run an input cell above the current cell
    eval_coffeescript_before = (current_cell, code) ->
      cell = add_input_cell current_cell.notebook, code: code, before: current_cell
      run cell

    eval_coffeescript_after = (current_cell, code) ->
      cell = add_input_cell current_cell.notebook, code: code, after: current_cell
      run cell

