ソースを参照

[cellEditor] parametrize BaseCellWidget.Renderer with editorFactory

akosyakov 8 年 前
コミット
10126c55be
1 ファイル変更40 行追加4 行削除
  1. 40 4
      src/notebook/cells/widget.ts

+ 40 - 4
src/notebook/cells/widget.ts

@@ -25,6 +25,10 @@ import {
   IChangedArgs
 } from '../../common/interfaces';
 
+import {
+  CodeEditor
+} from '../../codeeditor';
+
 import {
   RenderMime
 } from '../../rendermime';
@@ -38,7 +42,7 @@ import {
 } from '../output-area';
 
 import {
-  ICellEditorWidget
+  ICellEditorWidget, CodeCellEditorWidget
 } from './editor';
 
 import {
@@ -389,11 +393,26 @@ namespace BaseCellWidget {
    * The default implementation of an `IRenderer`.
    */
   export
-  abstract class Renderer implements IRenderer {
+  class Renderer implements IRenderer {
+
+    /**
+     * A code editor factory.
+     */
+    readonly editorFactory: (host: Widget) => CodeEditor.IEditor;
+
+    /**
+     * Creates a new renderer.
+     */
+    constructor(options: Renderer.IOptions) {
+      this.editorFactory = options.editorFactory;
+    }
+
     /**
      * Create a new cell editor for the widget.
      */
-    abstract createCellEditor(): ICellEditorWidget;
+    createCellEditor(): ICellEditorWidget {
+      return new CodeCellEditorWidget(this.editorFactory);
+    }
 
     /**
      * Create a new input area for the widget.
@@ -402,6 +421,23 @@ namespace BaseCellWidget {
       return new InputAreaWidget(editor);
     }
   }
+
+  /**
+   * The namespace for the `Renderer` class statics.
+   */
+  export
+  namespace Renderer {
+    /**
+     * An options object for initializing a renderer.
+     */
+    export
+    interface IOptions {
+      /**
+       * A code editor factory.
+       */
+      readonly editorFactory: (host: Widget) => CodeEditor.IEditor;
+    }
+  }
 }
 
 
@@ -574,7 +610,7 @@ namespace CodeCellWidget {
    * The default implementation of an `IRenderer`.
    */
   export
-  abstract class Renderer extends BaseCellWidget.Renderer implements IRenderer {
+  class Renderer extends BaseCellWidget.Renderer implements IRenderer {
     /**
      * Create an output area widget.
      */