From 893572d3ad7803697aa48678da74ac8d445e00ec Mon Sep 17 00:00:00 2001 From: Brian Granger Date: Tue, 7 Feb 2012 08:57:06 -0800 Subject: [PATCH 1/2] Wired up the javascript display protocol using eval. --- IPython/frontend/html/notebook/static/js/codecell.js | 8 ++++++++ IPython/frontend/html/notebook/static/js/notebook.js | 1 - 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/IPython/frontend/html/notebook/static/js/codecell.js b/IPython/frontend/html/notebook/static/js/codecell.js index eac9a2808..f284e575a 100644 --- a/IPython/frontend/html/notebook/static/js/codecell.js +++ b/IPython/frontend/html/notebook/static/js/codecell.js @@ -655,6 +655,8 @@ var IPython = (function (IPython) { CodeCell.prototype.append_mime_type = function (json, element) { if (json.html !== undefined) { this.append_html(json.html, element); + } else if (json.javascript !== undefined) { + this.append_javascript(json.javascript, element); } else if (json.latex !== undefined) { this.append_latex(json.latex, element); } else if (json.svg !== undefined) { @@ -676,6 +678,12 @@ var IPython = (function (IPython) { }; + CodeCell.prototype.append_javascript = function (js, element) { + // We just eval the JS code, element appears in the local scope. + eval(js); + } + + CodeCell.prototype.append_text = function (data, element, extra_class) { var toinsert = $("
").addClass("box_flex1 output_subarea output_text"); // escape ANSI & HTML specials in plaintext: diff --git a/IPython/frontend/html/notebook/static/js/notebook.js b/IPython/frontend/html/notebook/static/js/notebook.js index 898672bf1..013bba571 100644 --- a/IPython/frontend/html/notebook/static/js/notebook.js +++ b/IPython/frontend/html/notebook/static/js/notebook.js @@ -993,7 +993,6 @@ var IPython = (function (IPython) { } else if (msg_type === 'status') { if (content.execution_state === 'busy') { $([IPython.events]).trigger('status_busy.Kernel'); - IPython.kernel_status_widget.status_busy(); } else if (content.execution_state === 'idle') { $([IPython.events]).trigger('status_idle.Kernel'); } else if (content.execution_state === 'dead') { From 5ef2e06a4229aacc07d9b31337b02e0c5dfbf565 Mon Sep 17 00:00:00 2001 From: Brian Granger Date: Tue, 7 Feb 2012 09:18:23 -0800 Subject: [PATCH 2/2] Javascript output is not run on notebook loading and paste's. --- .../html/notebook/static/js/codecell.js | 30 +++++++++++-------- .../html/notebook/static/js/notebook.js | 3 +- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/IPython/frontend/html/notebook/static/js/codecell.js b/IPython/frontend/html/notebook/static/js/codecell.js index f284e575a..82da3f40a 100644 --- a/IPython/frontend/html/notebook/static/js/codecell.js +++ b/IPython/frontend/html/notebook/static/js/codecell.js @@ -563,14 +563,15 @@ var IPython = (function (IPython) { }; - CodeCell.prototype.append_output = function (json) { + CodeCell.prototype.append_output = function (json, dynamic) { + // If dynamic is true, javascript output will be eval'd. this.expand(); if (json.output_type === 'pyout') { - this.append_pyout(json); + this.append_pyout(json, dynamic); } else if (json.output_type === 'pyerr') { this.append_pyerr(json); } else if (json.output_type === 'display_data') { - this.append_display_data(json); + this.append_display_data(json, dynamic); } else if (json.output_type === 'stream') { this.append_stream(json); }; @@ -585,11 +586,11 @@ var IPython = (function (IPython) { }; - CodeCell.prototype.append_pyout = function (json) { + CodeCell.prototype.append_pyout = function (json, dynamic) { n = json.prompt_number || ' '; var toinsert = this.create_output_area(); toinsert.find('div.prompt').addClass('output_prompt').html('Out[' + n + ']:'); - this.append_mime_type(json, toinsert); + this.append_mime_type(json, toinsert, dynamic); this.element.find('div.output').append(toinsert); // If we just output latex, typeset it. if ((json.latex !== undefined) || (json.html !== undefined)) { @@ -641,9 +642,9 @@ var IPython = (function (IPython) { }; - CodeCell.prototype.append_display_data = function (json) { + CodeCell.prototype.append_display_data = function (json, dynamic) { var toinsert = this.create_output_area(); - this.append_mime_type(json, toinsert); + this.append_mime_type(json, toinsert, dynamic); this.element.find('div.output').append(toinsert); // If we just output latex, typeset it. if ( (json.latex !== undefined) || (json.html !== undefined) ) { @@ -652,11 +653,11 @@ var IPython = (function (IPython) { }; - CodeCell.prototype.append_mime_type = function (json, element) { - if (json.html !== undefined) { + CodeCell.prototype.append_mime_type = function (json, element, dynamic) { + if (json.javascript !== undefined && dynamic) { + this.append_javascript(json.javascript, element, dynamic); + } else if (json.html !== undefined) { this.append_html(json.html, element); - } else if (json.javascript !== undefined) { - this.append_javascript(json.javascript, element); } else if (json.latex !== undefined) { this.append_latex(json.latex, element); } else if (json.svg !== undefined) { @@ -678,8 +679,10 @@ var IPython = (function (IPython) { }; - CodeCell.prototype.append_javascript = function (js, element) { + CodeCell.prototype.append_javascript = function (js, e) { // We just eval the JS code, element appears in the local scope. + var element = $("
").addClass("box_flex1 output_subarea"); + e.append(element); eval(js); } @@ -842,7 +845,8 @@ var IPython = (function (IPython) { }; var len = data.outputs.length; for (var i=0; i