diff --git a/IPython/frontend/html/notebook/widgets/directview.js b/IPython/frontend/html/notebook/widgets/directview.js index 14aa014..7489a96 100644 --- a/IPython/frontend/html/notebook/widgets/directview.js +++ b/IPython/frontend/html/notebook/widgets/directview.js @@ -28,6 +28,19 @@ 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); + + 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); + var input = $('<div></div>').addClass('input hbox'); var input_area = $('<div/>').addClass('input_area box-flex1'); this.code_mirror = CodeMirror(input_area.get(0), { @@ -38,7 +51,9 @@ DirectViewWidget.prototype.create_element = function () { }); input.append(input_area); var output = $('<div></div>'); - this.element.append(input).append(output); + + + this.element.append(control).append(input).append(output); this.output_area = new IPython.OutputArea(output, false); }; @@ -100,7 +115,11 @@ DirectViewWidget.prototype.execute = function () { 'output': $.proxy(this.output_area.handle_output, this.output_area), 'clear_output': $.proxy(this.output_area.handle_clear_output, this.output_area), }; - var code = '%(widget_var)s.execute("""'+this.get_text()+'""")'; + 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+')'; console.log(code); console.log(this.get_text()); var msg_id = this.kernel.execute(code, callbacks, {silent: false}); diff --git a/IPython/frontend/html/notebook/widgets/directview.py b/IPython/frontend/html/notebook/widgets/directview.py index c01b212..b0c20c6 100644 --- a/IPython/frontend/html/notebook/widgets/directview.py +++ b/IPython/frontend/html/notebook/widgets/directview.py @@ -50,18 +50,25 @@ class DirectViewWidget(JavascriptWidget): jscode = jscode % data return jscode - def execute(self,code): - ar = self.dv.execute(code,block=False,targets='all') + def execute(self, code, targets='all'): + if targets == 'all': + targets = self.targets + ar = self.dv.execute(code,block=False,targets=targets) ar.wait() metadata = ar.metadata - for md in metadata: - if md['stdout']: - publish_pretty(md['stdout'],{'engine_id':md['engine_id']}) - if md['stderr']: - publish_pretty(md['stderr'],{'engine_id':md['engine_id']}) - if md['pyerr']: - publish_pretty(md['pyerr'],{'engine_id':md['engine_id']}) - + if isinstance(metadata, (list,tuple)): + for md in metadata: + self.publish_md(md) + elif isinstance(metadata, dict): + self.publish_md(metadata) + + def publish_md(self, md): + if md['stdout']: + publish_pretty(md['stdout'],{'engine_id':md['engine_id']}) + if md['stderr']: + publish_pretty(md['stderr'],{'engine_id':md['engine_id']}) + if md['pyerr']: + publish_pretty(md['pyerr'],{'engine_id':md['engine_id']}) def interact(dv):