From 3689489b62eb0e2ee0afb85a90f3f8cd2528410d Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Mon, 30 Apr 2018 21:44:58 -0500 Subject: [PATCH 01/11] Disable ForeignHandler by default and add command console:toggle-echo to enable ForeighHandler through context menu jupyterlab/jupyterlab#4424 --- packages/console-extension/src/index.ts | 16 ++++++++++++++++ packages/console/src/foreign.ts | 2 +- packages/console/src/widget.ts | 7 +++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts index 8d244c125ce9..04f186e8954f 100644 --- a/packages/console-extension/src/index.ts +++ b/packages/console-extension/src/index.ts @@ -86,6 +86,9 @@ namespace CommandIDs { export const changeKernel = 'console:change-kernel'; + + export + const toggleEcho = 'console:toggle-echo'; } @@ -399,6 +402,17 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand isEnabled }); + commands.addCommand(CommandIDs.toggleEcho, { + label: 'Toggle echo…', + execute: args => { + let current = getCurrent(args); + if (!current) { + return; + } + return current.console.toggleForeignHandler(); + }, + isEnabled + }); // Add command palette items [ CommandIDs.create, @@ -410,6 +424,7 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand CommandIDs.interrupt, CommandIDs.changeKernel, CommandIDs.closeAndShutdown, + CommandIDs.toggleEcho, ].forEach(command => { palette.addItem({ command, category, args: { 'isPalette': true } }); }); @@ -487,6 +502,7 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand app.contextMenu.addItem({command: CommandIDs.clear, selector: '.jp-CodeConsole-content'}); app.contextMenu.addItem({command: CommandIDs.restart, selector: '.jp-CodeConsole'}); + app.contextMenu.addItem({command: CommandIDs.toggleEcho, selector: '.jp-CodeConsole'}); return tracker; } diff --git a/packages/console/src/foreign.ts b/packages/console/src/foreign.ts index 47ee4213fb44..08306fc0f5ce 100644 --- a/packages/console/src/foreign.ts +++ b/packages/console/src/foreign.ts @@ -160,7 +160,7 @@ class ForeignHandler implements IDisposable { } private _cells = new Map(); - private _enabled = true; + private _enabled = false; private _parent: ForeignHandler.IReceiver; private _factory: () => CodeCell; private _isDisposed = false; diff --git a/packages/console/src/widget.ts b/packages/console/src/widget.ts index ac64efb82f64..52f800e79380 100644 --- a/packages/console/src/widget.ts +++ b/packages/console/src/widget.ts @@ -274,6 +274,13 @@ class CodeConsole extends Widget { super.dispose(); } + /** + * Toggle ForeignHandler + */ + toggleForeignHandler() { + this._foreignHandler.enabled = ! this._foreignHandler.enabled; + } + /** * Execute the current prompt. * From 0a7daf91e6eec243bb1afd1310c35794ea67595e Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Mon, 30 Apr 2018 22:21:56 -0500 Subject: [PATCH 02/11] Fix test for default value of foreignHandler.enabled --- tests/test-console/src/foreign.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test-console/src/foreign.spec.ts b/tests/test-console/src/foreign.spec.ts index 973d22dadc60..beb0e281da31 100644 --- a/tests/test-console/src/foreign.spec.ts +++ b/tests/test-console/src/foreign.spec.ts @@ -148,7 +148,7 @@ describe('@jupyterlab/console', () => { describe('#enabled', () => { it('should default to `true`', () => { - expect(handler.enabled).to.be(true); + expect(handler.enabled).to.be(false); }); it('should allow foreign cells to be injected if `true`', done => { From 59a4d6e2f6d7fd69a2858ca3ab810aeb6e1c5053 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Tue, 1 May 2018 00:20:21 -0500 Subject: [PATCH 03/11] Implement toggle in extension, and other improvements --- packages/console-extension/src/index.ts | 5 +++-- packages/console/src/widget.ts | 10 +++++++--- tests/test-console/src/foreign.spec.ts | 3 ++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts index 04f186e8954f..32bfa56c31b3 100644 --- a/packages/console-extension/src/index.ts +++ b/packages/console-extension/src/index.ts @@ -403,13 +403,14 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand }); commands.addCommand(CommandIDs.toggleEcho, { - label: 'Toggle echo…', + label: 'Toggle echo', execute: args => { let current = getCurrent(args); if (!current) { return; } - return current.console.toggleForeignHandler(); + current.console.echoEnabled = !current.console.echoEnabled; + return current.console.echoEnabled; }, isEnabled }); diff --git a/packages/console/src/widget.ts b/packages/console/src/widget.ts index 52f800e79380..7af290df0b70 100644 --- a/packages/console/src/widget.ts +++ b/packages/console/src/widget.ts @@ -275,10 +275,14 @@ class CodeConsole extends Widget { } /** - * Toggle ForeignHandler + * Set whether the foreignHandler is able to inject foreign cells into a + * console. */ - toggleForeignHandler() { - this._foreignHandler.enabled = ! this._foreignHandler.enabled; + get echoEnabled(): boolean { + return this._foreignHandler.enabled; + } + set echoEnabled(value: boolean) { + this._foreignHandler.enabled = value; } /** diff --git a/tests/test-console/src/foreign.spec.ts b/tests/test-console/src/foreign.spec.ts index beb0e281da31..6766f8f4297b 100644 --- a/tests/test-console/src/foreign.spec.ts +++ b/tests/test-console/src/foreign.spec.ts @@ -147,12 +147,13 @@ describe('@jupyterlab/console', () => { describe('#enabled', () => { - it('should default to `true`', () => { + it('should default to `false`', () => { expect(handler.enabled).to.be(false); }); it('should allow foreign cells to be injected if `true`', done => { let code = 'print("#enabled:true")'; + handler.enabled = true; handler.injected.connect(() => { done(); }); foreign.kernel.requestExecute({ code, stop_on_error: true }); }); From 4b1d224e56dcdf96945c60591f418f76e7dbd92f Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Tue, 1 May 2018 15:09:57 -0500 Subject: [PATCH 04/11] Use AllActivity instead of echo to better describe the effect of the option --- packages/console-extension/src/index.ts | 14 +++++++------- packages/console/src/widget.ts | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts index 32bfa56c31b3..205112b71d00 100644 --- a/packages/console-extension/src/index.ts +++ b/packages/console-extension/src/index.ts @@ -88,7 +88,7 @@ namespace CommandIDs { const changeKernel = 'console:change-kernel'; export - const toggleEcho = 'console:toggle-echo'; + const toggleShowAllActivity = 'console:toggle-show-all-kernel-activity'; } @@ -402,16 +402,16 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand isEnabled }); - commands.addCommand(CommandIDs.toggleEcho, { - label: 'Toggle echo', + commands.addCommand(CommandIDs.toggleShowAllActivity, { + label: args => args['isPalette'] ? 'Show only console activity' : 'Show all kernel activity', execute: args => { let current = getCurrent(args); if (!current) { return; } - current.console.echoEnabled = !current.console.echoEnabled; - return current.console.echoEnabled; + current.console.showAllActivity = !current.console.showAllActivity; }, + isToggled: () => tracker.currentWidget.console.showAllActivity, isEnabled }); // Add command palette items @@ -425,7 +425,7 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand CommandIDs.interrupt, CommandIDs.changeKernel, CommandIDs.closeAndShutdown, - CommandIDs.toggleEcho, + CommandIDs.toggleShowAllActivity, ].forEach(command => { palette.addItem({ command, category, args: { 'isPalette': true } }); }); @@ -503,7 +503,7 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand app.contextMenu.addItem({command: CommandIDs.clear, selector: '.jp-CodeConsole-content'}); app.contextMenu.addItem({command: CommandIDs.restart, selector: '.jp-CodeConsole'}); - app.contextMenu.addItem({command: CommandIDs.toggleEcho, selector: '.jp-CodeConsole'}); + app.contextMenu.addItem({command: CommandIDs.toggleShowAllActivity, selector: '.jp-CodeConsole'}); return tracker; } diff --git a/packages/console/src/widget.ts b/packages/console/src/widget.ts index 7af290df0b70..463e43942a3a 100644 --- a/packages/console/src/widget.ts +++ b/packages/console/src/widget.ts @@ -278,10 +278,10 @@ class CodeConsole extends Widget { * Set whether the foreignHandler is able to inject foreign cells into a * console. */ - get echoEnabled(): boolean { + get showAllActivity(): boolean { return this._foreignHandler.enabled; } - set echoEnabled(value: boolean) { + set showAllActivity(value: boolean) { this._foreignHandler.enabled = value; } From 180d0411887258cc7a45aaa582c81d1b1ff4cb90 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Tue, 1 May 2018 15:32:17 -0500 Subject: [PATCH 05/11] Use a fixed label for menu item because of the use of isToggled --- packages/console-extension/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts index 205112b71d00..e95ddd874fcd 100644 --- a/packages/console-extension/src/index.ts +++ b/packages/console-extension/src/index.ts @@ -403,7 +403,7 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand }); commands.addCommand(CommandIDs.toggleShowAllActivity, { - label: args => args['isPalette'] ? 'Show only console activity' : 'Show all kernel activity', + label: args => 'Show all kernel activity', execute: args => { let current = getCurrent(args); if (!current) { From 10b74d843d10b680f4e2adecb2790d751f02ab3b Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Tue, 1 May 2018 15:34:21 -0500 Subject: [PATCH 06/11] Change the label to Show all other kernel activity --- packages/console-extension/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts index e95ddd874fcd..6602116c1eff 100644 --- a/packages/console-extension/src/index.ts +++ b/packages/console-extension/src/index.ts @@ -403,7 +403,7 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand }); commands.addCommand(CommandIDs.toggleShowAllActivity, { - label: args => 'Show all kernel activity', + label: args => 'Show all other kernel activity', execute: args => { let current = getCurrent(args); if (!current) { From 33cba8d384b8bed43523544b06652c0c3dc03ac4 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Tue, 1 May 2018 15:45:06 -0500 Subject: [PATCH 07/11] Change the label to Show All Other Kernel Activity --- packages/console-extension/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts index 6602116c1eff..b88e8df47462 100644 --- a/packages/console-extension/src/index.ts +++ b/packages/console-extension/src/index.ts @@ -403,7 +403,7 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand }); commands.addCommand(CommandIDs.toggleShowAllActivity, { - label: args => 'Show all other kernel activity', + label: args => 'Show All Other Kernel Activity', execute: args => { let current = getCurrent(args); if (!current) { From ae2a6a67c7e27cfe45ba66aa42a18c87c98cb6da Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Tue, 1 May 2018 15:47:48 -0500 Subject: [PATCH 08/11] Change the label to Show All Kernel Activity --- packages/console-extension/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts index b88e8df47462..6835ebae5800 100644 --- a/packages/console-extension/src/index.ts +++ b/packages/console-extension/src/index.ts @@ -403,7 +403,7 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand }); commands.addCommand(CommandIDs.toggleShowAllActivity, { - label: args => 'Show All Other Kernel Activity', + label: args => 'Show All Kernel Activity', execute: args => { let current = getCurrent(args); if (!current) { From 03f5dd42993b0cdc1968473300660c35359db8f3 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Tue, 1 May 2018 21:02:39 -0500 Subject: [PATCH 09/11] Use label Toggle Show All Kernel Activity for the item in command palette --- packages/console-extension/src/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts index 6835ebae5800..3ce50b9dc906 100644 --- a/packages/console-extension/src/index.ts +++ b/packages/console-extension/src/index.ts @@ -403,7 +403,8 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand }); commands.addCommand(CommandIDs.toggleShowAllActivity, { - label: args => 'Show All Kernel Activity', + label: args => args['isPalette'] ? 'Toggle Show All Kernel Activity' : 'Show All Kernel Activity', + execute: args => { let current = getCurrent(args); if (!current) { From 5c02625d9c11b755f90ce0b1bc3fe9675555aab8 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Wed, 2 May 2018 10:21:34 -0500 Subject: [PATCH 10/11] Fix console tests broken due to default inactive foreignHandler --- tests/test-console/src/foreign.spec.ts | 2 ++ tests/test-console/src/widget.spec.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/tests/test-console/src/foreign.spec.ts b/tests/test-console/src/foreign.spec.ts index 6766f8f4297b..0e9c472963f5 100644 --- a/tests/test-console/src/foreign.spec.ts +++ b/tests/test-console/src/foreign.spec.ts @@ -225,6 +225,7 @@ describe('@jupyterlab/console', () => { it('should inject relevant cells into the parent', done => { let code = 'print("#onIOPubMessage:enabled")'; + handler.enabled = true; let parent = handler.parent as TestParent; expect(parent.widgets.length).to.be(0); handler.injected.connect(() => { @@ -237,6 +238,7 @@ describe('@jupyterlab/console', () => { it('should not reject relevant iopub messages', done => { let code = 'print("#onIOPubMessage:relevant")'; let called = 0; + handler.enabled = true; handler.rejected.connect(() => { done(new Error('rejected relevant iopub message')); }); diff --git a/tests/test-console/src/widget.spec.ts b/tests/test-console/src/widget.spec.ts index d84a90f7d00c..b797415ffd53 100644 --- a/tests/test-console/src/widget.spec.ts +++ b/tests/test-console/src/widget.spec.ts @@ -104,6 +104,7 @@ describe('console/widget', () => { it('should reflect the contents of the widget', () => { let force = true; + widget.showAllActivity = true; Widget.attach(widget, document.body); return (widget.session as ClientSession).initialize().then(() => { return widget.execute(force); From 6162f3e807ebfb53809dbbaa8975471aba2b2629 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Wed, 2 May 2018 13:33:24 -0500 Subject: [PATCH 11/11] Check tracker.currentWidget in isToggled --- packages/console-extension/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts index 3ce50b9dc906..1d2e26ad7a55 100644 --- a/packages/console-extension/src/index.ts +++ b/packages/console-extension/src/index.ts @@ -412,7 +412,7 @@ function activateConsole(app: JupyterLab, mainMenu: IMainMenu, palette: ICommand } current.console.showAllActivity = !current.console.showAllActivity; }, - isToggled: () => tracker.currentWidget.console.showAllActivity, + isToggled: () => tracker.currentWidget ? tracker.currentWidget.console.showAllActivity : false, isEnabled }); // Add command palette items