@@ -326,6 +326,8 @@ export abstract class LabWidgetManager
326326 await this . handle_comm_open ( oldComm , msg ) ;
327327 } ;
328328
329+ static globalRendermime : IRenderMimeRegistry ;
330+
329331 protected _restored = new Signal < this, void > ( this ) ;
330332 protected _restoredStatus = false ;
331333 protected _kernelRestoreInProgress = false ;
@@ -346,20 +348,24 @@ export abstract class LabWidgetManager
346348
347349/**
348350 * 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.
349352 */
350353export class KernelWidgetManager extends LabWidgetManager {
351354 constructor (
352355 kernel : Kernel . IKernelConnection ,
353- rendermime : IRenderMimeRegistry
356+ rendermime : IRenderMimeRegistry | null
354357 ) {
358+ if ( ! rendermime ) {
359+ rendermime = LabWidgetManager . globalRendermime ;
360+ }
355361 const instance = Private . kernelWidgetManagers . get ( kernel . id ) ;
356362 if ( instance ) {
357- instance . attachToRendermime ( rendermime ) ;
363+ attachToRendermime ( rendermime , instance ) ;
358364 return instance ;
359365 }
360366 super ( rendermime ) ;
361- this . attachToRendermime ( rendermime ) ;
362367 Private . kernelWidgetManagers . set ( kernel . id , this ) ;
368+ attachToRendermime ( rendermime , this ) ;
363369 this . _kernel = kernel ;
364370 this . loadCustomWidgetDefinitions ( ) ;
365371 LabWidgetManager . WIDGET_REGISTRY . changed . connect ( ( ) =>
@@ -433,7 +439,8 @@ export class KernelWidgetManager extends LabWidgetManager {
433439 if ( this . isDisposed ) {
434440 return ;
435441 }
436-
442+ attachToRendermime ( this . rendermime ) ;
443+ Private . kernelWidgetManagers . delete ( this . kernel . id ) ;
437444 this . _kernel = null ! ;
438445 super . dispose ( ) ;
439446 }
@@ -452,18 +459,6 @@ export class KernelWidgetManager extends LabWidgetManager {
452459 return this . filterExistingModelState ( serialized_state ) ;
453460 }
454461
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-
467462 private _kernel : Kernel . IKernelConnection ;
468463 protected _kernelRestoreInProgress = false ;
469464}
@@ -537,7 +532,10 @@ export class WidgetManager extends Backbone.Model implements IDisposable {
537532 ) ;
538533 }
539534 if ( this . kernel ) {
540- this . _widgetManager = getWidgetManager ( this . kernel , this . rendermime ) ;
535+ this . _widgetManager = new KernelWidgetManager (
536+ this . kernel ,
537+ this . rendermime
538+ ) ;
541539 this . _widgetManager . onUnhandledIOPubMessage . connect (
542540 this . onUnhandledIOPubMessage ,
543541 this
@@ -756,31 +754,6 @@ export namespace WidgetManager {
756754 } ;
757755}
758756
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-
784757/**
785758 * Get the widgetManager that owns the model id=model_id.
786759 * @param model_id An existing model_id
@@ -795,6 +768,32 @@ export function findWidgetManager(model_id: string): KernelWidgetManager {
795768 throw new Error ( `A widget manager was not found for model_id ${ model_id } '` ) ;
796769}
797770
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+
798797/**
799798 * A namespace for private data
800799 */
0 commit comments