@@ -20,6 +20,8 @@ import {
20
20
21
21
import { IDisposable } from '@lumino/disposable' ;
22
22
23
+ import { IRenderMime } from '@jupyterlab/rendermime-interfaces' ;
24
+
23
25
import { ReadonlyPartialJSONValue } from '@lumino/coreutils' ;
24
26
25
27
import { INotebookModel } from '@jupyterlab/notebook' ;
@@ -44,9 +46,10 @@ import { SemVerCache } from './semvercache';
44
46
45
47
import Backbone from 'backbone' ;
46
48
47
- import * as base from '@jupyter-widgets/base' ;
48
49
import { WidgetRenderer } from './renderer' ;
49
50
51
+ import * as base from '@jupyter-widgets/base' ;
52
+
50
53
/**
51
54
* The mime type for a widget view.
52
55
*/
@@ -354,15 +357,20 @@ export abstract class LabWidgetManager
354
357
export class KernelWidgetManager extends LabWidgetManager {
355
358
constructor (
356
359
kernel : Kernel . IKernelConnection ,
357
- rendermime : IRenderMimeRegistry | null
360
+ rendermime : IRenderMimeRegistry | null ,
361
+ pendingManagerMessage = 'Loading widget ...'
358
362
) {
359
363
if ( ! rendermime ) {
360
364
rendermime = LabWidgetManager . globalRendermime ;
361
365
}
362
366
const instance = Private . kernelWidgetManagers . get ( kernel . id ) ;
363
367
if ( instance ) {
364
- KernelWidgetManager . updateManagerKernel ( instance , kernel ) ;
365
- KernelWidgetManager . attachToRendermime ( rendermime , instance ) ;
368
+ instance . _useKernel ( kernel ) ;
369
+ KernelWidgetManager . configureRendermime (
370
+ rendermime ,
371
+ instance ,
372
+ pendingManagerMessage
373
+ ) ;
366
374
return instance ;
367
375
}
368
376
if ( ! kernel . handleComms ) {
@@ -374,68 +382,72 @@ export class KernelWidgetManager extends LabWidgetManager {
374
382
LabWidgetManager . WIDGET_REGISTRY . changed . connect ( ( ) =>
375
383
this . loadCustomWidgetDefinitions ( )
376
384
) ;
377
- KernelWidgetManager . updateManagerKernel ( this , kernel ) ;
378
- KernelWidgetManager . attachToRendermime ( rendermime , this ) ;
385
+ this . _useKernel ( kernel ) ;
386
+ KernelWidgetManager . configureRendermime (
387
+ rendermime ,
388
+ this ,
389
+ pendingManagerMessage
390
+ ) ;
379
391
}
380
392
381
- static updateManagerKernel (
382
- manager : KernelWidgetManager ,
383
- kernel : Kernel . IKernelConnection
384
- ) {
393
+ _useKernel ( this : KernelWidgetManager , kernel : Kernel . IKernelConnection ) {
385
394
if ( ! kernel . handleComms ) {
386
395
return ;
387
396
}
388
- manager . _handleKernelChanged ( {
397
+ this . _handleKernelChanged ( {
389
398
name : 'kernel' ,
390
- oldValue : manager . _kernel ,
399
+ oldValue : this . _kernel ,
391
400
newValue : kernel ,
392
401
} ) ;
393
- if ( manager . _kernel ) {
394
- manager . _kernel . statusChanged . disconnect (
395
- manager . _handleKernelStatusChange ,
396
- manager
402
+ if ( this . _kernel ) {
403
+ this . _kernel . statusChanged . disconnect (
404
+ this . _handleKernelStatusChange ,
405
+ this
397
406
) ;
398
- manager . _kernel . connectionStatusChanged . disconnect (
399
- manager . _handleKernelConnectionStatusChange ,
400
- manager
407
+ this . _kernel . connectionStatusChanged . disconnect (
408
+ this . _handleKernelConnectionStatusChange ,
409
+ this
401
410
) ;
402
411
}
403
- manager . _kernel = kernel ;
404
- manager . _kernel . statusChanged . connect (
405
- manager . _handleKernelStatusChange ,
406
- manager
407
- ) ;
408
- manager . _kernel . connectionStatusChanged . connect (
409
- manager . _handleKernelConnectionStatusChange ,
410
- manager
412
+ this . _kernel = kernel ;
413
+ this . _kernel . statusChanged . connect ( this . _handleKernelStatusChange , this ) ;
414
+ this . _kernel . connectionStatusChanged . connect (
415
+ this . _handleKernelConnectionStatusChange ,
416
+ this
411
417
) ;
412
- manager . _restoredStatus = false ;
413
- manager . _kernelRestoreInProgress = true ;
414
- manager . clear_state ( ) . then ( ( ) => manager . restoreWidgets ( ) ) ;
418
+ this . _restoredStatus = false ;
419
+ this . _kernelRestoreInProgress = true ;
420
+ this . clear_state ( ) . then ( ( ) => this . restoreWidgets ( ) ) ;
415
421
}
416
422
417
423
/**
418
- * Will define wManager as a renderer for rendermime if rendermime
419
- * is not the global rendermime or there is only one wManager.
420
- * If wManager is not provided, it will make the rendermine more general.
424
+ * Configure a non-global rendermime. Passing the global rendermine will do
425
+ * nothing.
426
+ *
427
+ * @param rendermime
428
+ * @param manager The manager to use with WidgetRenderer.
429
+ * @param pendingManagerMessage A message that is displayed while the manager
430
+ * has not been provided. If manager is not provided here a non-empty string
431
+ * assumes the manager will be provided at some time in the future.
432
+ *
433
+ * The default will search for a manager once.
434
+ * @returns
421
435
*/
422
- static attachToRendermime (
436
+ static configureRendermime (
423
437
rendermime : IRenderMimeRegistry ,
424
- wManager ?: KernelWidgetManager
438
+ manager ?: KernelWidgetManager ,
439
+ pendingManagerMessage = ''
425
440
) {
426
- const wManager_ =
427
- rendermime === LabWidgetManager . globalRendermime &&
428
- Private . kernelWidgetManagers . size > 1
429
- ? undefined
430
- : wManager ;
431
- const pendingManagerMessage = wManager ? 'Loading widget ...' : '' ;
441
+ if ( rendermime === LabWidgetManager . globalRendermime ) {
442
+ return ;
443
+ }
432
444
rendermime . removeMimeType ( WIDGET_VIEW_MIMETYPE ) ;
433
445
rendermime . addFactory (
434
446
{
435
447
safe : false ,
436
448
mimeTypes : [ WIDGET_VIEW_MIMETYPE ] ,
437
- createRenderer : ( options ) =>
438
- new WidgetRenderer ( options , wManager_ , pendingManagerMessage ) ,
449
+ createRenderer : ( options : IRenderMime . IRendererOptions ) =>
450
+ new WidgetRenderer ( options , manager , pendingManagerMessage ) ,
439
451
} ,
440
452
- 10
441
453
) ;
@@ -491,7 +503,7 @@ export class KernelWidgetManager extends LabWidgetManager {
491
503
return ;
492
504
}
493
505
super . dispose ( ) ;
494
- KernelWidgetManager . attachToRendermime ( this . rendermime ) ;
506
+ KernelWidgetManager . configureRendermime ( this . rendermime ) ;
495
507
Private . kernelWidgetManagers . delete ( this . kernel . id ) ;
496
508
this . _handleKernelChanged ( {
497
509
name : 'kernel' ,
@@ -559,15 +571,11 @@ export class WidgetManager extends Backbone.Model implements IDisposable {
559
571
} ) ;
560
572
}
561
573
if ( rendermime !== LabWidgetManager . globalRendermime ) {
562
- rendermime . removeMimeType ( WIDGET_VIEW_MIMETYPE ) ;
563
- rendermime . addFactory (
564
- {
565
- safe : false ,
566
- mimeTypes : [ WIDGET_VIEW_MIMETYPE ] ,
567
- createRenderer : ( options ) =>
568
- new WidgetRenderer ( options , undefined , 'Waiting for kernel' ) ,
569
- } ,
570
- - 10
574
+ // Instruct the renderer to wait for the widgetManager.
575
+ KernelWidgetManager . configureRendermime (
576
+ rendermime ,
577
+ undefined ,
578
+ 'Waiting for kernel'
571
579
) ;
572
580
}
573
581
if ( this . kernel ) {
@@ -618,9 +626,10 @@ export class WidgetManager extends Backbone.Model implements IDisposable {
618
626
this . restoreWidgets ( this . _context ! . model ) ;
619
627
}
620
628
}
621
- KernelWidgetManager . attachToRendermime (
629
+ KernelWidgetManager . configureRendermime (
622
630
this . rendermime ,
623
- this . _widgetManager
631
+ this . _widgetManager ,
632
+ 'Loading widget ...'
624
633
) ;
625
634
if ( this . _renderers ) {
626
635
for ( const r of this . _renderers ) {
@@ -814,17 +823,15 @@ export namespace WidgetManager {
814
823
}
815
824
816
825
/**
817
- * Get the widgetManager that owns the model id=model_id.
818
- * @param model_id An existing model_id
819
- * @returns KernelWidgetManager
826
+ * Get the widgetManager that owns the model.
820
827
*/
821
- export function findWidgetManager ( model_id : string ) : KernelWidgetManager {
828
+ export function getWidgetManager ( model_id : string ) : KernelWidgetManager | null {
822
829
for ( const wManager of Private . kernelWidgetManagers . values ( ) ) {
823
830
if ( wManager . has_model ( model_id ) ) {
824
831
return wManager ;
825
832
}
826
833
}
827
- throw new Error ( `A widget manager was not found for model_id: ' ${ model_id } '` ) ;
834
+ return null ;
828
835
}
829
836
830
837
/**
0 commit comments