##// END OF EJS Templates
try to fallback to pysqlite2.dbapi2 as sqlite3...
try to fallback to pysqlite2.dbapi2 as sqlite3 for situations where Python is built without sqlite3 and can not easily be changed, it would be nice to still be able to get history with pysqlite2.

File last commit:

r7211:49a9eba4
r8934:09c5f96b
Show More
directview.js
172 lines | 5.6 KiB | application/javascript | JavascriptLexer
Brian Granger
Adding new widgets subpackage with base widget and example.
r7198 //----------------------------------------------------------------------------
// Copyright (C) 2008-2012 The IPython Development Team
//
// Distributed under the terms of the BSD License. The full license is in
// the file COPYING, distributed as part of this software.
//----------------------------------------------------------------------------
//============================================================================
// EngineInteract
//============================================================================
var key = IPython.utils.keycodes;
var DirectViewWidget = function (selector, kernel, targets) {
// 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.
this.selector = selector;
this.element = $(selector);
this.kernel = kernel || null;
this.code_mirror = null;
this.targets = targets;
this.create_element();
};
DirectViewWidget.prototype.create_element = function () {
this.element.addClass('cell border-box-sizing code_cell vbox');
this.element.attr('tabindex','2');
this.element.css('padding-right',0);
Brian Granger
Adding engine selection UI control to DirectViewWidget.
r7200
var control = $('<div/>').addClass('dv_control').height('30px');
var control_label = $('<span/>').html('Select engine(s) to run code on interactively: ');
control_label.css('line-height','30px');
var select = $('<select/>').addClass('dv_select ui-widget ui-widget-content');
select.css('font-size','85%%').css('margin-bottom','5px');
var n = this.targets.length;
select.append($('<option/>').html('all').attr('value','all'));
for (var i=0; i<n; i++) {
select.append($('<option/>').html(this.targets[i]).attr('value',this.targets[i]))
}
control.append(control_label).append(select);
Brian Granger
Adding new widgets subpackage with base widget and example.
r7198 var input = $('<div></div>').addClass('input hbox');
var input_area = $('<div/>').addClass('input_area box-flex1');
this.code_mirror = CodeMirror(input_area.get(0), {
indentUnit : 4,
mode: 'python',
theme: 'ipython',
onKeyEvent: $.proxy(this.handle_codemirror_keyevent,this)
});
input.append(input_area);
var output = $('<div></div>');
Brian Granger
Adding engine selection UI control to DirectViewWidget.
r7200
this.element.append(control).append(input).append(output);
Brian Granger
Adding new widgets subpackage with base widget and example.
r7198 this.output_area = new IPython.OutputArea(output, false);
};
DirectViewWidget.prototype.handle_codemirror_keyevent = function (editor, event) {
// 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.
var that = this;
var cur = editor.getCursor();
if (event.keyCode === key.ENTER && event.shiftKey && event.type === 'keydown') {
// Always ignore shift-enter in CodeMirror as we handle it.
event.stop();
that.execute();
return true;
} else if (event.keyCode === key.UP && event.type === 'keydown') {
event.stop();
return false;
} else if (event.keyCode === key.DOWN && event.type === 'keydown') {
event.stop();
return false;
} else if (event.keyCode === key.BACKSPACE && event.type == 'keydown') {
// If backspace and the line ends with 4 spaces, remove them.
var line = editor.getLine(cur.line);
var ending = line.slice(-4);
if (ending === ' ') {
editor.replaceRange('',
{line: cur.line, ch: cur.ch-4},
{line: cur.line, ch: cur.ch}
);
event.stop();
return true;
} else {
return false;
};
};
return false;
};
// Kernel related calls.
DirectViewWidget.prototype.set_kernel = function (kernel) {
this.kernel = kernel;
}
DirectViewWidget.prototype.execute = function () {
this.output_area.clear_output(true, true, true);
this.element.addClass("running");
var callbacks = {
'execute_reply': $.proxy(this._handle_execute_reply, this),
'output': $.proxy(this.output_area.handle_output, this.output_area),
'clear_output': $.proxy(this.output_area.handle_clear_output, this.output_area),
};
Brian Granger
Adding engine selection UI control to DirectViewWidget.
r7200 var target = this.element.find('.dv_select option:selected').attr('value');
if (target === 'all') {
target = '"all"';
}
var code = '%(widget_var)s.execute("""'+this.get_text()+'""",targets='+target+')';
Brian Granger
Adding new widgets subpackage with base widget and example.
r7198 var msg_id = this.kernel.execute(code, callbacks, {silent: false});
this.clear_input();
this.code_mirror.focus();
};
DirectViewWidget.prototype._handle_execute_reply = function (content) {
this.element.removeClass("running");
// this.dirty = true;
}
// Basic cell manipulation.
DirectViewWidget.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);
};
DirectViewWidget.prototype.clear_input = function () {
this.code_mirror.setValue('');
};
DirectViewWidget.prototype.get_text = function () {
return this.code_mirror.getValue();
};
DirectViewWidget.prototype.set_text = function (code) {
return this.code_mirror.setValue(code);
};
container.show();
var widget = $('<div/>')
// When templating over a JSON string, we must use single quotes.
var targets = '%(targets)s';
targets = $.parseJSON(targets);
var eiw = new DirectViewWidget(widget, IPython.notebook.kernel, targets);
element.append(widget);
element.css('padding',0);
setTimeout(function () {
eiw.code_mirror.refresh();
eiw.code_mirror.focus();
}, 1);