Добавление нового меню в главное меню Jupyterlabs - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь написать плагин для добавления нового меню к существующему меню в интерфейсе Jupyterlabs .... наряду с file, edit, ... Settings и Help

Базовый xkcd example работает нормально, и я бегал по коду в packages/mainmenu, пытаясь использовать меню tab в качестве примера (я возможно добавлю параметры контекста & вещи позже ...)

Вот где я нахожусь:

    import { PageConfig } from '@jupyterlab/coreutils';
    import { JupyterLab, JupyterLabPlugin } from '@jupyterlab/application';
    import { IMainMenu, IJupyterLabMenu, JupyterLabMenu } from '@jupyterlab/mainmenu';
    import { Menu } from '@phosphor/widgets';

    interface INoteableMenu extends IJupyterLabMenu {}

    class NoteableMenu extends JupyterLabMenu implements INoteableMenu {
      constructor(options: Menu.IOptions) {
        super(options);
        this.menu.title.label = 'Noteable';
      }
    }

    const extension: JupyterLabPlugin<void> = {
      id: 'noteable-menu',
      autoStart: true,
      activate: (app: JupyterLab) => {
        console.log('JupyterLab extension noteable is activated!');
        let mainMenu: IMainMenu;  //app.contextMenu??
        //let noteableMenu = new NoteableMenu({ commands: {} });
        mainMenu.addMenu(NoteableMenu.menu, { rank: 2000 });
      }
    };

    export default extension;

    export namespace CommandIDs {
      export const returnToHome = 'noteablemenu:home';
      export const switchToClassic = 'noteablemenu:classic';
    }

    export function createNoteableMenu(
      menu: NoteableMenu,
    ): void {
      const commands = menu.menu.commands;

      commands.addCommand(CommandIDs.returnToHome, {
        label: 'Jump to example page',
        execute: () => {
          location.assign(location.origin + '/example');
        }
      });

      commands.addCommand(CommandIDs.switchToClassic, {
        label: 'Switch to Classic Notebook',
        execute: () => {
          location.assign(PageConfig.getBaseUrl() + 'tree');
        }
      });
    }

Сбой сборки (использование jupyter labextension install . --no-build с ошибкой

src/index.ts:26:35 - error TS2339: Property 'menu' does not exist on type 'typeof NoteableMenu'.
26     mainMenu.addMenu(NoteableMenu.menu, { rank: 2000 });
                                     ~~~~

Я не могу понять, чем мой код отличается практичностью от исходных примеров.

Советы, подсказки или даже откровенные ответы приветствуются ...

(для справки: nodejs: v8.10.0, jupyterlab: 0.35.5)

...