|
@@ -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);
|