diff --git a/jupytext/version.py b/jupytext/version.py index b5fcb6ab2..4f9f71a75 100644 --- a/jupytext/version.py +++ b/jupytext/version.py @@ -1,3 +1,3 @@ """Jupytext's version number""" -__version__ = "1.15.0.dev1" +__version__ = "1.15.0.dev2" diff --git a/packages/labextension/src/index.ts b/packages/labextension/src/index.ts index 77796c159..88019a0fe 100644 --- a/packages/labextension/src/index.ts +++ b/packages/labextension/src/index.ts @@ -7,8 +7,12 @@ import { ICommandPalette, ISessionContextDialogs, showErrorMessage, + IToolbarWidgetRegistry, + createToolbarFactory, } from "@jupyterlab/apputils"; +import { ISettingRegistry } from '@jupyterlab/settingregistry'; + import { IEditorServices } from "@jupyterlab/codeeditor"; import * as nbformat from "@jupyterlab/nbformat"; @@ -202,6 +206,11 @@ const extension: JupyterFrontEndPlugin = { ISessionContextDialogs, INotebookWidgetFactory, INotebookTracker, + ISettingRegistry, + IToolbarWidgetRegistry, + ICommandPalette, + ITranslator, + ], activate: ( app: JupyterFrontEnd, @@ -211,8 +220,10 @@ const extension: JupyterFrontEndPlugin = { sessionContextDialogs: ISessionContextDialogs, notebookFactory: NotebookWidgetFactory.IFactory, notebookTracker: INotebookTracker, + settingRegistry: ISettingRegistry | null, + toolbarRegistry: IToolbarWidgetRegistry, + palette: ICommandPalette | null, translator: ITranslator | null, - palette: ICommandPalette | null ) => { // https://semver.org/#semantic-versioning-specification-semver // npm semver requires pre-release versions to come with a hyphen @@ -225,8 +236,8 @@ const extension: JupyterFrontEndPlugin = { JLAB4 = parseInt(app_numbers[0]) >= 4; } } - console.log("JupyterLab extension jupytext is activated!"); - console.debug(`JLAB4=${JLAB4}`); + console.log("JupyterLab extension jupytext is activating..."); + console.debug(`bundled jupytext labextension: JLAB4=${JLAB4}`); const trans = (translator ?? nullTranslator).load("jupytext"); // Jupytext formats @@ -492,6 +503,26 @@ const extension: JupyterFrontEndPlugin = { icon: markdownIcon }); + // the way to create the toolbar factory is different in JupyterLab 3 and 4 + let toolbarFactory + if (! JLAB4) { + toolbarFactory = notebookFactory.toolbarFactory + } else { + // primarily this block is copied/pasted from jlab4 code and specifically + // jupyterlab/packages/notebook-extension/src/index.ts + // inside the function `activateWidgetFactory` at line 1150 as of this writing + // + const FACTORY = 'Notebook'; + const PANEL_SETTINGS = '@jupyterlab/notebook-extension:panel'; + + toolbarFactory = createToolbarFactory( + toolbarRegistry, + settingRegistry, + FACTORY, + PANEL_SETTINGS, + translator + ) + } // Duplicate notebook factory to apply it on Jupytext notebooks // Mirror: https://github.com/jupyterlab/jupyterlab/blob/8a8c3752564f37493d4eb6b4c59008027fa83880/packages/notebook-extension/src/index.ts#L860 const factory = new NotebookWidgetFactory({ @@ -507,7 +538,7 @@ const extension: JupyterFrontEndPlugin = { notebookConfig: notebookFactory.notebookConfig, mimeTypeService: editorServices.mimeTypeService, // sessionDialogs: sessionContextDialogs, - toolbarFactory: notebookFactory.toolbarFactory, + toolbarFactory: toolbarFactory, // translator?: ITranslator, } as NotebookWidgetFactory.IOptions); app.docRegistry.addWidgetFactory(factory);