Browse Source

Add activation handling to the faq

Steven Silvester 7 years ago
parent
commit
b5dbf0fa3c
2 changed files with 45 additions and 25 deletions
  1. 1 0
      packages/faq-extension/package.json
  2. 44 25
      packages/faq-extension/src/index.ts

+ 1 - 0
packages/faq-extension/package.json

@@ -17,6 +17,7 @@
     "@jupyterlab/application": "^0.9.0",
     "@jupyterlab/apputils": "^0.9.0",
     "@phosphor/coreutils": "^1.2.0",
+    "@phosphor/messaging": "^1.2.1",
     "@phosphor/widgets": "^1.3.0"
   },
   "devDependencies": {

+ 44 - 25
packages/faq-extension/src/index.ts

@@ -13,6 +13,10 @@ import {
   JSONExt
 } from '@phosphor/coreutils';
 
+import {
+  Message
+} from '@phosphor/messaging';
+
 import {
   PanelLayout, Widget
 } from '@phosphor/widgets';
@@ -52,6 +56,38 @@ export default plugin;
 const SOURCE = require('../faq.md');
 
 
+/**
+ * A widget which is an faq viewer.
+ */
+class FAQWidget extends Widget {
+  /**
+   * Construct a new `AppWidget`.
+   */
+  constructor(content: Widget) {
+    super();
+    this.addClass('jp-FAQ');
+    this.title.closable = true;
+    this.node.tabIndex = -1;
+    this.id = 'faq';
+    this.title.label = 'FAQ';
+
+    let toolbar = new Widget();
+    toolbar.addClass('jp-FAQ-toolbar');
+
+    let layout = this.layout = new PanelLayout();
+    layout.addWidget(toolbar);
+    layout.addWidget(content);
+  }
+
+  /**
+   * Handle `activate-requests events for the widget.
+   */
+  onActivateRequest(message: Message): void {
+    this.node.focus();
+  }
+}
+
+
 /**
  * Activate the FAQ plugin.
  */
@@ -71,37 +107,20 @@ function activate(app: JupyterLab, palette: ICommandPalette, restorer: ILayoutRe
     name: () => 'faq'
   });
 
-  let createWidget = () => {
-    let renderer = rendermime.createRenderer('text/markdown');
-    const model = rendermime.createModel({
-      data: { 'text/markdown': SOURCE }
-    });
-    renderer.renderModel(model);
-    renderer.addClass('jp-FAQ-content');
-
-    let parent = new Widget();
-    parent.id = 'faq';
-    parent.addClass('jp-FAQ');
-    parent.title.label = 'FAQ';
-    parent.title.closable = true;
-    parent.node.tabIndex = -1;
-    let toolbar = new Widget();
-    toolbar.addClass('jp-FAQ-toolbar');
-
-    let layout = parent.layout = new PanelLayout();
-    layout.addWidget(toolbar);
-    layout.addWidget(renderer);
-
-    return parent;
-  };
+  let content = rendermime.createRenderer('text/markdown');
+  const model = rendermime.createModel({
+    data: { 'text/markdown': SOURCE }
+  });
+  content.renderModel(model);
+  content.addClass('jp-FAQ-content');
 
-  let widget = createWidget();
+  let widget = new FAQWidget(content);
 
   commands.addCommand(command, {
     label: 'Open FAQ',
     execute: () => {
       if (widget.isDisposed) {
-        widget = createWidget();
+        widget = new FAQWidget(content);
       }
       if (!tracker.has(widget)) {
         tracker.add(widget);