##// END OF EJS Templates
use invoke instead of fabric...
use invoke instead of fabric it's the descendant of the part of fabric we actually use, it doesn't have complex compiled dependencies like fabric, and it works on Python 3.

File last commit:

r18284:4d68dec1
r18351:0ab76370
Show More
codecell.js
532 lines | 17.8 KiB | application/javascript | JavascriptLexer
Jonathan Frederic
Almost done!...
r17198 // Copyright (c) IPython Development Team.
// Distributed under the terms of the Modified BSD License.
Matthias BUSSONNIER
Update to codemirror 4...
r18280 /**
*
*
* @module codecell
* @namespace codecell
* @class CodeCell
*/
Jonathan Frederic
Almost done!...
r17198
define([
'base/js/namespace',
Jonathan Frederic
MWE,...
r17200 'jquery',
Jonathan Frederic
Almost done!...
r17198 'base/js/utils',
'base/js/keyboard',
'notebook/js/cell',
'notebook/js/outputarea',
'notebook/js/completer',
Jonathan Frederic
MWE,...
r17200 'notebook/js/celltoolbar',
Matthias BUSSONNIER
Update to codemirror 4...
r18280 'codemirror/lib/codemirror',
'codemirror/mode/python/python',
'notebook/js/codemirror-ipython'
], function(IPython, $, utils, keyboard, cell, outputarea, completer, celltoolbar, CodeMirror, cmpython, cmip) {
Matthias BUSSONNIER
use strict and clean a little....
r7132 "use strict";
Jonathan Frederic
Fix all the bugs!
r17203 var Cell = cell.Cell;
Matthias BUSSONNIER
use strict and clean a little....
r7132
Jonathan Frederic
Almost done!...
r17198 /* local util for codemirror */
var posEq = function(a, b) {return a.line == b.line && a.ch == b.ch;};
/**
*
* function to delete until previous non blanking space character
* or first multiple of 4 tabstop.
* @private
*/
CodeMirror.commands.delSpaceToPrevTabStop = function(cm){
var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to);
if (!posEq(from, to)) { cm.replaceRange("", from, to); return; }
var cur = cm.getCursor(), line = cm.getLine(cur.line);
var tabsize = cm.getOption('tabSize');
var chToPrevTabStop = cur.ch-(Math.ceil(cur.ch/tabsize)-1)*tabsize;
from = {ch:cur.ch-chToPrevTabStop,line:cur.line};
var select = cm.getRange(from,cur);
if( select.match(/^\ +$/) !== null){
cm.replaceRange("",from,cur);
} else {
cm.deleteH(-1,"char");
}
};
var keycodes = keyboard.keycodes;
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352
jon
In person review with @ellisonbg
r17210 var CodeCell = function (kernel, options) {
jon
Added some nice comments,...
r17211 // Constructor
//
// A Cell conceived to write code.
//
// Parameters:
// kernel: Kernel instance
// The kernel doesn't have to be set at creation time, in that case
// it will be null and set_kernel has to be called later.
// options: dictionary
// Dictionary of keyword arguments.
// events: $(Events) instance
// config: dictionary
// keyboard_manager: KeyboardManager instance
// notebook: Notebook instance
Jonathan Frederic
More requirejs fixes
r17215 // tooltip: Tooltip instance
MinRK
Cells shouldn't know about Sessions
r13133 this.kernel = kernel || null;
jon
In person review with @ellisonbg
r17210 this.notebook = options.notebook;
MinRK
restore collapsed state for cells...
r7524 this.collapsed = false;
jon
In person review with @ellisonbg
r17210 this.events = options.events;
Jonathan Frederic
More requirejs fixes
r17215 this.tooltip = options.tooltip;
jon
In person review with @ellisonbg
r17210 this.config = options.config;
Matthias BUSSONNIER
Make CodeMirror configurable...
r9537
Matthias BUSSONNIER
some optimisation and code cleaning...
r13574 // create all attributed in constructor function
// even if null for V8 VM optimisation
this.input_prompt_number = null;
this.celltoolbar = null;
this.output_area = null;
this.last_msg_id = null;
this.completer = null;
Matthias BUSSONNIER
Make CodeMirror configurable...
r9537
Matthias Bussonnier
rework keyboard management to avoit completer and up/down bugs
r18282 var config = utils.mergeopt(CodeCell, this.config);
jon
In person review with @ellisonbg
r17210 Cell.apply(this,[{
config: config,
keyboard_manager: options.keyboard_manager,
events: this.events}]);
Matthias BUSSONNIER
autochange highlight with cell magics...
r8202
Brian E. Granger
Fixing cell_type in CodeCell constructor....
r13661 // Attributes we want to override in this subclass.
this.cell_type = "code";
Matthias BUSSONNIER
autochange highlight with cell magics...
r8202 var that = this;
this.element.focusout(
Matthias BUSSONNIER
fix some whitespace
r8281 function() { that.auto_highlight(); }
);
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352 };
Matthias BUSSONNIER
JS Configurablity Take 2...
r10165 CodeCell.options_default = {
cm_config : {
MinRK
enable comment/uncomment selection...
r11488 extraKeys: {
"Tab" : "indentMore",
"Shift-Tab" : "indentLess",
"Backspace" : "delSpaceToPrevTabStop",
"Cmd-/" : "toggleComment",
"Ctrl-/" : "toggleComment"
},
Brian E. Granger
Changing mode name from python -> ipython.
r10418 mode: 'ipython',
Matthias BUSSONNIER
Make CodeMirror configurable...
r9537 theme: 'ipython',
Matthias BUSSONNIER
Update to codemirror 4...
r18280 matchBrackets: true
Matthias BUSSONNIER
JS Configurablity Take 2...
r10165 }
Matthias BUSSONNIER
Make CodeMirror configurable...
r9537 };
Jonathan Frederic
Remove O(N) cell by msg-id lookup
r14604 CodeCell.msg_cells = {};
Matthias BUSSONNIER
Make CodeMirror configurable...
r9537
Jonathan Frederic
Fix all the bugs!
r17203 CodeCell.prototype = new Cell();
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352
Matthias BUSSONNIER
start docummenting kernel
r8768 /**
* @method auto_highlight
*/
Matthias BUSSONNIER
autochange highlight with cell magics...
r8202 CodeCell.prototype.auto_highlight = function () {
Jonathan Frederic
Almost done!...
r17198 this._auto_highlight(this.config.cell_magic_highlight);
Matthias BUSSONNIER
autochange highlight with cell magics...
r8202 };
Matthias BUSSONNIER
start docummenting kernel
r8768 /** @method create_element */
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352 CodeCell.prototype.create_element = function () {
Jonathan Frederic
Fix all the bugs!
r17203 Cell.prototype.create_element.apply(this, arguments);
Matthias BUSSONNIER
Add a per cell toolbar....
r9055
Matthias BUSSONNIER
Transfer of border-box-sizing from js to css...
r17422 var cell = $('<div></div>').addClass('cell code_cell');
Brian E. Granger
Better tabindex support.
r4629 cell.attr('tabindex','2');
Brian E. Granger
Fixing styling issues with CellToolbar....
r9142
Matthias BUSSONNIER
use hbox mixin instead of class...
r10215 var input = $('<div></div>').addClass('input');
Brian E. Granger
Adding prompt area to non-CodeCells to indent content....
r13776 var prompt = $('<div/>').addClass('prompt input_prompt');
var inner_cell = $('<div/>').addClass('inner_cell');
Jonathan Frederic
More review changes
r17214 this.celltoolbar = new celltoolbar.CellToolbar({
cell: this,
notebook: this.notebook});
Brian E. Granger
Adding prompt area to non-CodeCells to indent content....
r13776 inner_cell.append(this.celltoolbar.element);
Matthias BUSSONNIER
fix celltoolbar layout on FF
r9422 var input_area = $('<div/>').addClass('input_area');
Jonathan Frederic
Fixed cell toolbars
r17217 this.code_mirror = new CodeMirror(input_area.get(0), this.cm_config);
Matthias Bussonnier
rework keyboard management to avoit completer and up/down bugs
r18282 this.code_mirror.on('keydown', $.proxy(this.handle_keyevent,this))
MinRK
set `spellcheck=false` in CodeCell inputarea...
r10065 $(this.code_mirror.getInputField()).attr("spellcheck", "false");
Brian E. Granger
Adding prompt area to non-CodeCells to indent content....
r13776 inner_cell.append(input_area);
input.append(prompt).append(inner_cell);
Jonathan Frederic
Added widget output area
r14219
Jonathan Frederic
Added clear widget area button
r14234 var widget_area = $('<div/>')
Jonathan Frederic
Changed underscores in CSS names to dashes
r14293 .addClass('widget-area')
Jonathan Frederic
Added clear widget area button
r14234 .hide();
this.widget_area = widget_area;
var widget_prompt = $('<div/>')
.addClass('prompt')
.appendTo(widget_area);
var widget_subarea = $('<div/>')
Jonathan Frederic
Changed underscores in CSS names to dashes
r14293 .addClass('widget-subarea')
Jonathan Frederic
Added clear widget area button
r14234 .appendTo(widget_area);
this.widget_subarea = widget_subarea;
var widget_clear_buton = $('<button />')
.addClass('close')
.html('&times;')
.click(function() {
widget_area.slideUp('', function(){ widget_subarea.html(''); });
})
.appendTo(widget_prompt);
Jonathan Frederic
Added widget output area
r14219
Brian Granger
Refactored CodeCell to use new OutputArea object for output....
r7177 var output = $('<div></div>');
Jonathan Frederic
Added widget output area
r14219 cell.append(input).append(widget_area).append(output);
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352 this.element = cell;
Jonathan Frederic
More review changes
r17214 this.output_area = new outputarea.OutputArea({
selector: output,
prompt_area: true,
events: this.events,
keyboard_manager: this.keyboard_manager});
Jonathan Frederic
Fix imports of "modules",...
r17202 this.completer = new completer.Completer(this, this.events);
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352 };
Brian E. Granger
More work on the dual mode UX.
r14015 /** @method bind_events */
CodeCell.prototype.bind_events = function () {
Jonathan Frederic
Fix all the bugs!
r17203 Cell.prototype.bind_events.apply(this);
Brian E. Granger
More work on the dual mode UX.
r14015 var that = this;
this.element.focusout(
function() { that.auto_highlight(); }
);
};
Brian E. Granger
Lots of updates and changes....
r14021
Matthias BUSSONNIER
start docummenting kernel
r8768 /**
* This method gets called in CodeMirror's onKeyDown/onKeyPress
* handlers and is used to provide custom key handling. Its return
* value is used to determine if CodeMirror should ignore the event:
* true = ignore, false = don't ignore.
* @method handle_codemirror_keyevent
*/
Brian E. Granger
Fixing execution related things....
r4378 CodeCell.prototype.handle_codemirror_keyevent = function (editor, event) {
Brian E. Granger
Lots of updates and changes....
r14021
Matthias BUSSONNIER
tooltip on <tab>
r5398 var that = this;
Brian E. Granger
Lots of updates and changes....
r14021 // whatever key is pressed, first, cancel the tooltip request before
// they are sent, and remove tooltip if any, except for tab again
Brian E. Granger
Special handling for CM's vim keyboard mapping.
r14062 var tooltip_closed = null;
Brian E. Granger
Removing old keyboard handling from IPython.utils.
r15619 if (event.type === 'keydown' && event.which != keycodes.tab ) {
Jonathan Frederic
Almost done!...
r17198 tooltip_closed = this.tooltip.remove_and_cancel_tooltip();
Brian E. Granger
Lots of updates and changes....
r14021 }
Brian Granger
Making keyboard shortcut for showing line numbers consistent.
r6059
Brian E. Granger
Lots of updates and changes....
r14021 var cur = editor.getCursor();
Brian E. Granger
Removing old keyboard handling from IPython.utils.
r15619 if (event.keyCode === keycodes.enter){
Brian E. Granger
Lots of updates and changes....
r14021 this.auto_highlight();
}
Brian Granger
Making keyboard shortcut for showing line numbers consistent.
r6059
Jonathan Frederic
Almost done!...
r17198 if (event.which === keycodes.down && event.type === 'keypress' && this.tooltip.time_before_tooltip >= 0) {
Brian E. Granger
Lots of updates and changes....
r14021 // triger on keypress (!) otherwise inconsistent event.which depending on plateform
// browser and keyboard layout !
// Pressing '(' , request tooltip, don't forget to reappend it
// The second argument says to hide the tooltip if the docstring
// is actually empty
Jonathan Frederic
Almost done!...
r17198 this.tooltip.pending(that, true);
Paul Ivanov
DRY: refactor common keyboard handling to Cell...
r15757 } else if ( tooltip_closed && event.which === keycodes.esc && event.type === 'keydown') {
Paul Ivanov
minor fixes to docs to address PR feedback
r15820 // If tooltip is active, cancel it. The call to
// remove_and_cancel_tooltip above doesn't pass, force=true.
// Because of this it won't actually close the tooltip
Paul Ivanov
DRY: refactor common keyboard handling to Cell...
r15757 // if it is in sticky mode. Thus, we have to check again if it is open
// and close it with force=true.
Jonathan Frederic
Almost done!...
r17198 if (!this.tooltip._hidden) {
this.tooltip.remove_and_cancel_tooltip(true);
Brian E. Granger
Lots of updates and changes....
r14021 }
Paul Ivanov
DRY: refactor common keyboard handling to Cell...
r15757 // If we closed the tooltip, don't let CM or the global handlers
// handle this event.
Matthias BUSSONNIER
Update to codemirror 4...
r18280 event.codemirrorIgnore = true;
event.preventDefault();
Paul Ivanov
DRY: refactor common keyboard handling to Cell...
r15757 return true;
Brian E. Granger
Removing old keyboard handling from IPython.utils.
r15619 } else if (event.keyCode === keycodes.tab && event.type === 'keydown' && event.shiftKey) {
Matthias Bussonnier
handle somehting selected and multiple cursors and 4 tabs show content in pager
r18284 if (editor.somethingSelected() || editor.getSelections().length !== 1){
Brian E. Granger
Lots of updates and changes....
r14021 var anchor = editor.getCursor("anchor");
var head = editor.getCursor("head");
if( anchor.line != head.line){
return false;
Bussonnier Matthias
shift tqb for tooltip
r8949 }
}
Jonathan Frederic
Almost done!...
r17198 this.tooltip.request(that);
Matthias BUSSONNIER
Update to codemirror 4...
r18280 event.codemirrorIgnore = true;
event.preventDefault();
Bussonnier Matthias
shift tqb for tooltip
r8949 return true;
Brian E. Granger
Removing old keyboard handling from IPython.utils.
r15619 } else if (event.keyCode === keycodes.tab && event.type == 'keydown') {
Brian E. Granger
Fixing tab completion edge cases.
r4555 // Tab completion.
Jonathan Frederic
Almost done!...
r17198 this.tooltip.remove_and_cancel_tooltip();
Matthias Bussonnier
handle somehting selected and multiple cursors and 4 tabs show content in pager
r18284
// completion does not work on multicursor, it might be possible though in some cases
if (editor.somethingSelected() || editor.getSelections().length > 1) {
Matthias BUSSONNIER
prompt '*' strore fix + tab remove tooltip...
r13572 return false;
}
Matthias BUSSONNIER
tooltip on <tab>
r5398 var pre_cursor = editor.getRange({line:cur.line,ch:0},cur);
if (pre_cursor.trim() === "") {
Fernando Perez
Add Ctrl-L as a way to toggle line-numbers for any individual code cell
r5016 // Don't autocomplete if the part of the line before the cursor
// is empty. In this case, let CodeMirror handle indentation.
Brian E. Granger
Notebook now uses tab for autocompletion.
r4393 return false;
} else {
Matthias BUSSONNIER
Update to codemirror 4...
r18280 event.codemirrorIgnore = true;
event.preventDefault();
Brian E. Granger
Lots of updates and changes....
r14021 this.completer.startCompletion();
return true;
}
Paul Ivanov
DRY: refactor common keyboard handling to Cell...
r15757 }
// keyboard event wasn't one of those unique to code cells, let's see
// if it's one of the generic ones (i.e. check edit mode shortcuts)
Jonathan Frederic
Fix all the bugs!
r17203 return Cell.prototype.handle_codemirror_keyevent.apply(this, [editor, event]);
Brian E. Granger
Fixing execution related things....
r4378 };
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168 // Kernel related calls.
MinRK
Cells shouldn't know about Sessions
r13133 CodeCell.prototype.set_kernel = function (kernel) {
this.kernel = kernel;
MinRK
jshint on codecell
r13210 };
Brian Granger
Fixed order of notebook loading and kernel starting....
r7197
Matthias BUSSONNIER
start docummenting kernel
r8768 /**
* Execute current code cell to the kernel
* @method execute
*/
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168 CodeCell.prototype.execute = function () {
MinRK
fixup bad rebase
r13102 this.output_area.clear_output();
Jonathan Frederic
Fixed glitch when widgetarea wouldn't get completely hidden upon re-execution
r14248
// Clear widget area
Jonathan Frederic
Clear widgets upon cell execute
r14235 this.widget_subarea.html('');
this.widget_subarea.height('');
this.widget_area.height('');
Jonathan Frederic
Fixed glitch when widgetarea wouldn't get completely hidden upon re-execution
r14248 this.widget_area.hide();
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168 this.set_input_prompt('*');
this.element.addClass("running");
MinRK
add CodeCell.get_callbacks...
r13225 if (this.last_msg_id) {
this.kernel.clear_callbacks_for_msg(this.last_msg_id);
}
var callbacks = this.get_callbacks();
Jonathan Frederic
Remove O(N) cell by msg-id lookup
r14604 var old_msg_id = this.last_msg_id;
MinRK
add CodeCell.get_callbacks...
r13225 this.last_msg_id = this.kernel.execute(this.get_text(), callbacks, {silent: false, store_history: true});
Jonathan Frederic
Remove O(N) cell by msg-id lookup
r14604 if (old_msg_id) {
delete CodeCell.msg_cells[old_msg_id];
}
CodeCell.msg_cells[this.last_msg_id] = this;
Matthias BUSSONNIER
Generalise render/unrender to all cells type...
r18270 this.render();
MinRK
add CodeCell.get_callbacks...
r13225 };
/**
* Construct the default callbacks for
* @method get_callbacks
*/
CodeCell.prototype.get_callbacks = function () {
return {
MinRK
refactor js callbacks...
r13207 shell : {
reply : $.proxy(this._handle_execute_reply, this),
payload : {
set_next_input : $.proxy(this._handle_set_next_input, this),
MinRK
add CodeCell.get_callbacks...
r13225 page : $.proxy(this._open_with_pager, this)
MinRK
refactor js callbacks...
r13207 }
},
iopub : {
output : $.proxy(this.output_area.handle_output, this.output_area),
clear_output : $.proxy(this.output_area.handle_clear_output, this.output_area),
},
input : $.proxy(this._handle_input_request, this)
MinRK
jshint on codecell
r13210 };
MinRK
add CodeCell.get_callbacks...
r13225 };
CodeCell.prototype._open_with_pager = function (payload) {
Jonathan Frederic
Almost done!...
r17198 this.events.trigger('open_with_text.Pager', payload);
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168 };
Matthias BUSSONNIER
start docummenting kernel
r8768 /**
* @method _handle_execute_reply
* @private
*/
MinRK
refactor js callbacks...
r13207 CodeCell.prototype._handle_execute_reply = function (msg) {
this.set_input_prompt(msg.content.execution_count);
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168 this.element.removeClass("running");
Jonathan Frederic
Almost done!...
r17198 this.events.trigger('set_dirty.Notebook', {value: true});
MinRK
jshint on codecell
r13210 };
Brian E. Granger
Autocompletion working with CTRL-SPACE.
r4389
MinRK
use inline raw_input instead of a dialog
r10368 /**
* @method _handle_set_next_input
* @private
*/
MinRK
refactor js callbacks...
r13207 CodeCell.prototype._handle_set_next_input = function (payload) {
MinRK
jshint on codecell
r13210 var data = {'cell': this, 'text': payload.text};
Jonathan Frederic
Almost done!...
r17198 this.events.trigger('set_next_input.Notebook', data);
MinRK
jshint on codecell
r13210 };
Takeshi Kanmae
ESC should be handled by CM if tooltip is not on
r12458
MinRK
use inline raw_input instead of a dialog
r10368 /**
* @method _handle_input_request
* @private
*/
MinRK
refactor js callbacks...
r13207 CodeCell.prototype._handle_input_request = function (msg) {
this.output_area.append_raw_input(msg);
MinRK
jshint on codecell
r13210 };
MinRK
use inline raw_input instead of a dialog
r10368
Brian Granger
Removing cell from execute callbacks in kernel.js.
r7223
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168 // Basic cell manipulation.
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352 CodeCell.prototype.select = function () {
Jonathan Frederic
Fix all the bugs!
r17203 var cont = Cell.prototype.select.apply(this);
Brian E. Granger
More work on the dual mode UX.
r14015 if (cont) {
Brian E. Granger
Adding new logic to cells.
r14014 this.code_mirror.refresh();
this.auto_highlight();
Brian E. Granger
Semicolon cleanup.
r14092 }
Brian E. Granger
More work on the dual mode UX.
r14015 return cont;
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352 };
Brian E. Granger
Adding new logic to cells.
r14014 CodeCell.prototype.render = function () {
Jonathan Frederic
Fix all the bugs!
r17203 var cont = Cell.prototype.render.apply(this);
Brian E. Granger
More work on the dual mode UX.
r14015 // Always execute, even if we are already in the rendered state
return cont;
Brian E. Granger
Starting work on select/focus logic.
r14013 };
Brian E. Granger
More work on the dual mode UX.
r14015
Brian E. Granger
Ctrl-Enter now does not delete input, but selects it.
r4675 CodeCell.prototype.select_all = function () {
var start = {line: 0, ch: 0};
var nlines = this.code_mirror.lineCount();
var last_line = this.code_mirror.getLine(nlines-1);
var end = {line: nlines-1, ch: last_line.length};
this.code_mirror.setSelection(start, end);
};
Brian E. Granger
Cleaning up output management in code and menus.
r14867 CodeCell.prototype.collapse_output = function () {
MinRK
restore collapsed state for cells...
r7524 this.collapsed = true;
this.output_area.collapse();
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168 };
Brian E. Granger
Cleaning up output management in code and menus.
r14867 CodeCell.prototype.expand_output = function () {
MinRK
restore collapsed state for cells...
r7524 this.collapsed = false;
this.output_area.expand();
Brian E. Granger
Cleaning up output management in code and menus.
r14867 this.output_area.unscroll_area();
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168 };
Brian E. Granger
Cleaning up output management in code and menus.
r14867 CodeCell.prototype.scroll_output = function () {
this.output_area.expand();
this.output_area.scroll_if_long();
};
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168
CodeCell.prototype.toggle_output = function () {
MinRK
restore collapsed state for cells...
r7524 this.collapsed = Boolean(1 - this.collapsed);
this.output_area.toggle_output();
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168 };
MinRK
add ^M-O for toggling output scroll
r7429 CodeCell.prototype.toggle_output_scroll = function () {
Brian E. Granger
Cleaning up output management in code and menus.
r14867 this.output_area.toggle_scroll();
MinRK
add ^M-O for toggling output scroll
r7429 };
Bussonnier Matthias
add ability to create continuation prompt
r8467 CodeCell.input_prompt_classical = function (prompt_value, lines_number) {
Matthias BUSSONNIER
avoid injection in input prompt
r14714 var ns;
Paul Ivanov
minor fixes to docs to address PR feedback
r15820 if (prompt_value === undefined) {
Matthias BUSSONNIER
avoid injection in input prompt
r14714 ns = "&nbsp;";
} else {
ns = encodeURIComponent(prompt_value);
}
MinRK
jshint on codecell
r13210 return 'In&nbsp;[' + ns + ']:';
Bussonnier Matthias
add ability to create continuation prompt
r8467 };
Matthias BUSSONNIER
start docummenting kernel
r8768
Bussonnier Matthias
add ability to create continuation prompt
r8467 CodeCell.input_prompt_continuation = function (prompt_value, lines_number) {
var html = [CodeCell.input_prompt_classical(prompt_value, lines_number)];
MinRK
jshint on codecell
r13210 for(var i=1; i < lines_number; i++) {
html.push(['...:']);
}
return html.join('<br/>');
Bussonnier Matthias
add ability to create continuation prompt
r8467 };
Matthias BUSSONNIER
start docummenting kernel
r8768
Bussonnier Matthias
add ability to create continuation prompt
r8467 CodeCell.input_prompt_function = CodeCell.input_prompt_classical;
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168 CodeCell.prototype.set_input_prompt = function (number) {
MinRK
jshint on codecell
r13210 var nline = 1;
if (this.code_mirror !== undefined) {
Bussonnier Matthias
add ability to create continuation prompt
r8467 nline = this.code_mirror.lineCount();
}
Paul Ivanov
clear In[ ] prompt numbers again
r8603 this.input_prompt_number = number;
Bussonnier Matthias
add ability to create continuation prompt
r8467 var prompt_html = CodeCell.input_prompt_function(this.input_prompt_number, nline);
Jonathan Frederic
Audit .html() calls take #2
r15376 // This HTML call is okay because the user contents are escaped.
Bussonnier Matthias
add ability to create continuation prompt
r8467 this.element.find('div.input_prompt').html(prompt_html);
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168 };
CodeCell.prototype.clear_input = function () {
this.code_mirror.setValue('');
};
CodeCell.prototype.get_text = function () {
return this.code_mirror.getValue();
};
CodeCell.prototype.set_text = function (code) {
return this.code_mirror.setValue(code);
};
MinRK
fixup bad rebase
r13102 CodeCell.prototype.clear_output = function (wait) {
this.output_area.clear_output(wait);
Brian E. Granger
Cleaning up output management in code and menus.
r14867 this.set_input_prompt();
MinRK
[notebook] clear_output is handled after a delay...
r6423 };
Brian Granger
Major refactoring of the Notebook, Kernel and CodeCell JavaScript....
r7168
// JSON serialization
Brian E. Granger
Splitting notebook.js into muliple files for development ease.
r4349
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352 CodeCell.prototype.fromJSON = function (data) {
Jonathan Frederic
Fix all the bugs!
r17203 Cell.prototype.fromJSON.apply(this, arguments);
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352 if (data.cell_type === 'code') {
Brian E. Granger
Massive work on the notebook document format....
r4484 if (data.input !== undefined) {
Brian Granger
Work on the base Cell API....
r5943 this.set_text(data.input);
Paul Ivanov
fix for #1678, undo no longer clears cells...
r7587 // make this value the starting point, so that we can only undo
// to this state, instead of a blank cell
this.code_mirror.clearHistory();
Matthias BUSSONNIER
autochange highlight with cell magics...
r8202 this.auto_highlight();
Brian E. Granger
Massive work on the notebook document format....
r4484 }
if (data.prompt_number !== undefined) {
this.set_input_prompt(data.prompt_number);
} else {
this.set_input_prompt();
MinRK
jshint on codecell
r13210 }
MinRK
trust is stored in code_cell.metadata...
r18255 this.output_area.trusted = data.metadata.trusted || false;
Brian Granger
Refactored CodeCell to use new OutputArea object for output....
r7177 this.output_area.fromJSON(data.outputs);
Brian E. Granger
Added collapsed field to the code cell.
r4533 if (data.collapsed !== undefined) {
if (data.collapsed) {
Brian E. Granger
Cleaning up output management in code and menus.
r14867 this.collapse_output();
Brian Granger
Fixing minor bugs in nbformat and saving....
r6032 } else {
Brian E. Granger
Cleaning up output management in code and menus.
r14867 this.expand_output();
MinRK
jshint on codecell
r13210 }
}
}
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352 };
CodeCell.prototype.toJSON = function () {
Jonathan Frederic
Fix all the bugs!
r17203 var data = Cell.prototype.toJSON.apply(this);
Brian Granger
Work on the base Cell API....
r5943 data.input = this.get_text();
Matthias BUSSONNIER
prompt '*' strore fix + tab remove tooltip...
r13572 // is finite protect against undefined and '*' value
if (isFinite(this.input_prompt_number)) {
Stefan van der Walt
Clean up javascript based on js2-mode feedback.
r5479 data.prompt_number = this.input_prompt_number;
MinRK
jshint on codecell
r13210 }
Brian Granger
Refactored CodeCell to use new OutputArea object for output....
r7177 var outputs = this.output_area.toJSON();
Brian E. Granger
Added saving and loading of output of all types.
r4497 data.outputs = outputs;
Brian E. Granger
Massive work on the notebook document format....
r4484 data.language = 'python';
MinRK
trust is stored in code_cell.metadata...
r18255 data.metadata.trusted = this.output_area.trusted;
data.collapsed = this.output_area.collapsed;
Brian E. Granger
Massive work on the notebook document format....
r4484 return data;
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352 };
Jonathan Frederic
Add logic to close tt when cell is unselected
r15793 /**
* handle cell level logic when a cell is unselected
* @method unselect
* @return is the action being taken
*/
CodeCell.prototype.unselect = function () {
Jonathan Frederic
Fix all the bugs!
r17203 var cont = Cell.prototype.unselect.apply(this);
Jonathan Frederic
Add logic to close tt when cell is unselected
r15793 if (cont) {
Jonathan Frederic
Added some comments
r15818 // When a code cell is usnelected, make sure that the corresponding
Jonathan Frederic
Getting a lot closer...
r15952 // tooltip and completer to that cell is closed.
Jonathan Frederic
Almost done!...
r17198 this.tooltip.remove_and_cancel_tooltip(true);
Jonathan Frederic
Getting a lot closer...
r15952 if (this.completer !== null) {
this.completer.close();
}
Jonathan Frederic
Add logic to close tt when cell is unselected
r15793 }
return cont;
};
Brian E. Granger
Added saving and loading of output of all types.
r4497
Jonathan Frederic
Almost done!...
r17198 // Backwards compatability.
Brian E. Granger
Implemented module and namespace pattern in js notebook.
r4352 IPython.CodeCell = CodeCell;
Jonathan Frederic
Return dicts instead of classes,...
r17201 return {'CodeCell': CodeCell};
Jonathan Frederic
Almost done!...
r17198 });