From e374ca5ebbe735a6b0e72e0aeb9467117c03d71a Mon Sep 17 00:00:00 2001 From: "Brian E. Granger" Date: Mon, 3 Mar 2014 15:32:05 -0800 Subject: [PATCH 1/3] Refactoring Notebook.command_mode. --- .../static/notebook/js/keyboardmanager.js | 2 - IPython/html/static/notebook/js/notebook.js | 52 ++++++++++--------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/IPython/html/static/notebook/js/keyboardmanager.js b/IPython/html/static/notebook/js/keyboardmanager.js index b82980c26..d9c314542 100644 --- a/IPython/html/static/notebook/js/keyboardmanager.js +++ b/IPython/html/static/notebook/js/keyboardmanager.js @@ -84,7 +84,6 @@ var IPython = (function (IPython) { help_index : 'aa', handler : function (event) { IPython.notebook.command_mode(); - IPython.notebook.focus_cell(); return false; } }, @@ -93,7 +92,6 @@ var IPython = (function (IPython) { help_index : 'ab', handler : function (event) { IPython.notebook.command_mode(); - IPython.notebook.focus_cell(); return false; } }, diff --git a/IPython/html/static/notebook/js/notebook.js b/IPython/html/static/notebook/js/notebook.js index d49fd4984..c1e6f9bcb 100644 --- a/IPython/html/static/notebook/js/notebook.js +++ b/IPython/html/static/notebook/js/notebook.js @@ -116,11 +116,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 () { @@ -519,40 +519,44 @@ 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 (cell === null) { return; } // TODO: do I really need this? if (this.mode !== 'command') { + cell.command_mode(); // TODO: is this OK here? 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. + Notebook.prototype.handle_edit_mode = function (cell) { + if (cell === null) { return; } // TODO: do I really need this? if (this.mode !== 'edit') { cell.edit_mode(); this.mode = 'edit'; @@ -1449,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); }; @@ -1501,7 +1504,6 @@ var IPython = (function (IPython) { } this.select(cell_index+1); - this.get_cell(cell_index+1).focus_cell(); this.command_mode(); this.set_dirty(true); }; @@ -1972,7 +1974,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(); From 6f4263dc7407e244e948a49ff6c352f741fb5d58 Mon Sep 17 00:00:00 2001 From: "Brian E. Granger" Date: Mon, 3 Mar 2014 16:03:06 -0800 Subject: [PATCH 2/3] Removing conditionals that are not needed. --- IPython/html/static/notebook/js/notebook.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/IPython/html/static/notebook/js/notebook.js b/IPython/html/static/notebook/js/notebook.js index c1e6f9bcb..f5c33f2ae 100644 --- a/IPython/html/static/notebook/js/notebook.js +++ b/IPython/html/static/notebook/js/notebook.js @@ -525,7 +525,6 @@ var IPython = (function (IPython) { * @param [cell] {Cell} Cell to enter command mode on. **/ Notebook.prototype.handle_command_mode = function (cell) { - if (cell === null) { return; } // TODO: do I really need this? if (this.mode !== 'command') { cell.command_mode(); // TODO: is this OK here? this.mode = 'command'; @@ -556,7 +555,6 @@ var IPython = (function (IPython) { * @param [cell] {Cell} Cell to enter edit mode on. **/ Notebook.prototype.handle_edit_mode = function (cell) { - if (cell === null) { return; } // TODO: do I really need this? if (this.mode !== 'edit') { cell.edit_mode(); this.mode = 'edit'; From 4e0a2ee4769317cbb96c9ec3c1c527a5078dc778 Mon Sep 17 00:00:00 2001 From: "Brian E. Granger" Date: Tue, 4 Mar 2014 15:09:49 -0800 Subject: [PATCH 3/3] Make sure we are in command mode before we select a new cell. --- IPython/html/static/notebook/js/notebook.js | 39 ++++++++++++--------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/IPython/html/static/notebook/js/notebook.js b/IPython/html/static/notebook/js/notebook.js index f5c33f2ae..4fce3a1fc 100644 --- a/IPython/html/static/notebook/js/notebook.js +++ b/IPython/html/static/notebook/js/notebook.js @@ -457,6 +457,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); @@ -526,7 +531,7 @@ var IPython = (function (IPython) { **/ Notebook.prototype.handle_command_mode = function (cell) { if (this.mode !== 'command') { - cell.command_mode(); // TODO: is this OK here? + cell.command_mode(); this.mode = 'command'; $([IPython.events]).trigger('command_mode.Notebook'); IPython.keyboard_manager.command_mode(); @@ -555,7 +560,7 @@ var IPython = (function (IPython) { * @param [cell] {Cell} Cell to enter edit mode on. **/ Notebook.prototype.handle_edit_mode = function (cell) { - if (this.mode !== 'edit') { + if (cell && this.mode !== 'edit') { cell.edit_mode(); this.mode = 'edit'; $([IPython.events]).trigger('edit_mode.Notebook'); @@ -567,17 +572,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(); } @@ -1468,15 +1466,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); }; @@ -1494,15 +1496,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.command_mode(); + this.select(cell_index+1); this.set_dirty(true); }; @@ -1543,6 +1547,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