Path: blob/main/frontend/vue/components/CodeExercise/WidgetsManager.ts
3375 views
/* eslint-disable prefer-promise-reject-errors */1/* eslint-disable require-await */2import * as pWidget from '@lumino/widgets'34import {5RenderMimeRegistry,6standardRendererFactories7} from '@jupyterlab/rendermime'8import { IKernelConnection } from '@jupyterlab/services/lib/kernel/kernel'9import { DocumentRegistry } from '@jupyterlab/docregistry'10import { INotebookModel } from '@jupyterlab/notebook'1112import {13WidgetManager as JupyterLabManager,14WidgetRenderer,15output16} from '@jupyter-widgets/jupyterlab-manager'1718import * as base from '@jupyter-widgets/base'19import * as controls from '@jupyter-widgets/controls'20import { requireLoader } from '@jupyter-widgets/html-manager'2122const WIDGET_MIMETYPE = 'application/vnd.jupyter.widget-view+json'2324export class WidgetsManager extends JupyterLabManager {25loader26renderMime2728constructor (kernel: IKernelConnection) {29const context = createContext(kernel)30const rendermime = new RenderMimeRegistry({31initialFactories: standardRendererFactories32})33const settings = {34saveState: false35}36super(context, rendermime, settings)37rendermime.addFactory(38{39safe: false,40mimeTypes: [WIDGET_MIMETYPE],41createRenderer: options => new WidgetRenderer(options, this)42},43144)4546this.renderMime = rendermime47this._registerWidgets()48this.loader = requireLoader49}5051_registerWidgets () {52this.register({53name: '@jupyter-widgets/base',54version: base.JUPYTER_WIDGETS_VERSION,55exports: base as unknown as base.ExportData56})57this.register({58name: '@jupyter-widgets/controls',59version: controls.JUPYTER_CONTROLS_VERSION,60exports: controls as unknown as base.ExportData61})62this.register({63name: '@jupyter-widgets/output',64version: output.OUTPUT_WIDGET_VERSION,65exports: output as unknown as base.ExportData66})67}6869public async loadClass (className: string, moduleName: string, moduleVersion: string) {70if (71moduleName === '@jupyter-widgets/base' ||72moduleName === '@jupyter-widgets/controls' ||73moduleName === '@jupyter-widgets/output'74) {75return super.loadClass(className, moduleName, moduleVersion)76} else {77// TODO: code duplicate from HTMLWidgetManager, consider a refactor78return this.loader(moduleName, moduleVersion).then((module: { [x: string]: any }) => {79if (module[className]) {80return module[className]81} else {82return Promise.reject(83'Class ' +84className +85' not found in module ' +86moduleName +87'@' +88moduleVersion89)90}91})92}93}9495// eslint-disable-next-line camelcase96async display_view (msg: any, view: any, options: { el: any }) {97const el = options.el98if (el) {99pWidget.Widget.attach(view.pWidget, el)100}101return view.pWidget102}103}104105function createContext (kernel: IKernelConnection): DocumentRegistry.IContext<INotebookModel> {106return {107sessionContext: {108session: {109kernel,110kernelChanged: {111connect: () => {}112}113},114kernelChanged: {115connect: () => {}116},117statusChanged: {118connect: () => {}119},120connectionStatusChanged: {121connect: () => {}122}123},124saveState: {125connect: () => {}126},127model: {128metadata: {129get: () => {}130}131}132} as unknown as DocumentRegistry.IContext<INotebookModel>133}134135136