Skip to content

Commit

Permalink
Merge pull request ipython#5268 from ellisonbg/cmd-mode
Browse files Browse the repository at this point in the history
Refactoring Notebook.command_mode
  • Loading branch information
ellisonbg committed Mar 6, 2014
2 parents 3ebcfbf + a0c5298 commit 631cef1
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 43 deletions.
2 changes: 0 additions & 2 deletions IPython/html/static/notebook/js/keyboardmanager.js
Expand Up @@ -84,7 +84,6 @@ var IPython = (function (IPython) {
help_index : 'aa',
handler : function (event) {
IPython.notebook.command_mode();
IPython.notebook.focus_cell();
return false;
}
},
Expand All @@ -93,7 +92,6 @@ var IPython = (function (IPython) {
help_index : 'ab',
handler : function (event) {
IPython.notebook.command_mode();
IPython.notebook.focus_cell();
return false;
}
},
Expand Down
87 changes: 46 additions & 41 deletions IPython/html/static/notebook/js/notebook.js
Expand Up @@ -120,11 +120,11 @@ var IPython = (function (IPython) {
});

$([IPython.events]).on('edit_mode.Cell', function (event, data) {
that.handle_edit_mode(that.find_cell_index(data.cell));
that.handle_edit_mode(data.cell);
});

$([IPython.events]).on('command_mode.Cell', function (event, data) {
that.command_mode();
that.handle_command_mode(data.cell);
});

$([IPython.events]).on('status_autorestarting.Kernel', function () {
Expand Down Expand Up @@ -461,6 +461,11 @@ var IPython = (function (IPython) {
if (this.is_valid_cell_index(index)) {
var sindex = this.get_selected_index();
if (sindex !== null && index !== sindex) {
// If we are about to select a different cell, make sure we are
// first in command mode.
if (this.mode !== 'command') {
this.command_mode();
}
this.get_cell(sindex).unselect();
}
var cell = this.get_cell(index);
Expand Down Expand Up @@ -523,41 +528,43 @@ var IPython = (function (IPython) {
};

/**
* Make the notebook enter command mode.
* Handle when a a cell blurs and the notebook should enter command mode.
*
* @method command_mode
* @method handle_command_mode
* @param [cell] {Cell} Cell to enter command mode on.
**/
Notebook.prototype.command_mode = function () {
// Make sure there isn't an edit mode cell lingering around.
var cell = this.get_cell(this.get_edit_index());
if (cell) {
cell.command_mode();
}

// Notify the keyboard manager if this is a change of mode for the
// notebook as a whole.
Notebook.prototype.handle_command_mode = function (cell) {
if (this.mode !== 'command') {
cell.command_mode();
this.mode = 'command';
$([IPython.events]).trigger('command_mode.Notebook');
IPython.keyboard_manager.command_mode();
}
};

/**
* Make the notebook enter command mode.
*
* @method command_mode
**/
Notebook.prototype.command_mode = function () {
var cell = this.get_cell(this.get_edit_index());
if (cell && this.mode !== 'command') {
// We don't call cell.command_mode, but rather call cell.focus_cell()
// which will blur and CM editor and trigger the call to
// handle_command_mode.
cell.focus_cell();
}
};

/**
* Handle when a cell fires it's edit_mode event.
*
* @method handle_edit_mode
* @param [index] {int} Cell index to select. If no index is provided,
* the current selected cell is used.
* @param [cell] {Cell} Cell to enter edit mode on.
**/
Notebook.prototype.handle_edit_mode = function (index) {
// Make sure the cell exists.
var cell = this.get_cell(index);
if (cell === null) { return; }

// Set the cell to edit mode and notify the keyboard manager if this
// is a change of mode for the notebook as a whole.
if (this.mode !== 'edit') {
Notebook.prototype.handle_edit_mode = function (cell) {
if (cell && this.mode !== 'edit') {
cell.edit_mode();
this.mode = 'edit';
$([IPython.events]).trigger('edit_mode.Notebook');
Expand All @@ -569,17 +576,10 @@ var IPython = (function (IPython) {
* Make a cell enter edit mode.
*
* @method edit_mode
* @param [index] {int} Cell index to select. If no index is provided,
* the current selected cell is used.
**/
Notebook.prototype.edit_mode = function (index) {
if (index===undefined) {
index = this.get_selected_index();
}
// Make sure the cell exists.
var cell = this.get_cell(index);
if (cell === null) { return; }
if (cell.mode != 'edit') {
Notebook.prototype.edit_mode = function () {
var cell = this.get_selected_cell();
if (cell && this.mode !== 'edit') {
cell.unrender();
cell.focus_editor();
}
Expand Down Expand Up @@ -1453,7 +1453,6 @@ var IPython = (function (IPython) {
var cell_index = this.find_cell_index(cell);

cell.execute();
cell.focus_cell();
this.command_mode();
this.set_dirty(true);
};
Expand All @@ -1471,15 +1470,19 @@ var IPython = (function (IPython) {

// If we are at the end always insert a new cell and return
if (cell_index === (this.ncells()-1)) {
this.command_mode();
this.insert_cell_below('code');
this.edit_mode(cell_index+1);
this.select(cell_index+1);
this.edit_mode();
this.scroll_to_bottom();
this.set_dirty(true);
return;
}


this.command_mode();
this.insert_cell_below('code');
this.edit_mode(cell_index+1);
this.select(cell_index+1);
this.edit_mode();
this.set_dirty(true);
};

Expand All @@ -1497,16 +1500,17 @@ var IPython = (function (IPython) {

// If we are at the end always insert a new cell and return
if (cell_index === (this.ncells()-1)) {
this.command_mode();
this.insert_cell_below('code');
this.edit_mode(cell_index+1);
this.select(cell_index+1);
this.edit_mode();
this.scroll_to_bottom();
this.set_dirty(true);
return;
}

this.select(cell_index+1);
this.get_cell(cell_index+1).focus_cell();
this.command_mode();
this.select(cell_index+1);
this.set_dirty(true);
};

Expand Down Expand Up @@ -1547,6 +1551,7 @@ var IPython = (function (IPython) {
* @param {Number} end Index of the last cell to execute (exclusive)
*/
Notebook.prototype.execute_cell_range = function (start, end) {
this.command_mode();
for (var i=start; i<end; i++) {
this.select(i);
this.execute_cell();
Expand Down Expand Up @@ -2041,7 +2046,7 @@ var IPython = (function (IPython) {
this.edit_mode(0);
} else {
this.select(0);
this.command_mode();
this.handle_command_mode(this.get_cell(0));
}
this.set_dirty(false);
this.scroll_to_top();
Expand Down

0 comments on commit 631cef1

Please sign in to comment.