UNPKG

thebe-core

Version:

Typescript based core functionality for Thebe

123 lines 5.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ThebeManager = exports.WIDGET_MIMETYPE = void 0; const tslib_1 = require("tslib"); const LuminoWidget = tslib_1.__importStar(require("@lumino/widgets")); const messaging_1 = require("@lumino/messaging"); const jupyterlab_manager_1 = require("@jupyter-widgets/jupyterlab-manager"); exports.WIDGET_MIMETYPE = 'application/vnd.jupyter.widget-view+json'; const base = tslib_1.__importStar(require("@jupyter-widgets/base")); const controls = tslib_1.__importStar(require("@jupyter-widgets/controls")); const utils_1 = require("./utils"); const requireJsLoader_1 = require("./requireJsLoader"); const loader_1 = require("./loader"); /** * A Widget Manager class for Thebe using the context-free KernelWidgetManager from * the JupyterLab Manager and inspierd by the implementation in Voila here: * https://github.dev/voila-dashboards/voila/blob/main/packages/voila/src/manager.ts * */ class ThebeManager extends jupyterlab_manager_1.KernelWidgetManager { constructor(kernel, rendermime) { super(kernel, rendermime); this.id = (0, utils_1.shortId)(); /** ensure this registry always gets the widget renderer. * This is essential for cases where widgets are rendered heirarchically */ this.addWidgetFactories(); this._registerWidgets(); this._loader = new requireJsLoader_1.RequireJsLoader(); } addWidgetFactories() { this.rendermime.addFactory({ safe: false, mimeTypes: [exports.WIDGET_MIMETYPE], createRenderer: (options) => new jupyterlab_manager_1.WidgetRenderer(options, this), }, 1); } removeWidgetFactories() { this.rendermime.removeMimeType(exports.WIDGET_MIMETYPE); } /** * TODO implement a reasonable method for thebe-core that can load serialized widget state * see: https://github.dev/voila-dashboards/voila/blob/7090eb3e30c0c4aa25c2b7d5d2d45e8de1333b3b/packages/voila/src/manager.ts#L52 * */ build_widgets() { return tslib_1.__awaiter(this, void 0, void 0, function* () { throw new Error('ThebeManager:build_widgets not implmented'); }); } display_view(msg, view, options) { return tslib_1.__awaiter(this, void 0, void 0, function* () { if (options.el) { LuminoWidget.Widget.attach(view.luminoWidget, options.el); } if (view.el) { view.el.setAttribute('data-thebe-jupyter-widget', ''); view.el.addEventListener('jupyterWidgetResize', () => { messaging_1.MessageLoop.postMessage(view.luminoWidget, LuminoWidget.Widget.ResizeMessage.UnknownSize); }); } return view.luminoWidget; }); } loadClass(className, moduleName, moduleVersion) { const _super = Object.create(null, { loadClass: { get: () => super.loadClass } }); return tslib_1.__awaiter(this, void 0, void 0, function* () { if (!this._loader.requested) { console.debug(`thebe:manager:loadClass initial requirejs load ${this.id}`); this._loader.load((require, define) => { define('@jupyter-widgets/base', base); define('@jupyter-widgets/controls', controls); define('@jupyter-widgets/output', jupyterlab_manager_1.output); }); } console.debug(`thebe:manager:loadClass ${moduleName}@${moduleVersion}`); const rjs = yield this._loader.ready; if (moduleName === '@jupyter-widgets/base' || moduleName === '@jupyter-widgets/controls' || moduleName === '@jupyter-widgets/output') { return _super.loadClass.call(this, className, moduleName, moduleVersion); } else { let mod; try { mod = yield (0, loader_1.requireLoader)(rjs, moduleName, moduleVersion); } catch (err) { console.error(`thebe:manager:loadClass loader error`, err); throw err; } if (mod[className]) { return mod[className]; } else { console.error(`thebe:manager:loadClass ${className} not found in module ${moduleName}@${moduleVersion}`); throw new Error(`Class ${className} not found in module ${moduleName}@${moduleVersion}`); } } }); } _registerWidgets() { this.register({ name: '@jupyter-widgets/base', version: base.JUPYTER_WIDGETS_VERSION, exports: base, // TODO improve typing }); this.register({ name: '@jupyter-widgets/controls', version: controls.JUPYTER_CONTROLS_VERSION, exports: controls, // TODO improve typing }); this.register({ name: '@jupyter-widgets/output', version: jupyterlab_manager_1.output.OUTPUT_WIDGET_VERSION, exports: jupyterlab_manager_1.output, }); } } exports.ThebeManager = ThebeManager; //# sourceMappingURL=manager.js.map