浏览代码

Fix open with and clean up markdown widget

Steven Silvester 8 年之前
父节点
当前提交
10744276b6
共有 3 个文件被更改,包括 35 次插入13 次删除
  1. 1 1
      src/filebrowser/browser.ts
  2. 2 1
      src/markdownwidget/theme.css
  3. 32 11
      src/markdownwidget/widget.ts

+ 1 - 1
src/filebrowser/browser.ts

@@ -184,7 +184,7 @@ class FileBrowserWidget extends Widget {
    */
    */
   openPath(path: string, widgetName='default'): Widget {
   openPath(path: string, widgetName='default'): Widget {
     let model = this.model;
     let model = this.model;
-    let widget = this._manager.findWidget(path);
+    let widget = this._manager.findWidget(path, widgetName);
     if (!widget) {
     if (!widget) {
       widget = this._manager.open(path, widgetName);
       widget = this._manager.open(path, widgetName);
       let context = this._manager.contextForWidget(widget);
       let context = this._manager.contextForWidget(widget);

+ 2 - 1
src/markdownwidget/theme.css

@@ -3,5 +3,6 @@
 | Distributed under the terms of the Modified BSD License.
 | Distributed under the terms of the Modified BSD License.
 |----------------------------------------------------------------------------*/
 |----------------------------------------------------------------------------*/
 .jp-MarkdownWidget {
 .jp-MarkdownWidget {
-    border-top: 1px solid #E0E0E0;
+  border-top: 1px solid #E0E0E0;
+  padding: 14px;
 }
 }

+ 32 - 11
src/markdownwidget/widget.ts

@@ -5,6 +5,10 @@ import {
   IKernel
   IKernel
 } from 'jupyter-js-services';
 } from 'jupyter-js-services';
 
 
+import {
+  Message
+} from 'phosphor-messaging';
+
 import {
 import {
   PanelLayout
   PanelLayout
 } from 'phosphor-panel';
 } from 'phosphor-panel';
@@ -19,7 +23,7 @@ import {
 
 
 import {
 import {
   MarkdownRenderer
   MarkdownRenderer
-} from '../renderers'
+} from '../renderers';
 
 
 
 
 /**
 /**
@@ -41,24 +45,41 @@ class MarkdownWidget extends Widget {
     this.addClass(MD_CLASS);
     this.addClass(MD_CLASS);
     this.layout = new PanelLayout();
     this.layout = new PanelLayout();
     this.title.text = context.path.split('/').pop();
     this.title.text = context.path.split('/').pop();
-
-    let model = context.model;
-    let layout = this.layout as PanelLayout;
-    let renderer = new MarkdownRenderer();
+    this._renderer = new MarkdownRenderer();
+    this._model = context.model;
 
 
     context.pathChanged.connect((c, path) => {
     context.pathChanged.connect((c, path) => {
       this.title.text = path.split('/').pop();
       this.title.text = path.split('/').pop();
     });
     });
 
 
-    model.contentChanged.connect(() => {
-      let widget = renderer.render('text/markdown', model.toString());
-      if (layout.childCount()) {
-        layout.childAt(0).dispose();
-      }
-      layout.addChild(widget);
+    context.model.contentChanged.connect(() => {
+      this.update();
     });
     });
+  }
 
 
+  /**
+   * Handle an `after-attach` message to the widget.
+   */
+  protected onAfterAttach(msg: Message): void {
+    this.update();
   }
   }
+
+  /**
+   * Handle an `update-request` message to the widget.
+   */
+  protected onUpdateRequest(msg: Message): void {
+    let renderer = this._renderer;
+    let model = this._model;
+    let layout = this.layout as PanelLayout;
+    let widget = renderer.render('text/markdown', model.toString());
+    if (layout.childCount()) {
+      layout.childAt(0).dispose();
+    }
+    layout.addChild(widget);
+  }
+
+  private _renderer: MarkdownRenderer = null;
+  private _model: IDocumentModel = null;
 }
 }