3
3
4
4
import { ISettingRegistry } from '@jupyterlab/settingregistry' ;
5
5
6
+ import { DocumentRegistry } from '@jupyterlab/docregistry' ;
7
+
6
8
import * as nbformat from '@jupyterlab/nbformat' ;
7
9
8
10
import {
@@ -12,6 +14,7 @@ import {
12
14
} from '@jupyterlab/console' ;
13
15
14
16
import {
17
+ INotebookModel ,
15
18
INotebookTracker ,
16
19
Notebook ,
17
20
NotebookPanel ,
@@ -224,7 +227,54 @@ async function registerWidgetHandler(
224
227
} ) ;
225
228
}
226
229
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 (
228
278
panel : NotebookPanel ,
229
279
renderers : IterableIterator < WidgetRenderer >
230
280
) : Promise < DisposableDelegate > {
@@ -367,11 +417,11 @@ function activateWidgetExtension(
367
417
outputViews ( app , panel . context . path )
368
418
) ;
369
419
tracker . forEach ( async ( panel ) => {
370
- await registerWidgetManager ( panel , rendererIterator ( panel ) ) ;
420
+ await registerNotebookWidgetManager ( panel , rendererIterator ( panel ) ) ;
371
421
bindUnhandledIOPubMessageSignal ( panel ) ;
372
422
} ) ;
373
423
tracker . widgetAdded . connect ( async ( sender , panel ) => {
374
- await registerWidgetManager ( panel , rendererIterator ( panel ) ) ;
424
+ await registerNotebookWidgetManager ( panel , rendererIterator ( panel ) ) ;
375
425
bindUnhandledIOPubMessageSignal ( panel ) ;
376
426
} ) ;
377
427
}
0 commit comments