From c44cdef9c50d29368f41a229483c644f163678d4 Mon Sep 17 00:00:00 2001 From: Chris Knorowski Date: Tue, 12 Apr 2016 00:22:04 -0700 Subject: [PATCH 1/3] added an extenstion to allow split cells using shift-s --- nbextensions/usability/splitcell/readme.md | 3 + nbextensions/usability/splitcell/splitcell.js | 96 +++++++++++++++++++ .../usability/splitcell/splitcell.yaml | 6 ++ 3 files changed, 105 insertions(+) create mode 100644 nbextensions/usability/splitcell/readme.md create mode 100644 nbextensions/usability/splitcell/splitcell.js create mode 100644 nbextensions/usability/splitcell/splitcell.yaml diff --git a/nbextensions/usability/splitcell/readme.md b/nbextensions/usability/splitcell/readme.md new file mode 100644 index 0000000..6cc4b6e --- /dev/null +++ b/nbextensions/usability/splitcell/readme.md @@ -0,0 +1,3 @@ +## Split Cells for Jupyter/Ipython Notebooks + +Enter command mode (esc), use shift-s to toggle the current cell to either a split cell or full width. diff --git a/nbextensions/usability/splitcell/splitcell.js b/nbextensions/usability/splitcell/splitcell.js new file mode 100644 index 0000000..6b44d96 --- /dev/null +++ b/nbextensions/usability/splitcell/splitcell.js @@ -0,0 +1,96 @@ +// Allow for split cells in jupyter notebooks + +define([ + 'base/js/namespace', + 'services/config', + 'base/js/utils' + ], function(IPython, configmod, utils){ + "use strict"; + + //create config object to load paramters + var base_url = utils.get_body_data("baseUrl"); + var config = new configmod.ConfigSection('notebook', {base_url: base_url}); + + //define default config parameter values + var params = { + toggle_cell_style_keybinding : 'shift-s' + }; + + //updates default params with any specified in the server's config + var update_params = function(){ + for (var key in params){ + if (config.data.hasOwnProperty(key)){ + params[key] = config.data[key]; + } + } + }; + + console.log('updated params') + + config.loaded.then(function(){ + // update defaults + update_params(); + + //register actions with ActionHandler instance + var prefix = 'auto'; + var name = 'toggle-cell-style'; + var action = { + icon : 'fa-style-o', + help : 'Toggle split/centered cell style', + help_index : 'eb', + id : 'split_cells', + handler : toggle_cell_style + }; + + var action_full_name = IPython.keyboard_manager.actions.register(action, name, prefix); + + //define keyboard shortucts + var command_mode_shortcuts = {}; + command_mode_shortcuts[params.toggle_cell_style_keybinding] = action_full_name; + + //register keyboard shortucts with keyboard_manager + IPython.notebook.keyboard_manager.command_shortcuts.add_shortcuts(command_mode_shortcuts); + }); + + + var toggle_cell_style = function(){ + var cell = IPython.notebook.get_selected_cell(); + if (!("cell_style" in cell.metadata)){cell.metadata.cell_style = 'split';} + else if (cell.metadata.cell_style == 'center'){cell.metadata.cell_style = 'split';} + else {cell.metadata.cell_style = 'center';} + + update_cell_style_element(cell); + } + + var get_cell_style_html = function(cell_style){ + console.log(cell_style) + if (cell_style == "split") + {return "float:left; width:50%;";} + return "width:100%;"; + }; + + var update_cell_style_element = function(cell){ + var cell_style_html = get_cell_style_html(cell.metadata.cell_style); + cell.element.attr('style', cell_style_html); + } + + // On Load lets set the cell styles correctly + var cells = IPython.notebook.get_cells(); + var ncells = IPython.notebook.ncells(); + + for (var i=0; i Date: Tue, 12 Apr 2016 00:24:08 -0700 Subject: [PATCH 2/3] updated yaml name --- nbextensions/usability/splitcell/splitcell.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nbextensions/usability/splitcell/splitcell.yaml b/nbextensions/usability/splitcell/splitcell.yaml index 013caa8..fa977a6 100644 --- a/nbextensions/usability/splitcell/splitcell.yaml +++ b/nbextensions/usability/splitcell/splitcell.yaml @@ -1,6 +1,6 @@ Type: IPython Notebook Extension -Name: splitcell -Description: Enable split cells notebook +Name: Split Cells Notebook +Description: Enable split cells in Jupyter notebooks Main: splitcell.js Compatibility: Jupyter (4.x) From 913a89885a2ddebaa5ffa16f80089886cc4859b6 Mon Sep 17 00:00:00 2001 From: Chris Knorowski Date: Tue, 12 Apr 2016 08:45:55 -0700 Subject: [PATCH 3/3] added a button, renamed to Jupyter namespace --- nbextensions/usability/splitcell/icon.png | Bin 0 -> 6382 bytes nbextensions/usability/splitcell/splitcell.js | 20 +++++++++--------- .../usability/splitcell/splitcell.yaml | 1 + 3 files changed, 11 insertions(+), 10 deletions(-) create mode 100644 nbextensions/usability/splitcell/icon.png diff --git a/nbextensions/usability/splitcell/icon.png b/nbextensions/usability/splitcell/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1ddac2990938e7dbcbf7508e3aa468cd677ffde9 GIT binary patch literal 6382 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 Q@DB_KM&ArwuICu}KMku1jsO4v literal 0 HcmV?d00001 diff --git a/nbextensions/usability/splitcell/splitcell.js b/nbextensions/usability/splitcell/splitcell.js index 6b44d96..b6d75cc 100644 --- a/nbextensions/usability/splitcell/splitcell.js +++ b/nbextensions/usability/splitcell/splitcell.js @@ -4,7 +4,7 @@ define([ 'base/js/namespace', 'services/config', 'base/js/utils' - ], function(IPython, configmod, utils){ + ], function(Jupyter, configmod, utils){ "use strict"; //create config object to load paramters @@ -25,8 +25,6 @@ define([ } }; - console.log('updated params') - config.loaded.then(function(){ // update defaults update_params(); @@ -35,26 +33,27 @@ define([ var prefix = 'auto'; var name = 'toggle-cell-style'; var action = { - icon : 'fa-style-o', + icon : 'fa-arrows-h', help : 'Toggle split/centered cell style', help_index : 'eb', id : 'split_cells', handler : toggle_cell_style }; - var action_full_name = IPython.keyboard_manager.actions.register(action, name, prefix); + var action_full_name = Jupyter.keyboard_manager.actions.register(action, name, prefix); //define keyboard shortucts var command_mode_shortcuts = {}; command_mode_shortcuts[params.toggle_cell_style_keybinding] = action_full_name; //register keyboard shortucts with keyboard_manager - IPython.notebook.keyboard_manager.command_shortcuts.add_shortcuts(command_mode_shortcuts); + Jupyter.notebook.keyboard_manager.command_shortcuts.add_shortcuts(command_mode_shortcuts); + Jupyter.toolbar.add_buttons_group([action_full_name]); }); var toggle_cell_style = function(){ - var cell = IPython.notebook.get_selected_cell(); + var cell = Jupyter.notebook.get_selected_cell(); if (!("cell_style" in cell.metadata)){cell.metadata.cell_style = 'split';} else if (cell.metadata.cell_style == 'center'){cell.metadata.cell_style = 'split';} else {cell.metadata.cell_style = 'center';} @@ -75,8 +74,8 @@ define([ } // On Load lets set the cell styles correctly - var cells = IPython.notebook.get_cells(); - var ncells = IPython.notebook.ncells(); + var cells = Jupyter.notebook.get_cells(); + var ncells = Jupyter.notebook.ncells(); for (var i=0; i