123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- // Copyright (c) Jupyter Development Team.
- // Distributed under the terms of the Modified BSD License.
- import { ILayoutRestorer } from '@jupyterlab/application';
- import { WidgetTracker } from '@jupyterlab/apputils';
- import {
- MarkdownViewer,
- MarkdownViewerFactory,
- IMarkdownViewerTracker
- } from '@jupyterlab/markdownviewer';
- import {
- IRenderMimeRegistry,
- markdownRendererFactory
- } from '@jupyterlab/rendermime';
- import { ISettingRegistry } from '@jupyterlab/settingregistry';
- import { PathExt } from '@jupyterlab/coreutils';
- import { IMiddleToken } from '@jupyterlab/example-federated-middle';
- /**
- * The command IDs used by the markdownviewer plugin.
- */
- let CommandIDs;
- (function (CommandIDs) {
- CommandIDs.markdownPreview = 'markdownviewer:open';
- CommandIDs.markdownEditor = 'markdownviewer:edit';
- })(CommandIDs || (CommandIDs = {}));
- /**
- * The name of the factory that creates markdown viewer widgets.
- */
- const FACTORY = 'Markdown Preview (Federated)';
- /**
- * The markdown viewer plugin.
- */
- const plugin = {
- activate,
- id: '@jupyterlab/example-federated-md:plugin',
- provides: IMarkdownViewerTracker,
- requires: [
- ILayoutRestorer,
- IRenderMimeRegistry,
- ISettingRegistry,
- IMiddleToken
- ],
- autoStart: true
- };
- /**
- * Activate the markdown viewer plugin.
- */
- function activate(app, restorer, rendermime, settingRegistry, middleToken) {
- console.log(middleToken);
- const { commands, docRegistry } = app;
- // Add the markdown renderer factory.
- rendermime.addFactory(markdownRendererFactory);
- const namespace = 'markdownviewer-widget';
- const tracker = new WidgetTracker({
- namespace
- });
- let config = Object.assign({}, MarkdownViewer.defaultConfig);
- /**
- * Update the settings of a widget.
- */
- function updateWidget(widget) {
- Object.keys(config).forEach(k => {
- let _a;
- widget.setOption(
- k,
- (_a = config[k]) !== null && _a !== void 0 ? _a : null
- );
- });
- }
- /**
- * Update the setting values.
- */
- function updateSettings(settings) {
- config = settings.composite;
- tracker.forEach(widget => {
- updateWidget(widget.content);
- });
- }
- // Fetch the initial state of the settings.
- settingRegistry
- .load(plugin.id)
- .then(settings => {
- settings.changed.connect(() => {
- updateSettings(settings);
- });
- updateSettings(settings);
- })
- .catch(reason => {
- console.error(reason.message);
- });
- // Register the MarkdownViewer factory.
- const factory = new MarkdownViewerFactory({
- rendermime,
- name: FACTORY,
- primaryFileType: docRegistry.getFileType('markdown'),
- fileTypes: ['markdown'],
- defaultRendered: ['markdown']
- });
- factory.widgetCreated.connect((sender, widget) => {
- // Notify the widget tracker if restore data needs to update.
- widget.context.pathChanged.connect(() => {
- void tracker.save(widget);
- });
- // Handle the settings of new widgets.
- updateWidget(widget.content);
- void tracker.add(widget);
- });
- docRegistry.addWidgetFactory(factory);
- // Handle state restoration.
- void restorer.restore(tracker, {
- command: 'docmanager:open',
- args: widget => ({ path: widget.context.path, factory: FACTORY }),
- name: widget => widget.context.path
- });
- commands.addCommand(CommandIDs.markdownPreview, {
- label: 'Markdown Preview',
- execute: args => {
- const path = args['path'];
- if (typeof path !== 'string') {
- return;
- }
- return commands.execute('docmanager:open', {
- path,
- factory: FACTORY,
- options: args['options']
- });
- }
- });
- commands.addCommand(CommandIDs.markdownEditor, {
- execute: () => {
- const widget = tracker.currentWidget;
- if (!widget) {
- return;
- }
- const path = widget.context.path;
- return commands.execute('docmanager:open', {
- path,
- factory: 'Editor',
- options: {
- mode: 'split-right'
- }
- });
- },
- isVisible: () => {
- const widget = tracker.currentWidget;
- return (
- (widget && PathExt.extname(widget.context.path) === '.md') || false
- );
- },
- label: 'Show Markdown Editor'
- });
- app.contextMenu.addItem({
- command: CommandIDs.markdownEditor,
- selector: '.jp-RenderedMarkdown'
- });
- return tracker;
- }
- /**
- * Export the plugin as default.
- */
- export default plugin;
- //# sourceMappingURL=index.js.map
|