index.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import {
  4. IWidgetExtension, IDocumentContext, IDocumentModel, DocumentRegistry
  5. } from 'jupyter-js-ui/lib/docmanager';
  6. import {
  7. IDisposable, DisposableDelegate
  8. } from 'phosphor-disposable';
  9. import {
  10. Widget
  11. } from 'phosphor-widget';
  12. import {
  13. NotebookPanel
  14. } from 'jupyter-js-notebook/lib/notebook/panel';
  15. import {
  16. Application
  17. } from 'phosphide/lib/core/application';
  18. import {
  19. WidgetManager, WidgetRenderer
  20. } from 'jupyter-js-ui/lib/widgets';
  21. import {
  22. IKernel
  23. } from 'jupyter-js-services';
  24. const WIDGET_MIMETYPE = 'application/vnd.jupyter.widget';
  25. /**
  26. * The widget manager provider.
  27. */
  28. export
  29. const widgetManagerExtension = {
  30. id: 'jupyter.extensions.widgetManager',
  31. requires: [DocumentRegistry],
  32. activate: activateWidgetExtension
  33. };
  34. export
  35. class IPyWidgetExtension implements IWidgetExtension<NotebookPanel>{
  36. /**
  37. * Create a new extension object.
  38. */
  39. createNew(nb: NotebookPanel, model: IDocumentModel,
  40. context: IDocumentContext): IDisposable {
  41. let wManager = new WidgetManager(context);
  42. let wRenderer = new WidgetRenderer(wManager);
  43. nb.content.rendermime.addRenderer(WIDGET_MIMETYPE, wRenderer, 0)
  44. return new DisposableDelegate(() => {
  45. nb.content.rendermime.removeRenderer(WIDGET_MIMETYPE);
  46. wRenderer.dispose();
  47. wManager.dispose();
  48. })
  49. }
  50. }
  51. /**
  52. * Activate the widget extension.
  53. */
  54. function activateWidgetExtension(app: Application, registry: DocumentRegistry) {
  55. registry.registerExtension('Notebook', new IPyWidgetExtension());
  56. }