@@ -326,6 +326,8 @@ export abstract class LabWidgetManager
326
326
await this . handle_comm_open ( oldComm , msg ) ;
327
327
} ;
328
328
329
+ static globalRendermime : IRenderMimeRegistry ;
330
+
329
331
protected _restored = new Signal < this, void > ( this ) ;
330
332
protected _restoredStatus = false ;
331
333
protected _kernelRestoreInProgress = false ;
@@ -346,20 +348,24 @@ export abstract class LabWidgetManager
346
348
347
349
/**
348
350
* A singleton widget manager per kernel for the lifecycle of the kernel.
351
+ * If a rendermime isn't provided the global singleton will be used.
349
352
*/
350
353
export class KernelWidgetManager extends LabWidgetManager {
351
354
constructor (
352
355
kernel : Kernel . IKernelConnection ,
353
- rendermime : IRenderMimeRegistry
356
+ rendermime : IRenderMimeRegistry | null
354
357
) {
358
+ if ( ! rendermime ) {
359
+ rendermime = LabWidgetManager . globalRendermime ;
360
+ }
355
361
const instance = Private . kernelWidgetManagers . get ( kernel . id ) ;
356
362
if ( instance ) {
357
- instance . attachToRendermime ( rendermime ) ;
363
+ attachToRendermime ( rendermime , instance ) ;
358
364
return instance ;
359
365
}
360
366
super ( rendermime ) ;
361
- this . attachToRendermime ( rendermime ) ;
362
367
Private . kernelWidgetManagers . set ( kernel . id , this ) ;
368
+ attachToRendermime ( rendermime , this ) ;
363
369
this . _kernel = kernel ;
364
370
this . loadCustomWidgetDefinitions ( ) ;
365
371
LabWidgetManager . WIDGET_REGISTRY . changed . connect ( ( ) =>
@@ -433,7 +439,8 @@ export class KernelWidgetManager extends LabWidgetManager {
433
439
if ( this . isDisposed ) {
434
440
return ;
435
441
}
436
-
442
+ attachToRendermime ( this . rendermime ) ;
443
+ Private . kernelWidgetManagers . delete ( this . kernel . id ) ;
437
444
this . _kernel = null ! ;
438
445
super . dispose ( ) ;
439
446
}
@@ -452,18 +459,6 @@ export class KernelWidgetManager extends LabWidgetManager {
452
459
return this . filterExistingModelState ( serialized_state ) ;
453
460
}
454
461
455
- attachToRendermime ( rendermime : IRenderMimeRegistry ) {
456
- rendermime . removeMimeType ( WIDGET_VIEW_MIMETYPE ) ;
457
- rendermime . addFactory (
458
- {
459
- safe : false ,
460
- mimeTypes : [ WIDGET_VIEW_MIMETYPE ] ,
461
- createRenderer : ( options ) => new WidgetRenderer ( options , this ) ,
462
- } ,
463
- - 10
464
- ) ;
465
- }
466
-
467
462
private _kernel : Kernel . IKernelConnection ;
468
463
protected _kernelRestoreInProgress = false ;
469
464
}
@@ -537,7 +532,10 @@ export class WidgetManager extends Backbone.Model implements IDisposable {
537
532
) ;
538
533
}
539
534
if ( this . kernel ) {
540
- this . _widgetManager = getWidgetManager ( this . kernel , this . rendermime ) ;
535
+ this . _widgetManager = new KernelWidgetManager (
536
+ this . kernel ,
537
+ this . rendermime
538
+ ) ;
541
539
this . _widgetManager . onUnhandledIOPubMessage . connect (
542
540
this . onUnhandledIOPubMessage ,
543
541
this
@@ -756,31 +754,6 @@ export namespace WidgetManager {
756
754
} ;
757
755
}
758
756
759
- /**
760
- * Get the widget manager for the kernel. Calling this will ensure
761
- * widgets work in a kernel (providing the kerenel provides comms).
762
- * With the widgetManager use the method `widgetManager.attachToRendermime`
763
- * against any rendermime.
764
- * @param kernel A kernel connection to which the widget manager is associated.
765
- * @returns LabWidgetManager
766
- */
767
- export function getWidgetManager (
768
- kernel : Kernel . IKernelConnection ,
769
- rendermime : IRenderMimeRegistry
770
- ) : KernelWidgetManager {
771
- if ( ! Private . kernelWidgetManagers . has ( kernel . id ) ) {
772
- new KernelWidgetManager ( kernel , rendermime ) ;
773
- }
774
- const wManager = Private . kernelWidgetManagers . get ( kernel . id ) ;
775
- if ( ! wManager ) {
776
- throw new Error ( 'Failed to create KernelWidgetManager' ) ;
777
- }
778
- if ( wManager . rendermime !== rendermime ) {
779
- wManager . attachToRendermime ( rendermime ) ;
780
- }
781
- return wManager ;
782
- }
783
-
784
757
/**
785
758
* Get the widgetManager that owns the model id=model_id.
786
759
* @param model_id An existing model_id
@@ -795,6 +768,32 @@ export function findWidgetManager(model_id: string): KernelWidgetManager {
795
768
throw new Error ( `A widget manager was not found for model_id ${ model_id } '` ) ;
796
769
}
797
770
771
+ /**
772
+ * Will define wManager as a renderer for rendermime if rendermime
773
+ * is not the global rendermime or there is only one wManager.
774
+ * If wManager is not provided, it will make the rendermine more general.
775
+ */
776
+ function attachToRendermime (
777
+ rendermime : IRenderMimeRegistry ,
778
+ wManager ?: KernelWidgetManager
779
+ ) {
780
+ const wManager_ =
781
+ rendermime === LabWidgetManager . globalRendermime &&
782
+ Private . kernelWidgetManagers . size > 1
783
+ ? undefined
784
+ : wManager ;
785
+
786
+ rendermime . removeMimeType ( WIDGET_VIEW_MIMETYPE ) ;
787
+ rendermime . addFactory (
788
+ {
789
+ safe : false ,
790
+ mimeTypes : [ WIDGET_VIEW_MIMETYPE ] ,
791
+ createRenderer : ( options ) => new WidgetRenderer ( options , wManager_ ) ,
792
+ } ,
793
+ - 10
794
+ ) ;
795
+ }
796
+
798
797
/**
799
798
* A namespace for private data
800
799
*/
0 commit comments