|
@@ -103,25 +103,22 @@ function createFileMenu(app: JupyterLab, menu: FileMenu): void {
|
|
function createKernelMenu(app: JupyterLab, menu: KernelMenu): void {
|
|
function createKernelMenu(app: JupyterLab, menu: KernelMenu): void {
|
|
const commands = menu.commands;
|
|
const commands = menu.commands;
|
|
|
|
|
|
- let findUser = (widget: Widget) => {
|
|
|
|
- return menu.findUser(widget);
|
|
|
|
- };
|
|
|
|
commands.addCommand(CommandIDs.interruptKernel, {
|
|
commands.addCommand(CommandIDs.interruptKernel, {
|
|
label: 'Interrupt Kernel',
|
|
label: 'Interrupt Kernel',
|
|
- isEnabled: Private.delegateEnabled(app, findUser, 'interruptKernel'),
|
|
|
|
- execute: Private.delegateExecute(app, findUser, 'interruptKernel')
|
|
|
|
|
|
+ isEnabled: Private.delegateEnabled(app, menu.kernelUsers, 'interruptKernel'),
|
|
|
|
+ execute: Private.delegateExecute(app, menu.kernelUsers, 'interruptKernel')
|
|
});
|
|
});
|
|
|
|
|
|
commands.addCommand(CommandIDs.restartKernel, {
|
|
commands.addCommand(CommandIDs.restartKernel, {
|
|
label: 'Restart Kernel',
|
|
label: 'Restart Kernel',
|
|
- isEnabled: Private.delegateEnabled(app, findUser, 'restartKernel'),
|
|
|
|
- execute: Private.delegateExecute(app, findUser, 'restartKernel')
|
|
|
|
|
|
+ isEnabled: Private.delegateEnabled(app, menu.kernelUsers, 'restartKernel'),
|
|
|
|
+ execute: Private.delegateExecute(app, menu.kernelUsers, 'restartKernel')
|
|
});
|
|
});
|
|
|
|
|
|
commands.addCommand(CommandIDs.changeKernel, {
|
|
commands.addCommand(CommandIDs.changeKernel, {
|
|
label: 'Change Kernel',
|
|
label: 'Change Kernel',
|
|
- isEnabled: Private.delegateEnabled(app, findUser, 'changeKernel'),
|
|
|
|
- execute: Private.delegateExecute(app, findUser, 'changeKernel')
|
|
|
|
|
|
+ isEnabled: Private.delegateEnabled(app, menu.kernelUsers, 'changeKernel'),
|
|
|
|
+ execute: Private.delegateExecute(app, menu.kernelUsers, 'changeKernel')
|
|
});
|
|
});
|
|
|
|
|
|
let items = [
|
|
let items = [
|
|
@@ -141,37 +138,34 @@ function createKernelMenu(app: JupyterLab, menu: KernelMenu): void {
|
|
function createViewMenu(app: JupyterLab, menu: ViewMenu): void {
|
|
function createViewMenu(app: JupyterLab, menu: ViewMenu): void {
|
|
const commands = menu.commands;
|
|
const commands = menu.commands;
|
|
|
|
|
|
- let findEditorViewer = (widget: Widget) => {
|
|
|
|
- return menu.findEditorViewer(widget);
|
|
|
|
- };
|
|
|
|
commands.addCommand(CommandIDs.lineNumbering, {
|
|
commands.addCommand(CommandIDs.lineNumbering, {
|
|
label: 'Line Numbers',
|
|
label: 'Line Numbers',
|
|
isEnabled: Private.delegateEnabled
|
|
isEnabled: Private.delegateEnabled
|
|
- (app, findEditorViewer, 'toggleLineNumbers'),
|
|
|
|
|
|
+ (app, menu.editorViewers, 'toggleLineNumbers'),
|
|
isToggled: Private.delegateToggled
|
|
isToggled: Private.delegateToggled
|
|
- (app, findEditorViewer, 'lineNumbersToggled'),
|
|
|
|
|
|
+ (app, menu.editorViewers, 'lineNumbersToggled'),
|
|
execute: Private.delegateExecute
|
|
execute: Private.delegateExecute
|
|
- (app, findEditorViewer, 'toggleLineNumbers')
|
|
|
|
|
|
+ (app, menu.editorViewers, 'toggleLineNumbers')
|
|
});
|
|
});
|
|
|
|
|
|
commands.addCommand(CommandIDs.matchBrackets, {
|
|
commands.addCommand(CommandIDs.matchBrackets, {
|
|
label: 'Match Brackets',
|
|
label: 'Match Brackets',
|
|
isEnabled: Private.delegateEnabled
|
|
isEnabled: Private.delegateEnabled
|
|
- (app, findEditorViewer, 'toggleMatchBrackets'),
|
|
|
|
|
|
+ (app, menu.editorViewers, 'toggleMatchBrackets'),
|
|
isToggled: Private.delegateToggled
|
|
isToggled: Private.delegateToggled
|
|
- (app, findEditorViewer, 'matchBracketsToggled'),
|
|
|
|
|
|
+ (app, menu.editorViewers, 'matchBracketsToggled'),
|
|
execute: Private.delegateExecute
|
|
execute: Private.delegateExecute
|
|
- (app, findEditorViewer, 'toggleMatchBrackets')
|
|
|
|
|
|
+ (app, menu.editorViewers, 'toggleMatchBrackets')
|
|
});
|
|
});
|
|
|
|
|
|
commands.addCommand(CommandIDs.wordWrap, {
|
|
commands.addCommand(CommandIDs.wordWrap, {
|
|
label: 'Word Wrap',
|
|
label: 'Word Wrap',
|
|
isEnabled: Private.delegateEnabled
|
|
isEnabled: Private.delegateEnabled
|
|
- (app, findEditorViewer, 'toggleWordWrap'),
|
|
|
|
|
|
+ (app, menu.editorViewers, 'toggleWordWrap'),
|
|
isToggled: Private.delegateToggled
|
|
isToggled: Private.delegateToggled
|
|
- (app, findEditorViewer, 'wordWrapToggled'),
|
|
|
|
|
|
+ (app, menu.editorViewers, 'wordWrapToggled'),
|
|
execute: Private.delegateExecute
|
|
execute: Private.delegateExecute
|
|
- (app, findEditorViewer, 'toggleWordWrap')
|
|
|
|
|
|
+ (app, menu.editorViewers, 'toggleWordWrap')
|
|
});
|
|
});
|
|
|
|
|
|
let items = [
|
|
let items = [
|
|
@@ -190,31 +184,28 @@ function createViewMenu(app: JupyterLab, menu: ViewMenu): void {
|
|
function createRunMenu(app: JupyterLab, menu: RunMenu): void {
|
|
function createRunMenu(app: JupyterLab, menu: RunMenu): void {
|
|
const commands = menu.commands;
|
|
const commands = menu.commands;
|
|
|
|
|
|
- let findRunner = (widget: Widget) => {
|
|
|
|
- return menu.findRunner(widget);
|
|
|
|
- };
|
|
|
|
commands.addCommand(CommandIDs.run, {
|
|
commands.addCommand(CommandIDs.run, {
|
|
label: 'Run',
|
|
label: 'Run',
|
|
- isEnabled: Private.delegateEnabled(app, findRunner, 'run'),
|
|
|
|
- execute: Private.delegateExecute(app, findRunner, 'run')
|
|
|
|
|
|
+ isEnabled: Private.delegateEnabled(app, menu.codeRunners, 'run'),
|
|
|
|
+ execute: Private.delegateExecute(app, menu.codeRunners, 'run')
|
|
});
|
|
});
|
|
|
|
|
|
commands.addCommand(CommandIDs.runAll, {
|
|
commands.addCommand(CommandIDs.runAll, {
|
|
label: 'Run All',
|
|
label: 'Run All',
|
|
- isEnabled: Private.delegateEnabled(app, findRunner, 'runAll'),
|
|
|
|
- execute: Private.delegateExecute(app, findRunner, 'runAll')
|
|
|
|
|
|
+ isEnabled: Private.delegateEnabled(app, menu.codeRunners, 'runAll'),
|
|
|
|
+ execute: Private.delegateExecute(app, menu.codeRunners, 'runAll')
|
|
});
|
|
});
|
|
|
|
|
|
commands.addCommand(CommandIDs.runAbove, {
|
|
commands.addCommand(CommandIDs.runAbove, {
|
|
label: 'Run Above',
|
|
label: 'Run Above',
|
|
- isEnabled: Private.delegateEnabled(app, findRunner, 'runAbove'),
|
|
|
|
- execute: Private.delegateExecute(app, findRunner, 'runAbove')
|
|
|
|
|
|
+ isEnabled: Private.delegateEnabled(app, menu.codeRunners, 'runAbove'),
|
|
|
|
+ execute: Private.delegateExecute(app, menu.codeRunners, 'runAbove')
|
|
});
|
|
});
|
|
|
|
|
|
commands.addCommand(CommandIDs.runBelow, {
|
|
commands.addCommand(CommandIDs.runBelow, {
|
|
label: 'Run Below',
|
|
label: 'Run Below',
|
|
- isEnabled: Private.delegateEnabled(app, findRunner, 'runBelow'),
|
|
|
|
- execute: Private.delegateExecute(app, findRunner, 'runBelow')
|
|
|
|
|
|
+ isEnabled: Private.delegateEnabled(app, menu.codeRunners, 'runBelow'),
|
|
|
|
+ execute: Private.delegateExecute(app, menu.codeRunners, 'runBelow')
|
|
});
|
|
});
|
|
|
|
|
|
let items = [
|
|
let items = [
|
|
@@ -234,15 +225,30 @@ export default menuPlugin;
|
|
* A namespace for Private data.
|
|
* A namespace for Private data.
|
|
*/
|
|
*/
|
|
namespace Private {
|
|
namespace Private {
|
|
|
|
+ /**
|
|
|
|
+ * Given a widget and a map containing IMenuExtenders,
|
|
|
|
+ * check the tracker and return the extender, if any,
|
|
|
|
+ * that holds the widget.
|
|
|
|
+ */
|
|
|
|
+ function findExtender<E extends IMenuExtender<Widget>>(widget: Widget, map: Map<string, E>): E {
|
|
|
|
+ let extender: E;
|
|
|
|
+ map.forEach((value, key) => {
|
|
|
|
+ if (value.tracker.has(widget)) {
|
|
|
|
+ extender = value;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ return extender;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* A utility function that delegates command execution
|
|
* A utility function that delegates command execution
|
|
* to an IMenuExtender.
|
|
* to an IMenuExtender.
|
|
*/
|
|
*/
|
|
export
|
|
export
|
|
- function delegateExecute<E extends IMenuExtender<Widget>>(app: JupyterLab, finder: (w: Widget) => E, executor: keyof E): () => Promise<any> {
|
|
|
|
|
|
+ function delegateExecute<E extends IMenuExtender<Widget>>(app: JupyterLab, map: Map<string, E>, executor: keyof E): () => Promise<any> {
|
|
return () => {
|
|
return () => {
|
|
let widget = app.shell.currentWidget;
|
|
let widget = app.shell.currentWidget;
|
|
- const extender = finder(widget);
|
|
|
|
|
|
+ const extender = findExtender(widget, map);
|
|
if (!extender) {
|
|
if (!extender) {
|
|
return Promise.resolve(void 0);
|
|
return Promise.resolve(void 0);
|
|
}
|
|
}
|
|
@@ -255,10 +261,10 @@ namespace Private {
|
|
* to an IMenuExtender.
|
|
* to an IMenuExtender.
|
|
*/
|
|
*/
|
|
export
|
|
export
|
|
- function delegateEnabled<E extends IMenuExtender<Widget>>(app: JupyterLab, finder: (w: Widget) => E, executor: keyof E): () => boolean {
|
|
|
|
|
|
+ function delegateEnabled<E extends IMenuExtender<Widget>>(app: JupyterLab, map: Map<string, E>, executor: keyof E): () => boolean {
|
|
return () => {
|
|
return () => {
|
|
let widget = app.shell.currentWidget;
|
|
let widget = app.shell.currentWidget;
|
|
- const extender = finder(widget);
|
|
|
|
|
|
+ const extender = findExtender(widget, map);
|
|
return !!extender && !!extender[executor];
|
|
return !!extender && !!extender[executor];
|
|
};
|
|
};
|
|
}
|
|
}
|
|
@@ -268,10 +274,10 @@ namespace Private {
|
|
* for an IMenuExtender.
|
|
* for an IMenuExtender.
|
|
*/
|
|
*/
|
|
export
|
|
export
|
|
- function delegateToggled<E extends IMenuExtender<Widget>>(app: JupyterLab, finder: (w: Widget) => E, toggled: keyof E): () => boolean {
|
|
|
|
|
|
+ function delegateToggled<E extends IMenuExtender<Widget>>(app: JupyterLab, map: Map<string, E>, toggled: keyof E): () => boolean {
|
|
return () => {
|
|
return () => {
|
|
let widget = app.shell.currentWidget;
|
|
let widget = app.shell.currentWidget;
|
|
- const extender = finder(widget);
|
|
|
|
|
|
+ const extender = findExtender(widget, map);
|
|
return !!extender && !!extender[toggled] && !!extender[toggled](widget);
|
|
return !!extender && !!extender[toggled] && !!extender[toggled](widget);
|
|
};
|
|
};
|
|
}
|
|
}
|