Added cell level cut/copy/paste.

This commit is contained in:
Brian Granger 2012-01-12 15:11:03 -08:00 committed by MinRK
parent 0051dd3bda
commit ccc5aa04b2
3 changed files with 98 additions and 2 deletions

View File

@ -61,6 +61,12 @@ var IPython = (function (IPython) {
IPython.print_widget.print_notebook();
});
// Edit
this.element.find('#cut_cell').click(function () {
IPython.notebook.cut_cell();
});
this.element.find('#copy_cell').click(function () {
IPython.notebook.copy_cell();
});
this.element.find('#delete_cell').click(function () {
IPython.notebook.delete_cell();
});

View File

@ -20,6 +20,7 @@ var IPython = (function (IPython) {
this.element.data("notebook", this);
this.next_prompt_number = 1;
this.kernel = null;
this.clipboard = null;
this.dirty = false;
this.msg_cell_map = {};
this.metadata = {};
@ -321,7 +322,6 @@ var IPython = (function (IPython) {
// Cell insertion, deletion and moving.
Notebook.prototype.delete_cell = function (index) {
var i = index || this.selected_index();
if (i !== null && i >= 0 && i < this.ncells()) {
@ -563,6 +563,91 @@ var IPython = (function (IPython) {
};
// Copy/Paste
Notebook.prototype.enable_paste = function () {
var that = this;
$('#paste_cell').removeClass('ui-state-disabled')
.on('click', function () {that.paste_cell();});
$('#paste_cell_above').removeClass('ui-state-disabled')
.on('click', function () {that.paste_cell_above();});
$('#paste_cell_below').removeClass('ui-state-disabled')
.on('click', function () {that.paste_cell_below();});
};
Notebook.prototype.disable_paste = function () {
$('#paste_cell').addClass('ui-state-disabled').off('click');
$('#paste_cell_above').addClass('ui-state-disabled').off('click');
$('#paste_cell_below').addClass('ui-state-disabled').off('click');
};
Notebook.prototype.cut_cell = function () {
this.copy_cell();
this.delete_cell();
}
Notebook.prototype.copy_cell = function () {
var cell = this.selected_cell();
this.clipboard = cell.toJSON();
this.enable_paste();
};
Notebook.prototype.paste_cell = function () {
if (this.clipboard !== null) {
var cell_data = this.clipboard;
if (cell_data.cell_type == 'code') {
new_cell = this.insert_code_cell_above();
new_cell.fromJSON(cell_data);
} else if (cell_data.cell_type === 'html') {
new_cell = this.insert_html_cell_above();
new_cell.fromJSON(cell_data);
} else if (cell_data.cell_type === 'markdown') {
new_cell = this.insert_markdown_cell_above();
new_cell.fromJSON(cell_data);
};
};
this.select_next();
this.delete_cell();
};
Notebook.prototype.paste_cell_above = function () {
if (this.clipboard !== null) {
var cell_data = this.clipboard;
if (cell_data.cell_type == 'code') {
new_cell = this.insert_code_cell_above();
new_cell.fromJSON(cell_data);
} else if (cell_data.cell_type === 'html') {
new_cell = this.insert_html_cell_above();
new_cell.fromJSON(cell_data);
} else if (cell_data.cell_type === 'markdown') {
new_cell = this.insert_markdown_cell_above();
new_cell.fromJSON(cell_data);
};
};
};
Notebook.prototype.paste_cell_below = function () {
if (this.clipboard !== null) {
var cell_data = this.clipboard;
if (cell_data.cell_type == 'code') {
new_cell = this.insert_code_cell_above();
new_cell.fromJSON(cell_data);
} else if (cell_data.cell_type === 'html') {
new_cell = this.insert_html_cell_above();
new_cell.fromJSON(cell_data);
} else if (cell_data.cell_type === 'markdown') {
new_cell = this.insert_markdown_cell_above();
new_cell.fromJSON(cell_data);
};
};
};
// Cell collapsing and output clearing
Notebook.prototype.collapse = function (index) {

View File

@ -84,6 +84,11 @@
</li>
<li><a href="#">Edit</a>
<ul>
<li id="cut_cell"><a href="#">Cut</a></li>
<li id="copy_cell"><a href="#">Copy</a></li>
<li id="paste_cell" class="ui-state-disabled"><a href="#">Paste</a></li>
<li id="paste_cell_above" class="ui-state-disabled"><a href="#">Paste Above</a></li>
<li id="paste_cell_below" class="ui-state-disabled"><a href="#">Paste Below</a></li>
<li id="delete_cell"><a href="#">Delete</a></li>
<hr/>
<li id="move_cell_up"><a href="#">Move Cell Up</a></li>