浏览代码

Add initial implementation of file opener plugin

Steven Silvester 9 年之前
父节点
当前提交
709d13c390
共有 4 个文件被更改,包括 174 次插入0 次删除
  1. 59 0
      src/fileopener/index.ts
  2. 112 0
      src/fileopener/plugin.ts
  3. 1 0
      src/index.ts
  4. 2 0
      src/tsconfig.json

+ 59 - 0
src/fileopener/index.ts

@@ -0,0 +1,59 @@
+// Copyright (c) Jupyter Development Team.
+// Distributed under the terms of the Modified BSD License.
+'use strict';
+
+import {
+  Widget
+} from 'phosphor-widget';
+
+import {
+  Token
+} from 'phosphor-di';
+
+
+/**
+ * An interface for a file handler
+ */
+export
+interface IFileHandler {
+  /**
+   * A list of regexes for matching file names.
+   */
+  fileRegexes: string[];
+
+  /**
+   * Open the file and return a populated widget.
+   */
+  open(path: string): Promise<Widget>;
+
+  /**
+   * Close the file widget.
+   */
+  close(widget: Widget): boolean;
+}
+
+
+/**
+ * An interface for a file opener.
+ */
+export
+interface IFileOpener {
+  /**
+   * Register a file opener.
+   */
+  register(handler: IFileHandler): void;
+}
+
+
+/**
+ * The dependency token for the `IFileHandler` interface.
+ */
+export
+const IFileHandler = new Token<IFileHandler>('jupyter-js-plugins.IFileHandler');
+
+
+/**
+ * The dependency token for the `IFileOpener` interface.
+ */
+export
+const IFileOpener = new Token<IFileOpener>('jupyter-js-plugins.IFileOpener');

+ 112 - 0
src/fileopener/plugin.ts

@@ -0,0 +1,112 @@
+// Copyright (c) Jupyter Development Team.
+// Distributed under the terms of the Modified BSD License.
+'use strict';
+
+import {
+  FileBrowser, FileHandler
+} from 'jupyter-js-filebrowser';
+
+import {
+  Container, Token
+} from 'phosphor-di';
+
+import {
+  Widget
+} from 'phosphor-widget';
+
+import {
+  IServicesProvider, IFileBrowserProvider
+} from '../index';
+
+import {
+  IFileHandler, IFileOpener
+} from './index';
+
+
+/**
+ * Register the plugin contributions.
+ *
+ * @param container - The di container for type registration.
+ *
+ * #### Notes
+ * This is called automatically when the plugin is loaded.
+ */
+export
+function register(container: Container): void {
+  container.register(IFileHandler, DefaultFileHandler);
+  container.register(IFileOpener, FileOpener);
+}
+
+
+/**
+ * An implementation of an IFileHandler.
+ */
+class DefaultFileHandler implements IFileHandler {
+
+  /**
+   * The dependencies required by the file handler.
+   */
+  static requires: Token<any>[] = [IServicesProvider];
+
+  /**
+   * Create a new file handler instance.
+   */
+  static create(services: IServicesProvider): IFileHandler {
+    return new DefaultFileHandler(services);
+  }
+
+  /**
+   * Construct a new DefaultFileHandler.
+   */
+  constructor(services: IServicesProvider) {
+    this._handler = new FileHandler(services.contentsManager);
+  }
+
+  get fileRegexes(): string[] {
+    return this._handler.fileRegexes;
+  }
+
+  open(path: string): Promise<Widget> {
+    return this._handler.open(path);
+  }
+
+  close(widget: Widget): boolean {
+    return this._handler.close(widget);
+  }
+
+  private _handler: FileHandler = null;
+}
+
+
+/**
+ * An implementation on an IFileOpener.
+ */
+class FileOpener implements IFileOpener {
+
+  /**
+   * The dependencies required by the file opener.
+   */
+  static requires: Token<any>[] = [IFileBrowserProvider];
+
+  /**
+   * Create a new file opener instance.
+   */
+  static create(browserProvider: IFileBrowserProvider): IFileOpener {
+    return new FileOpener(browserProvider);
+  }
+
+  constructor(browserProvider: IFileBrowserProvider) {
+    browserProvider.fileBrowser.openRequested.connect(this._openRequested,
+      this);
+  }
+
+  register(handler: IFileHandler) {
+    this._handlers.push(handler);
+  }
+
+  private _openRequested(browser: FileBrowser, path: string) {
+
+  }
+
+  private _handlers: IFileHandler[] = [];
+}

+ 1 - 0
src/index.ts

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

+ 2 - 0
src/tsconfig.json

@@ -18,6 +18,8 @@
     "editor/plugin.ts",
     "editor/plugin.ts",
     "filebrowser/index.ts",
     "filebrowser/index.ts",
     "filebrowser/plugin.ts",
     "filebrowser/plugin.ts",
+    "fileopener/index.ts",
+    "fileopener/plugin.ts",
     "services/index.ts",
     "services/index.ts",
     "services/plugin.ts",
     "services/plugin.ts",
     "terminal/index.ts",
     "terminal/index.ts",