From d797b8e47c167f742c8bf68015ad8a00f08b5d24 Mon Sep 17 00:00:00 2001 From: Jonathan Frederic Date: Thu, 15 Oct 2015 09:45:49 -0700 Subject: [PATCH] Use marks --- notebook/static/notebook/js/actions.js | 35 ++---- notebook/static/notebook/js/cell.js | 20 ++- notebook/static/notebook/js/codecell.js | 6 +- .../static/notebook/js/keyboardmanager.js | 10 +- notebook/static/notebook/js/notebook.js | 119 ++++-------------- .../static/notebook/js/searchandreplace.js | 2 +- notebook/tests/notebook/dualmode_merge.js | 2 +- 7 files changed, 55 insertions(+), 139 deletions(-) diff --git a/notebook/static/notebook/js/actions.js b/notebook/static/notebook/js/actions.js index a169bcf80..9fa550e39 100644 --- a/notebook/static/notebook/js/actions.js +++ b/notebook/static/notebook/js/actions.js @@ -173,33 +173,18 @@ define(function(require){ } } }, - 'extend-selection-previous' : { - help: 'extend selection above', + 'extend-marked-previous' : { + help: 'extend marked above', help_index : 'dc', handler : function (env) { - var index = env.notebook.get_selected_index(); - if (index !== 0 && index !== null) { - env.notebook.extend_selection('up'); - env.notebook.focus_cell(); - } + env.notebook.extend_marked('up'); } }, - 'extend-selection-next' : { - help: 'extend selection below', + 'extend-marked-next' : { + help: 'extend marked below', help_index : 'dd', handler : function (env) { - var index = env.notebook.get_selected_index(); - if (index !== (env.notebook.ncells()-1) && index !== null) { - env.notebook.extend_selection('down'); - env.notebook.focus_cell(); - } - } - }, - 'reset-selection': { - help: 'clear selected cells', - help_index: 'de', - handler: function(env) { - env.notebook.reset_selection(); + env.notebook.extend_marked('down'); } }, 'cut-selected-cell' : { @@ -402,11 +387,11 @@ define(function(require){ env.notebook.merge_cell_below(); } }, - 'merge-selected-cells' : { - help : 'merge selected cells', + 'merge-marked-cells' : { + help : 'merge marked cells', help_index: 'el', handler: function(env) { - env.notebook.merge_selected_cells(); + env.notebook.merge_marked_cells(); } }, 'close-pager' : { @@ -428,7 +413,7 @@ define(function(require){ help: 'toggle marks', icon: 'fa-check', handler : function(env){ - env.notebook.toggle_cells_marked(env.notebook.get_selected_cells()); + env.notebook.get_selected_cell.marked ^= true; } }, }; diff --git a/notebook/static/notebook/js/cell.js b/notebook/static/notebook/js/cell.js index c6150a307..bf38dd673 100644 --- a/notebook/static/notebook/js/cell.js +++ b/notebook/static/notebook/js/cell.js @@ -55,8 +55,6 @@ define([ this.placeholder = config.placeholder || ''; this.selected = false; - this.in_selection = false; - this.selection_anchor = false; this.rendered = false; this.mode = 'command'; @@ -76,7 +74,7 @@ define([ // backward compat. Object.defineProperty(this, 'cm_config', { get: function() { - console.warn("Warning: accessing Cell.cm_config directly is deprecated.") + console.warn("Warning: accessing Cell.cm_config directly is deprecated."); return that._options.cm_config; }, }); @@ -144,7 +142,7 @@ define([ * Call after this.element exists to initialize the css classes * related to selected, rendered and mode. */ - if (this.in_selection) { + if (this.selected) { this.element.addClass('selected'); } else { this.element.addClass('unselected'); @@ -262,7 +260,6 @@ define([ this.element.addClass('selected'); this.element.removeClass('unselected'); this.selected = true; - this.in_selection = true; return true; } else { return false; @@ -270,21 +267,20 @@ define([ }; /** - * handle cell level logic when the cursor moves away from a cell + * handle cell level logic when the cell is unselected * @method unselect * @param {bool} leave_selected - true to move cursor away and extend selection * @return is the action being taken */ Cell.prototype.unselect = function (leave_selected) { - var was_selected_cell = this.selected; - this.selected = false; - if ((!leave_selected) && this.in_selection) { - this.in_selection = false; - this.selection_anchor = false; + if (this.selected) { this.element.addClass('unselected'); this.element.removeClass('selected'); + this.selected = false; + return true; + } else { + return false; } - return was_selected_cell; }; /** diff --git a/notebook/static/notebook/js/codecell.js b/notebook/static/notebook/js/codecell.js index 6f5ebc19b..59d8b4729 100644 --- a/notebook/static/notebook/js/codecell.js +++ b/notebook/static/notebook/js/codecell.js @@ -535,12 +535,12 @@ define([ }; /** - * handle cell level logic when the cursor moves away from a cell + * handle cell level logic when the cell is unselected * @method unselect * @return is the action being taken */ - CodeCell.prototype.unselect = function (leave_selected) { - var cont = Cell.prototype.unselect.apply(this, [leave_selected]); + CodeCell.prototype.unselect = function() { + var cont = Cell.prototype.unselect.call(this); if (cont) { // When a code cell is unselected, make sure that the corresponding // tooltip and completer to that cell is closed. diff --git a/notebook/static/notebook/js/keyboardmanager.js b/notebook/static/notebook/js/keyboardmanager.js index 407a7a11a..6eaff8023 100644 --- a/notebook/static/notebook/js/keyboardmanager.js +++ b/notebook/static/notebook/js/keyboardmanager.js @@ -88,7 +88,7 @@ define([ 'cmdtrl-shift-p': 'ipython.command-palette', 'shift-space': 'ipython.scroll-up', 'shift-v' : 'ipython.paste-cell-before', - 'shift-m' : 'ipython.merge-selected-cells', + 'shift-m' : 'ipython.merge-marked-cells', 'shift-o' : 'ipython.toggle-output-scrolling-selected-cell', 'enter' : 'ipython.enter-edit-mode', 'space' : 'ipython.scroll-down', @@ -101,10 +101,10 @@ define([ 'up' : 'ipython.select-previous-cell', 'k' : 'ipython.select-previous-cell', 'j' : 'ipython.select-next-cell', - 'shift-k': 'ipython.extend-selection-previous', - 'shift-j': 'ipython.extend-selection-next', - 'shift-up': 'ipython.extend-selection-previous', - 'shift-down': 'ipython.extend-selection-next', + 'shift-k': 'ipython.extend-marked-previous', + 'shift-j': 'ipython.extend-marked-next', + 'shift-up': 'ipython.extend-marked-previous', + 'shift-down': 'ipython.extend-marked-next', 'x' : 'ipython.cut-selected-cell', 'c' : 'ipython.copy-selected-cell', 'v' : 'ipython.paste-cell-after', diff --git a/notebook/static/notebook/js/notebook.js b/notebook/static/notebook/js/notebook.js index fe2b4fc1e..ef0118502 100644 --- a/notebook/static/notebook/js/notebook.js +++ b/notebook/static/notebook/js/notebook.js @@ -613,21 +613,6 @@ define(function (require) { }); return result; }; - - /** - * Get the index of the anchor cell for range selection - * - * @return {integer} The anchor cell's numeric index - */ - Notebook.prototype.get_selection_anchor = function() { - var result = null; - this.get_cell_elements().filter(function (index) { - if ($(this).data("cell").selection_anchor === true) { - result = index; - } - }); - return result; - }; /** * Toggles the marks on the cells @@ -729,29 +714,12 @@ define(function (require) { }; /** - * Get an array of the cells in the currently selected range - * - * @return {Array} The selected cells - */ - Notebook.prototype.get_selected_cells = function () { - return this.get_cells().filter(function(cell) { - return cell.in_selection; - }); - }; - - /** - * Get the indices of the currently selected range of cells. + * Extend the selected range * - * @return {Array} The selected cells' numeric indices + * @param {string} direction - 'up' or 'down */ - Notebook.prototype.get_selected_indices = function () { - var result = []; - this.get_cell_elements().filter(function (index) { - if ($(this).data("cell").in_selection === true) { - result.push(index); - } - }); - return result; + Notebook.prototype.extend_marked = function(direction) { + // TODO: Marked }; // Cell selection. @@ -771,27 +739,23 @@ define(function (require) { if (this.mode !== 'command') { this.command_mode(); } + this.get_cell(sindex).unselect(); } - var current_selection = this.get_selected_cells(); - for (var i=0; i anchor_ix) ? 'down' : 'up'; - var contracting = (cursor_ix !== anchor_ix) && - (direction !== range_direction); - var ix_delta = (direction === 'up') ? -1 : 1; - var new_ix = cursor_ix + ix_delta; - if (new_ix < 0 || new_ix >= this.ncells()) { - return false; - } - if (this.mode !== 'command') { - this.command_mode(); - } - this.get_cell(cursor_ix).unselect(!contracting); - this._select(new_ix); - return true; - }; - - /** - * Clear selection of multiple cells (except the cell at the cursor) - */ - Notebook.prototype.reset_selection = function() { - var current_selection = this.get_selected_cells(); - for (var i=0; i