Skip to content

Commit a66d362

Browse files
committed
Backward compatibility
1 parent c0c1cae commit a66d362

File tree

1 file changed

+53
-3
lines changed

1 file changed

+53
-3
lines changed

python/jupyterlab_widgets/src/plugin.ts

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
import { ISettingRegistry } from '@jupyterlab/settingregistry';
55

6+
import { DocumentRegistry } from '@jupyterlab/docregistry';
7+
68
import * as nbformat from '@jupyterlab/nbformat';
79

810
import {
@@ -12,6 +14,7 @@ import {
1214
} from '@jupyterlab/console';
1315

1416
import {
17+
INotebookModel,
1518
INotebookTracker,
1619
Notebook,
1720
NotebookPanel,
@@ -224,7 +227,54 @@ async function registerWidgetHandler(
224227
});
225228
}
226229

227-
export async function registerWidgetManager(
230+
// Kept for backward compat ipywidgets<=8, but not used here anymore
231+
export function registerWidgetManager(
232+
context: DocumentRegistry.IContext<INotebookModel>,
233+
rendermime: IRenderMimeRegistry,
234+
renderers: IterableIterator<WidgetRenderer>
235+
): DisposableDelegate {
236+
let wManager: WidgetManager;
237+
const managerReady = getWidgetManagerOwner(context.sessionContext).then(
238+
(wManagerOwner) => {
239+
const currentManager = Private.widgetManagerProperty.get(
240+
wManagerOwner
241+
) as WidgetManager;
242+
if (!currentManager) {
243+
wManager = new WidgetManager(context, rendermime, SETTINGS);
244+
WIDGET_REGISTRY.forEach((data) => wManager!.register(data));
245+
Private.widgetManagerProperty.set(wManagerOwner, wManager);
246+
} else {
247+
wManager = currentManager;
248+
}
249+
250+
for (const r of renderers) {
251+
r.manager = wManager;
252+
}
253+
254+
// Replace the placeholder widget renderer with one bound to this widget
255+
// manager.
256+
rendermime.removeMimeType(WIDGET_VIEW_MIMETYPE);
257+
rendermime.addFactory(
258+
{
259+
safe: false,
260+
mimeTypes: [WIDGET_VIEW_MIMETYPE],
261+
createRenderer: (options) => new WidgetRenderer(options, wManager),
262+
},
263+
-10
264+
);
265+
}
266+
);
267+
268+
return new DisposableDelegate(async () => {
269+
await managerReady;
270+
if (rendermime) {
271+
rendermime.removeMimeType(WIDGET_VIEW_MIMETYPE);
272+
}
273+
wManager!.dispose();
274+
});
275+
}
276+
277+
export async function registerNotebookWidgetManager(
228278
panel: NotebookPanel,
229279
renderers: IterableIterator<WidgetRenderer>
230280
): Promise<DisposableDelegate> {
@@ -367,11 +417,11 @@ function activateWidgetExtension(
367417
outputViews(app, panel.context.path)
368418
);
369419
tracker.forEach(async (panel) => {
370-
await registerWidgetManager(panel, rendererIterator(panel));
420+
await registerNotebookWidgetManager(panel, rendererIterator(panel));
371421
bindUnhandledIOPubMessageSignal(panel);
372422
});
373423
tracker.widgetAdded.connect(async (sender, panel) => {
374-
await registerWidgetManager(panel, rendererIterator(panel));
424+
await registerNotebookWidgetManager(panel, rendererIterator(panel));
375425
bindUnhandledIOPubMessageSignal(panel);
376426
});
377427
}

0 commit comments

Comments
 (0)