plugin.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. 'use strict';
  4. import {
  5. NotebookWidget, NotebookModel, NBData, populateNotebookModel
  6. } from 'jupyter-js-notebook';
  7. import {
  8. Container
  9. } from 'phosphor-di';
  10. import {
  11. IContentsModel, IContentsManager
  12. } from 'jupyter-js-services';
  13. import {
  14. IServicesProvider, IFileOpener, IFileHandler
  15. } from '../index';
  16. import {
  17. AbstractFileHandler
  18. } from 'jupyter-js-filebrowser';
  19. import {
  20. Widget
  21. } from 'phosphor-widget';
  22. import './plugin.css';
  23. /**
  24. * Register the plugin contributions.
  25. *
  26. * @param container - The di container for type registration.
  27. *
  28. * #### Notes
  29. * This is called automatically when the plugin is loaded.
  30. */
  31. export
  32. function resolve(container: Container): Promise<IFileHandler> {
  33. return container.resolve({
  34. requires: [IServicesProvider, IFileOpener],
  35. create: (services, opener) => {
  36. let handler = new NotebookFileHandler(services.contentsManager);
  37. opener.register(handler);
  38. return handler;
  39. }
  40. });
  41. }
  42. /**
  43. * An implementation of a file handler.
  44. */
  45. export
  46. class NotebookFileHandler extends AbstractFileHandler {
  47. /**
  48. * Get the list of file extensions supported by the handler.
  49. */
  50. get fileExtensions(): string[] {
  51. return ['.ipynb']
  52. }
  53. /**
  54. * Get file contents given a path.
  55. */
  56. protected getContents(path: string): Promise<IContentsModel> {
  57. return this.manager.get(path, { type: 'notebook' });
  58. }
  59. /**
  60. * Create the widget from an `IContentsModel`.
  61. */
  62. protected createWidget(path: string): Widget {
  63. let model = new NotebookModel();
  64. let widget = new NotebookWidget(model);
  65. widget.title.text = path.split('/').pop();
  66. return widget;
  67. }
  68. protected setState(widget: NotebookWidget, model: IContentsModel): Promise<void> {
  69. let nbdata: NBData = makedata(model);
  70. populateNotebookModel(widget.model, nbdata);
  71. return Promise.resolve();
  72. }
  73. protected getState(widget: NotebookWidget): Promise<IContentsModel> {
  74. return Promise.resolve(void 0);
  75. }
  76. }
  77. function makedata(a: IContentsModel): NBData {
  78. return {
  79. content: a.content,
  80. name: a.name,
  81. path: a.path
  82. }
  83. }