Преглед изворни кода

Merge pull request #6029 from rahulpshah/feature/JP-6017-render-mkd-cells

Add "Render all markdown cells" command, or automatically render markdown
Ian Rose пре 6 година
родитељ
комит
cfa683ff18

+ 0 - 1
packages/mainmenu-extension/src/index.ts

@@ -678,7 +678,6 @@ export function createRunMenu(app: JupyterFrontEnd, menu: RunMenu): void {
     isEnabled: Private.delegateEnabled(app, menu.codeRunners, 'runAll'),
     execute: Private.delegateExecute(app, menu.codeRunners, 'runAll')
   });
-
   commands.addCommand(CommandIDs.restartAndRunAll, {
     label: () => {
       const noun = Private.delegateLabel(app, menu.codeRunners, 'noun');

+ 19 - 0
packages/notebook-extension/src/index.ts

@@ -119,6 +119,8 @@ namespace CommandIDs {
 
   export const runAllBelow = 'notebook:run-all-below';
 
+  export const renderAllMarkdown = 'notebook:render-all-markdown';
+
   export const toCode = 'notebook:change-cell-to-code';
 
   export const toMarkdown = 'notebook:change-cell-to-markdown';
@@ -1037,6 +1039,17 @@ function addCommands(
       );
     }
   });
+  commands.addCommand(CommandIDs.renderAllMarkdown, {
+    label: 'Render All Markdown Cells',
+    execute: args => {
+      const current = getCurrent(args);
+      if (current) {
+        const { context, content } = current;
+        return NotebookActions.renderAllMarkdown(content, context.session);
+      }
+    },
+    isEnabled
+  });
   commands.addCommand(CommandIDs.restart, {
     label: 'Restart Kernel…',
     execute: args => {
@@ -1788,6 +1801,7 @@ function populatePalette(
     CommandIDs.restartClear,
     CommandIDs.restartRunAll,
     CommandIDs.runAll,
+    CommandIDs.renderAllMarkdown,
     CommandIDs.runAllAbove,
     CommandIDs.runAllBelow,
     CommandIDs.selectAll,
@@ -2073,6 +2087,10 @@ function populateMenus(
     }
   } as IRunMenu.ICodeRunner<NotebookPanel>);
 
+  // Add a renderAllMarkdown group to the run menu.
+  const renderAllMarkdown = [CommandIDs.renderAllMarkdown].map(command => {
+    return { command };
+  });
   // Add a run+insert and run+don't advance group to the run menu.
   const runExtras = [
     CommandIDs.runAndInsert,
@@ -2132,6 +2150,7 @@ function populateMenus(
   mainMenu.editMenu.addGroup(splitMergeGroup, 9);
   mainMenu.runMenu.addGroup(runExtras, 10);
   mainMenu.runMenu.addGroup(runAboveBelowGroup, 11);
+  mainMenu.runMenu.addGroup(renderAllMarkdown, 12);
 
   // Add kernel information to the application help menu.
   mainMenu.helpMenu.kernelUsers.add({

+ 26 - 0
packages/notebook/src/actions.tsx

@@ -526,6 +526,32 @@ export namespace NotebookActions {
     return promise;
   }
 
+  export function renderAllMarkdown(
+    notebook: Notebook,
+    session?: IClientSession
+  ): Promise<boolean> {
+    if (!notebook.model || !notebook.activeCell) {
+      return Promise.resolve(false);
+    }
+    const previousIndex = notebook.activeCellIndex;
+    const state = Private.getState(notebook);
+    notebook.widgets.forEach((child, index) => {
+      if (child.model.type === 'markdown') {
+        notebook.select(child);
+        // This is to make sure that the activeCell
+        // does not get executed
+        notebook.activeCellIndex = index;
+      }
+    });
+    if (notebook.activeCell.model.type !== 'markdown') {
+      return Promise.resolve(true);
+    }
+    const promise = Private.runSelected(notebook, session);
+    notebook.activeCellIndex = previousIndex;
+    Private.handleRunState(notebook, state, true);
+    return promise;
+  }
+
   /**
    * Run all of the cells before the currently active cell (exclusive).
    *