瀏覽代碼

[notebook/codemirror] Use IEditorServices and default renderers

akosyakov 8 年之前
父節點
當前提交
2f1e8b0301

+ 0 - 105
src/notebook/codemirror/cells/widget.ts

@@ -1,105 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import {
-  Widget
-} from 'phosphor/lib/ui/widget';
-
-import {
-  ICellEditorWidget, CodeCellEditorWidget
-} from '../../cells/editor';
-
-import {
-  CodeCellWidget
-} from '../../cells/widget';
-
-import {
-  CodeMirrorEditor
-} from '../../../codemirror/editor';
-
-
-/**
- * A code mirror renderer for a code cell widget.
- */
-export
-class CodeMirrorCodeCellWidgetRenderer extends CodeCellWidget.Renderer {
-  /**
-   * Construct a code mirror renderer for a code cell widget.
-   * @param editorConfiguration a code mirror editor configuration
-   * @param editorInitializer a code cell widget initializer
-   */
-  constructor(options: CodeMirrorCodeCellWidgetRenderer.IOptions = {}) {
-    super();
-    this._editorConfiguration = (options.editorConfiguration ||
-      CodeMirrorCodeCellWidgetRenderer.defaultEditorConfiguration);
-    this._editorInitializer = (options.editorInitializer ||
-      (editor => { /* no-op */ }));
-  }
-
-  /**
-   * Construct a code cell widget.
-   */
-  createCellEditor(): ICellEditorWidget {
-    let configuration = this._editorConfiguration;
-
-    const widget = new CodeCellEditorWidget((host: Widget) => {
-      return new CodeMirrorEditor(host.node, configuration);
-    });
-    this._editorInitializer((widget.editor as CodeMirrorEditor).editor);
-    return widget;
-  }
-
-  private _editorConfiguration: CodeMirror.EditorConfiguration;
-  private _editorInitializer: (editor: CodeMirror.Editor) => void;
-}
-
-
-/**
- * A namespace for `CodeMirrorCodeCellWidgetRenderer` statics.
- */
-export
-namespace CodeMirrorCodeCellWidgetRenderer {
-  /**
-   * The options used to construct a code mirror code cell widget renderer.
-   */
-  export
-  interface IOptions {
-    /**
-     * A code mirror editor configuration.
-     */
-    editorConfiguration?: CodeMirror.EditorConfiguration;
-
-    /**
-     * A code cell widget initializer function.
-     */
-    editorInitializer?: (editor: CodeMirror.Editor) => void;
-  }
-
-  /**
-   * A default code mirror configuration for a cell editor.
-   */
-  export
-  const defaultEditorConfiguration: CodeMirror.EditorConfiguration = {
-    // Default value of the theme is set in the parent constructor,
-    // but could be overridden here
-    indentUnit: 4,
-    readOnly: false,
-    extraKeys: {
-      'Cmd-Right': 'goLineRight',
-      'End': 'goLineRight',
-      'Cmd-Left': 'goLineLeft',
-      'Tab': 'indentMore',
-      'Shift-Tab': 'indentLess',
-      'Cmd-Alt-[': 'indentAuto',
-      'Ctrl-Alt-[': 'indentAuto',
-      'Cmd-/': 'toggleComment',
-      'Ctrl-/': 'toggleComment',
-    }
-  };
-
-  /**
-   * A default code mirror renderer for a code cell widget.
-   */
-  export
-  const defaultRenderer = new CodeMirrorCodeCellWidgetRenderer();
-}

+ 0 - 47
src/notebook/codemirror/notebook/panel.ts

@@ -1,47 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import {
-  RenderMime
-} from '../../../rendermime';
-
-import {
-  Notebook
-} from '../../notebook/widget';
-
-import {
-  NotebookPanel
-} from '../../notebook/panel';
-
-import {
-  CodeMirrorNotebookRenderer
-} from './widget';
-
-
-/**
- * A code mirror renderer for a notebook panel.
- */
-export
-class CodeMirrorNotebookPanelRenderer extends NotebookPanel.Renderer {
-  /**
-   * Create a notebook.
-   */
-  createContent(rendermime: RenderMime): Notebook {
-    return new Notebook({
-      rendermime,
-      renderer: CodeMirrorNotebookRenderer.defaultRenderer
-    });
-  }
-}
-
-
-/**
- * A namespace for `CodeMirrorNotebookPanelRenderer` statics.
- */
-export namespace CodeMirrorNotebookPanelRenderer {
-  /**
-   * A default code mirror renderer for a notebook panel.
-   */
-  export
-  const defaultRenderer = new CodeMirrorNotebookPanelRenderer();
-}

+ 0 - 125
src/notebook/codemirror/notebook/widget.ts

@@ -1,125 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import {
-  nbformat
-} from '@jupyterlab/services';
-
-import {
-  RenderMime
-} from '../../../rendermime';
-
-import {
-  ICodeCellModel, IMarkdownCellModel, IRawCellModel
-} from '../../cells/model';
-
-import {
-  CodeCellWidget, MarkdownCellWidget, RawCellWidget
-} from '../../cells/widget';
-
-import {
-  mimetypeForLanguage
-  } from '../../common/mimetype';
-
-import {
-  Notebook
-} from '../../notebook/widget';
-
-import {
-  CodeMirrorCodeCellWidgetRenderer
-} from '../cells/widget';
-
-
-/**
- * A code mirror renderer for a notebook.
- */
-export
-class CodeMirrorNotebookRenderer extends Notebook.Renderer {
-  /**
-   * Create a code cell editor.
-   */
-  createCodeCell(model: ICodeCellModel, rendermime: RenderMime): CodeCellWidget {
-    const widget = new CodeCellWidget({
-      rendermime,
-      renderer: CodeMirrorNotebookRenderer.defaultCodeCellRenderer
-    });
-    widget.model = model;
-    return widget;
-  }
-
-  /**
-   * Create a markdown cell editor.
-   */
-  createMarkdownCell(model: IMarkdownCellModel, rendermime: RenderMime): MarkdownCellWidget {
-    const widget = new MarkdownCellWidget({
-      rendermime,
-      renderer: CodeMirrorNotebookRenderer.defaultMarkdownCellRenderer
-    });
-    widget.model = model;
-    return widget;
-  }
-
-  /**
-   * Create a raw cell editor.
-   */
-  createRawCell(model: IRawCellModel): RawCellWidget {
-    const widget = new RawCellWidget({
-      renderer: CodeMirrorNotebookRenderer.defaultRawCellRenderer
-    });
-    widget.model = model;
-    return widget;
-  }
-
-  /**
-   * Get the preferred mimetype given language info.
-   */
-  getCodeMimetype(info: nbformat.ILanguageInfoMetadata): string {
-    return mimetypeForLanguage(info);
-  }
-}
-
-
-/**
- * A namespace for `CodeMirrorNotebookRenderer` statics.
- */
-export
-namespace CodeMirrorNotebookRenderer {
-  /**
-   * A default code mirror renderer for a code cell editor.
-   */
-  export
-  const defaultCodeCellRenderer = new CodeMirrorCodeCellWidgetRenderer({
-    editorInitializer: (editor) => {
-      editor.setOption('matchBrackets', true);
-      editor.setOption('autoCloseBrackets', true);
-    }
-  });
-
-  /**
-   * A default code mirror renderer for a markdown cell editor.
-   */
-  export
-  const defaultMarkdownCellRenderer = new CodeMirrorCodeCellWidgetRenderer({
-    editorInitializer: (editor) => {
-      // Turn on line wrapping for markdown cells.
-      editor.setOption('lineWrapping', true);
-    }
-  });
-
-  /**
-   * A default code mirror renderer for a raw cell editor.
-   */
-  export
-  const defaultRawCellRenderer = new CodeMirrorCodeCellWidgetRenderer({
-    editorInitializer: (editor) => {
-      // Turn on line wrapping for markdown cells.
-      editor.setOption('lineWrapping', true);
-    }
-  });
-
-  /**
-   * A default code mirror renderer for a notebook.
-   */
-  export
-  const defaultRenderer = new CodeMirrorNotebookRenderer();
-}

+ 37 - 6
src/notebook/codemirror/plugin.ts

@@ -2,23 +2,54 @@
 // Distributed under the terms of the Modified BSD License.
 
 import {
-  NotebookPanel
-} from '../notebook/panel';
+  NotebookPanel, Notebook
+} from '../notebook';
 
 import {
-  CodeMirrorNotebookPanelRenderer
-} from './notebook/panel';
+  CodeCellWidget
+} from '../cells';
 
 import {
-  JupyterLabPlugin
+  JupyterLab, JupyterLabPlugin
 } from '../../application';
 
+import {
+  IEditorServices
+} from '../../codeeditor';
+
 /**
  * The provider for a notebook's code mirror renderer.
  */
 export
 const plugin: JupyterLabPlugin<NotebookPanel.IRenderer> = {
   id: 'jupyter.services.notebook.codemirror.renderer',
+  requires: [IEditorServices],
   provides: NotebookPanel.IRenderer,
-  activate: () => CodeMirrorNotebookPanelRenderer.defaultRenderer
+  activate: activateRendererProvider
 };
+
+/**
+ * Activates the renderer provider extension.
+ */
+function activateRendererProvider(app: JupyterLab, editorServices: IEditorServices): NotebookPanel.IRenderer {
+  const codeCellRenderer = new CodeCellWidget.Renderer({
+    editorFactory: host => editorServices.factory.newInlineEditor(host.node, {
+      matchBrackets: true,
+      autoCloseBrackets: true
+    })
+  });
+  const rawCellRenderer = new CodeCellWidget.Renderer({
+    editorFactory: host => editorServices.factory.newInlineEditor(host.node, {
+      wordWrap: true
+    })
+  });
+  const markdownCellRenderer = rawCellRenderer;
+  const editorMimeTypeService = editorServices.mimeTypeService;
+  const notebookRenderer = new Notebook.Renderer({
+    codeCellRenderer, markdownCellRenderer, rawCellRenderer, editorMimeTypeService
+  });
+  return new NotebookPanel.Renderer({
+    notebookRenderer
+  });
+}
+