/* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). You * may not use this file except in compliance with the License. A copy of * the License is located at * * http://aws.amazon.com/apache2.0/ * * or in the "license" file accompanying this file. This file is * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF * ANY KIND, either express or implied. See the License for the specific * language governing permissions and limitations under the License. */ import React from 'react'; import { style } from 'typestyle'; import { StaticNotebook, NotebookModel } from '@jupyterlab/notebook'; import { MainAreaWidget, ReactWidget } from '@jupyterlab/apputils'; import { editorServices } from '@jupyterlab/codemirror'; import { JupyterFrontEnd } from '@jupyterlab/application'; import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; import { ReadonlyNotebookHeader } from '../components/ReadonlyNotebookHeader'; const toolbarClass = style({ minHeight: '88px !important', display: 'flex', padding: '20px', paddingRight: '28px', background: 'var(--jp-info-color3)', borderBottomColor: 'var(--jp-info-color2)', color: 'var(--ui-font-color1)', fontSize: 'var(--jp-ui-font-size1)', fontFamily: 'var(--jp-ui-font-family)', }); // Override toolbar item style const headerClass = style({ flex: '1 !important', alignItems: 'center', padding: 0, lineHeight: 'unset !important', fontSize: 'var(--jp-ui-font-size2) !important', }); /** * Our model is a subset of the `Contents.IModel` from Jupyter. */ interface RunListNotebookModel { name: string; content: any; // eslint-disable-line @typescript-eslint/no-explicit-any } export function openReadonlyNotebook( app: JupyterFrontEnd, rendermime: IRenderMimeRegistry, document: RunListNotebookModel, notebookName: string, jobName: string, ) { const { name, content: nbContent } = document; const contentWidget = new StaticNotebook({ rendermime, mimeTypeService: editorServices.mimeTypeService, }); const widget = new MainAreaWidget({ content: contentWidget }); widget.id = 'shared_notebook'; widget.title.label = `[Read-only] ${name}`; widget.title.iconClass = 'notebook'; widget.toolbar.addClass(toolbarClass); app.shell.add(widget, 'main'); // Model must be populated after the widget is added. const nbModel = new NotebookModel(); (contentWidget as any)._mimetype = 'text/x-python'; // eslint-disable-line contentWidget.model = nbModel; nbModel.fromJSON(nbContent); contentWidget.widgets.forEach((cell) => { cell.readOnly = true; }); const headerWidget = ReactWidget.create( , ); headerWidget.addClass(headerClass); widget.toolbar.addItem('header', headerWidget); return widget; }