浏览代码

Update the notebook opener plugin for the new framework

Jason Grout 9 年之前
父节点
当前提交
f302167c19
共有 9 个文件被更改,包括 46 次插入94 次删除
  1. 0 0
      examples/lab/example.ipynb
  2. 5 25
      examples/lab/src/plugin.ts
  3. 2 2
      package.json
  4. 4 1
      src/fileopener/index.ts
  5. 1 1
      src/fileopener/plugin.ts
  6. 0 1
      src/index.ts
  7. 0 32
      src/notebook/index.ts
  8. 34 31
      src/notebook/plugin.ts
  9. 0 1
      src/tsconfig.json

+ 0 - 0
examples/lab/test.ipynb → examples/lab/example.ipynb


+ 5 - 25
examples/lab/src/plugin.ts

@@ -27,11 +27,7 @@ import {
 } from 'phosphor-widget';
 
 import {
-<<<<<<< 4243cfb95b3b892f880811814c2a2241d062a0f6
   ITerminalProvider, IFileBrowserProvider, IServicesProvider, IFileOpener
-=======
-  ITerminalProvider, IFileBrowserProvider, INotebookProvider, IServicesProvider
->>>>>>> Initial work to incorporate a notebook widget.
 } from '../../lib';
 
 
@@ -57,46 +53,28 @@ class DefaultHandler {
   /**
    * The dependencies required by the default plugin.
    */
-<<<<<<< 4243cfb95b3b892f880811814c2a2241d062a0f6
   static requires: Token<any>[] = [IAppShell, ITerminalProvider, ICommandPalette, ICommandRegistry, IFileBrowserProvider, IServicesProvider, IFileOpener];
-=======
-  static requires: Token<any>[] = [IAppShell, ITerminalProvider, ICommandPalette, ICommandRegistry, IFileBrowserProvider, INotebookProvider, IServicesProvider];
->>>>>>> Initial work to incorporate a notebook widget.
 
   /**
    * Create a default plugin instance..
    */
   static create(shell: IAppShell, term: ITerminalProvider, palette: ICommandPalette, registry: ICommandRegistry, browser: IFileBrowserProvider,
-<<<<<<< 4243cfb95b3b892f880811814c2a2241d062a0f6
     services: IServicesProvider, opener: IFileOpener): DefaultHandler {
     return new DefaultHandler(shell, term, palette, registry, browser,
       services, opener);
-=======
-    notebook: INotebookProvider, services: IServicesProvider): DefaultHandler {
-    return new DefaultHandler(shell, term, palette, registry, browser, notebook, services);
->>>>>>> Initial work to incorporate a notebook widget.
   }
 
   /**
    * Construct a new default plugin.
    */
-<<<<<<< d42f834d98c73755769ddad046348959faed2b9d
-<<<<<<< 4243cfb95b3b892f880811814c2a2241d062a0f6
   constructor(shell: IAppShell, term: ITerminalProvider, palette: ICommandPalette, registry: ICommandRegistry, browser: IFileBrowserProvider,
     services: IServicesProvider, opener: IFileOpener) {
-=======
-  constructor(shell: IAppShell, term: ITerminalProvider, palette: ICommandPalette, registry: ICommandRegistry, notebook: INotebookProvider, browser: IFileBrowserProvider,
-    services: IServicesProvider) {
->>>>>>> Initial work to incorporate a notebook widget.
-=======
-  constructor(shell: IAppShell, term: ITerminalProvider, palette: ICommandPalette, registry: ICommandRegistry,  browser: IFileBrowserProvider, notebook: INotebookProvider, services: IServicesProvider) {
->>>>>>> Work-in-progress for a notebook widget
     this._shell = shell;
     this._term = term;
     this._palette = palette;
     this._registry = registry;
     this._browser = browser.fileBrowser;
-    this._notebook = notebook;
+    //this._notebook = notebook;
     this._services = services;
     this._opener = opener;
   }
@@ -170,6 +148,8 @@ class DefaultHandler {
       });
     });
 */
+
+/*
     let nbpath = 'test.ipynb'
     
     let sessions = this._services.notebookSessionManager;
@@ -178,7 +158,7 @@ class DefaultHandler {
       nb.title.text = nbpath;
       this._shell.addToMainArea(nb);
     })
-    
+  */  
   }
 
   private _term: ITerminalProvider = null;
@@ -186,7 +166,7 @@ class DefaultHandler {
   private _palette: ICommandPalette = null;
   private _registry: ICommandRegistry = null;
   private _browser: FileBrowserWidget = null;
-  private _notebook: INotebookProvider = null;
+  //private _notebook: INotebookProvider = null;
   private _services: IServicesProvider = null;
   private _opener: IFileOpener = null;
 }

+ 2 - 2
package.json

@@ -33,8 +33,8 @@
     "mocha": "^2.2.5",
     "rimraf": "^2.4.2",
     "style-loader": "^0.13.0",
-    "typedoc": "^0.3.11",
-    "typescript": "^1.6.2",
+    "typedoc": "^0.3.12",
+    "typescript": "^1.7.5",
     "webpack": "^1.12.9"
   },
   "scripts": {

+ 4 - 1
src/fileopener/index.ts

@@ -40,8 +40,11 @@ export
 interface IFileOpener {
   /**
    * Register a file opener.
+   * 
+   * @param handler - The file handler to register.
+   * @param isDefault (default to false) - whether the handler is the default handler
    */
-  register(handler: IFileHandler, isDefault: boolean): void;
+  register(handler: IFileHandler, isDefault?: boolean): void;
 }
 
 

+ 1 - 1
src/fileopener/plugin.ts

@@ -69,7 +69,7 @@ class FileOpener implements IFileOpener {
   /**
    * Register a file handler.
    */
-  register(handler: IFileHandler, isDefault: boolean) {
+  register(handler: IFileHandler, isDefault: boolean = false) {
     this._handlers.push(handler);
     isDefaultProperty.set(handler, isDefault);
   }

+ 0 - 1
src/index.ts

@@ -6,4 +6,3 @@ export * from './filebrowser/index';
 export * from './fileopener/index';
 export * from './services/index';
 export * from './terminal/index';
-export * from './notebook/index';

+ 0 - 32
src/notebook/index.ts

@@ -1,32 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-'use strict';
-
-import {
-  NotebookWidget
-} from 'jupyter-js-notebook';
-
-import {
-  Token
-} from 'phosphor-di';
-
-
-
-/**
- * A factory for creating a Jupyter editor.
- */
-export
-interface INotebookProvider {
-
-  /**
-   * Create a new Notebook instance.
-   */
-  createNotebook(path: string): Promise<NotebookWidget>;
-}
-
-
-/**
- * The dependency token for the `INotebookProvider` interface.
- */
-export
-const INotebookProvider = new Token<INotebookProvider>('jupyter-js-plugins.INotebookProvider');

+ 34 - 31
src/notebook/plugin.ts

@@ -3,29 +3,31 @@
 'use strict';
 
 import {
-  NotebookWidget, NotebookModel, makeModels, NBData
+  NotebookWidget, makeModels, NBData
 } from 'jupyter-js-notebook';
 
 import {
-  Container, Token
+  Container
 } from 'phosphor-di';
 
 import {
-  INotebookProvider
-} from './index';
+  IContentsModel, IContentsManager
+} from 'jupyter-js-services';
 
 import {
-  IContentsModel
-} from 'jupyter-js-services';
+  IServicesProvider, IFileOpener
+} from '../index';
 
+import {
+  AbstractFileHandler
+} from 'jupyter-js-filebrowser';
 
 import {
-  IServicesProvider
-} from '../index';
+  Widget
+} from 'phosphor-widget';
 
 import './plugin.css';
 
-
 /**
  * Register the plugin contributions.
  *
@@ -35,43 +37,44 @@ import './plugin.css';
  * This is called automatically when the plugin is loaded.
  */
 export
-function register(container: Container): void {
-  container.register(INotebookProvider, NotebookProvider);
+function resolve(container: Container) {
+  Promise.all([container.resolve(IServicesProvider),
+               container.resolve(IFileOpener)]).then(([services, opener]) => {
+    opener.register(new NotebookFileHandler(services.contentsManager))
+  });
 }
 
+
 /**
- * An implementation of an INotebookProvider.
+ * An implementation of a file handler.
  */
-class NotebookProvider implements INotebookProvider {
+export
+class NotebookFileHandler extends AbstractFileHandler {
 
   /**
-   * The dependencies required by the notebook factory.
+   * Get the list of file extensions supported by the handler.
    */
-  static requires: Token<any>[] = [IServicesProvider];
-
+  get fileExtensions(): string[] {
+    return ['.ipynb']
+  }
+  
   /**
-   * Create a new notebook factory instance.
+   * Get file contents given a path.
    */
-  static create(services: IServicesProvider): INotebookProvider {
-    return new NotebookProvider(services);
-  }
-
-  constructor(services: IServicesProvider) {
-      this._services = services;
+  protected getContents(manager: IContentsManager, path: string): Promise<IContentsModel> {
+    return manager.get(path, { type: 'notebook' });
   }
 
   /**
-   * Create a new Notebook instance.
+   * Create the widget from an `IContentsModel`.
    */
-  createNotebook(path: string): Promise<NotebookWidget> {
-    return this._services.contentsManager.get(path, {}).then((data) => {
-      let nbdata: NBData = makedata(data);
+  protected createWidget(contents: IContentsModel): Widget {
+      let nbdata: NBData = makedata(contents);
       let nbModel = makeModels(nbdata);
-      return new NotebookWidget(nbModel);
-   })
+      let widget = new NotebookWidget(nbModel);
+      widget.title.text = contents.name;
+      return widget;
   }
-  
-  private _services: IServicesProvider;
 }
 
 function makedata(a: IContentsModel): NBData {

+ 0 - 1
src/tsconfig.json

@@ -18,7 +18,6 @@
     "filehandler/plugin.ts",
     "fileopener/index.ts",
     "fileopener/plugin.ts",
-    "notebook/index.ts",
     "notebook/plugin.ts",
     "services/index.ts",
     "services/plugin.ts",