From 3e7942951ce965b743e72ca7962a6f0a69430aa5 Mon Sep 17 00:00:00 2001 From: Mehmet Bektas Date: Thu, 14 Feb 2019 16:57:44 -0800 Subject: [PATCH 1/3] add ability to toggle status bar visibility --- packages/statusbar-extension/package.json | 2 + .../statusbar-extension/schema/plugin.json | 6 +++ packages/statusbar-extension/src/index.ts | 50 ++++++++++++++++++- packages/statusbar-extension/tsconfig.json | 6 +++ 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/packages/statusbar-extension/package.json b/packages/statusbar-extension/package.json index fab8f7bd2123..2591ff5d1fe6 100644 --- a/packages/statusbar-extension/package.json +++ b/packages/statusbar-extension/package.json @@ -37,8 +37,10 @@ "@jupyterlab/apputils": "^1.0.0-alpha.3", "@jupyterlab/cells": "^1.0.0-alpha.3", "@jupyterlab/console": "^1.0.0-alpha.3", + "@jupyterlab/coreutils": "^3.0.0-alpha.3", "@jupyterlab/docregistry": "^1.0.0-alpha.3", "@jupyterlab/fileeditor": "^1.0.0-alpha.3", + "@jupyterlab/mainmenu": "^1.0.0-alpha.3", "@jupyterlab/notebook": "^1.0.0-alpha.4", "@jupyterlab/statusbar": "^1.0.0-alpha.3", "@phosphor/widgets": "^1.6.0" diff --git a/packages/statusbar-extension/schema/plugin.json b/packages/statusbar-extension/schema/plugin.json index 17f6b5ecdd8a..db128ea1b63c 100644 --- a/packages/statusbar-extension/schema/plugin.json +++ b/packages/statusbar-extension/schema/plugin.json @@ -21,6 +21,12 @@ "memory-usage-item", "saving-status-item" ] + }, + "visible": { + "type": "boolean", + "title": "Status Bar Visibility", + "description": "Whether to show status bar at launch", + "default": true } }, "additionalProperties": false, diff --git a/packages/statusbar-extension/src/index.ts b/packages/statusbar-extension/src/index.ts index 4c30d2cd3a9a..1a004628b07b 100644 --- a/packages/statusbar-extension/src/index.ts +++ b/packages/statusbar-extension/src/index.ts @@ -7,7 +7,7 @@ import { JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { IClientSession } from '@jupyterlab/apputils'; +import { IClientSession, ICommandPalette } from '@jupyterlab/apputils'; import { Cell, CodeCell } from '@jupyterlab/cells'; @@ -36,6 +36,10 @@ import { StatusBar } from '@jupyterlab/statusbar'; +import { ISettingRegistry } from '@jupyterlab/coreutils'; + +import { IMainMenu } from '@jupyterlab/mainmenu'; + import { Title, Widget } from '@phosphor/widgets'; export const STATUSBAR_PLUGIN_ID = '@jupyterlab/statusbar-extension:plugin'; @@ -46,8 +50,15 @@ export const STATUSBAR_PLUGIN_ID = '@jupyterlab/statusbar-extension:plugin'; const statusBar: JupyterFrontEndPlugin = { id: STATUSBAR_PLUGIN_ID, provides: IStatusBar, + requires: [ISettingRegistry, IMainMenu, ICommandPalette], autoStart: true, - activate: (app: JupyterFrontEnd, labShell: ILabShell | null) => { + activate: ( + app: JupyterFrontEnd, + settingRegistry: ISettingRegistry, + mainMenu: IMainMenu, + palette: ICommandPalette, + labShell: ILabShell | null + ) => { const statusBar = new StatusBar(); statusBar.id = 'jp-main-statusbar'; app.shell.add(statusBar, 'bottom'); @@ -59,6 +70,41 @@ const statusBar: JupyterFrontEndPlugin = { }); } + const category: string = 'Main Area'; + const command: string = 'toggle-jp-main-statusbar'; + + app.commands.addCommand(command, { + label: 'Show Status Bar', + execute: (args: any) => { + statusBar.setHidden(statusBar.isVisible); + settingRegistry.set( + STATUSBAR_PLUGIN_ID, + 'visible', + statusBar.isVisible + ); + }, + isToggled: () => statusBar.isVisible + }); + + palette.addItem({ command, category }); + mainMenu.viewMenu.addGroup([{ command }], 1); + + const updateSettings = (settings: ISettingRegistry.ISettings): void => { + const visible = settings.get('visible').composite as boolean; + statusBar.setHidden(!visible); + }; + + Promise.all([settingRegistry.load(STATUSBAR_PLUGIN_ID), app.restored]) + .then(([settings]) => { + updateSettings(settings); + settings.changed.connect(settings => { + updateSettings(settings); + }); + }) + .catch((reason: Error) => { + console.error(reason.message); + }); + return statusBar; }, optional: [ILabShell] diff --git a/packages/statusbar-extension/tsconfig.json b/packages/statusbar-extension/tsconfig.json index d0d6245041c1..494257101a73 100644 --- a/packages/statusbar-extension/tsconfig.json +++ b/packages/statusbar-extension/tsconfig.json @@ -18,12 +18,18 @@ { "path": "../console" }, + { + "path": "../coreutils" + }, { "path": "../docregistry" }, { "path": "../fileeditor" }, + { + "path": "../mainmenu" + }, { "path": "../notebook" }, From e56129b0ad3b6ff3d5596cee29a4e1a6bca3a41e Mon Sep 17 00:00:00 2001 From: Mehmet Bektas Date: Thu, 14 Feb 2019 18:30:34 -0800 Subject: [PATCH 2/3] make ISettingRegistry, IMainMenu, ICommandPalette optional --- .../statusbar-extension/schema/plugin.json | 2 +- packages/statusbar-extension/src/index.ts | 57 +++++++++++-------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/packages/statusbar-extension/schema/plugin.json b/packages/statusbar-extension/schema/plugin.json index db128ea1b63c..9a8b3a07d181 100644 --- a/packages/statusbar-extension/schema/plugin.json +++ b/packages/statusbar-extension/schema/plugin.json @@ -25,7 +25,7 @@ "visible": { "type": "boolean", "title": "Status Bar Visibility", - "description": "Whether to show status bar at launch", + "description": "Whether to show status bar or not", "default": true } }, diff --git a/packages/statusbar-extension/src/index.ts b/packages/statusbar-extension/src/index.ts index 1a004628b07b..26206b908801 100644 --- a/packages/statusbar-extension/src/index.ts +++ b/packages/statusbar-extension/src/index.ts @@ -50,14 +50,13 @@ export const STATUSBAR_PLUGIN_ID = '@jupyterlab/statusbar-extension:plugin'; const statusBar: JupyterFrontEndPlugin = { id: STATUSBAR_PLUGIN_ID, provides: IStatusBar, - requires: [ISettingRegistry, IMainMenu, ICommandPalette], autoStart: true, activate: ( app: JupyterFrontEnd, - settingRegistry: ISettingRegistry, - mainMenu: IMainMenu, - palette: ICommandPalette, - labShell: ILabShell | null + labShell: ILabShell | null, + settingRegistry: ISettingRegistry | null, + mainMenu: IMainMenu | null, + palette: ICommandPalette | null ) => { const statusBar = new StatusBar(); statusBar.id = 'jp-main-statusbar'; @@ -77,37 +76,45 @@ const statusBar: JupyterFrontEndPlugin = { label: 'Show Status Bar', execute: (args: any) => { statusBar.setHidden(statusBar.isVisible); - settingRegistry.set( - STATUSBAR_PLUGIN_ID, - 'visible', - statusBar.isVisible - ); + if (settingRegistry) { + settingRegistry.set( + STATUSBAR_PLUGIN_ID, + 'visible', + statusBar.isVisible + ); + } }, isToggled: () => statusBar.isVisible }); - palette.addItem({ command, category }); - mainMenu.viewMenu.addGroup([{ command }], 1); + if (palette) { + palette.addItem({ command, category }); + } + if (mainMenu) { + mainMenu.viewMenu.addGroup([{ command }], 1); + } - const updateSettings = (settings: ISettingRegistry.ISettings): void => { - const visible = settings.get('visible').composite as boolean; - statusBar.setHidden(!visible); - }; + if (settingRegistry) { + const updateSettings = (settings: ISettingRegistry.ISettings): void => { + const visible = settings.get('visible').composite as boolean; + statusBar.setHidden(!visible); + }; - Promise.all([settingRegistry.load(STATUSBAR_PLUGIN_ID), app.restored]) - .then(([settings]) => { - updateSettings(settings); - settings.changed.connect(settings => { + Promise.all([settingRegistry.load(STATUSBAR_PLUGIN_ID), app.restored]) + .then(([settings]) => { updateSettings(settings); + settings.changed.connect(settings => { + updateSettings(settings); + }); + }) + .catch((reason: Error) => { + console.error(reason.message); }); - }) - .catch((reason: Error) => { - console.error(reason.message); - }); + } return statusBar; }, - optional: [ILabShell] + optional: [ILabShell, ISettingRegistry, IMainMenu, ICommandPalette] }; /** From d56f41dd29e791fb23e768cfbd75a5d9914b501b Mon Sep 17 00:00:00 2001 From: Mehmet Bektas Date: Thu, 14 Feb 2019 18:33:54 -0800 Subject: [PATCH 3/3] rename status bar toggle command --- packages/statusbar-extension/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/statusbar-extension/src/index.ts b/packages/statusbar-extension/src/index.ts index 26206b908801..7afde6c827eb 100644 --- a/packages/statusbar-extension/src/index.ts +++ b/packages/statusbar-extension/src/index.ts @@ -70,7 +70,7 @@ const statusBar: JupyterFrontEndPlugin = { } const category: string = 'Main Area'; - const command: string = 'toggle-jp-main-statusbar'; + const command: string = 'statusbar:toggle'; app.commands.addCommand(command, { label: 'Show Status Bar',