$(function() {
var sourceView = null;
/**
* if we are in console mode, show the console.
*/
if (CONSOLE_MODE && EVALEX) {
openShell(null, $('div.console div.inner').empty(), 0);
}
$('div.traceback div.frame').each(function() {
var
target = $('pre', this)
.click(function() {
sourceButton.click();
}),
consoleNode = null, source = null,
frameID = this.id.substring(6);
/**
* Add an interactive console to the frames
*/
if (EVALEX)
$('
')
.attr('title', 'Open an interactive python shell in this frame')
.click(function() {
consoleNode = openShell(consoleNode, target, frameID);
return false;
})
.prependTo(target);
/**
* Show sourcecode
*/
var sourceButton = $('
')
.attr('title', 'Display the sourcecode for this frame')
.click(function() {
if (!sourceView)
$('h2', sourceView =
$('
To switch between the interactive traceback and the plaintext ' + 'one, you can click on the "Traceback" headline. From the text ' + 'traceback you can also create a paste of it. ' + (!EVALEX ? '' : 'For code execution mouse-over the frame you want to debug and ' + 'click on the console icon on the right side.' + '
You can execute arbitrary Python code in the stack frames and ' + 'there are some extra helpers available for introspection:' + '
dump() shows all variables in the frame' +
'dump(obj) dumps all that\'s known about the object').text(plainTraceback.text()));
});
/**
* Helper function for shell initialization
*/
function openShell(consoleNode, target, frameID) {
if (consoleNode)
return consoleNode.slideToggle('fast');
consoleNode = $('')
.appendTo(target.parent())
.hide()
var historyPos = 0, history = [''];
var output = $('[console ready]')
.appendTo(consoleNode);
var form = $('')
.submit(function() {
var cmd = command.val();
$.get('', {
__debugger__: 'yes', cmd: cmd, frm: frameID, s: SECRET}, function(data) {
var tmp = $('