Quellcode durchsuchen

Handle deprecated JavaScript output

Steven Silvester vor 7 Jahren
Ursprung
Commit
f53438a2a7

+ 12 - 0
packages/rendermime/src/factories.ts

@@ -87,6 +87,17 @@ const textRendererFactory: IRenderMime.IRendererFactory = {
 };
 
 
+/**
+ * A placeholder factory for deprecated rendered JavaScript.
+ */
+export
+const javaScriptRendererFactory: IRenderMime.IRendererFactory = {
+  safe: false,
+  mimeTypes: ['text/javascript', 'application/javascript'],
+  createRenderer: options => new widgets.RenderedJavaScript(options)
+};
+
+
 /**
  * The builtin factories provided by the rendermime package.
  */
@@ -98,5 +109,6 @@ const defaultRendererFactories: ReadonlyArray<IRenderMime.IRendererFactory> = [
   svgRendererFactory,
   imageRendererFactory,
   pdfRendererFactory,
+  javaScriptRendererFactory,
   textRendererFactory
 ];

+ 8 - 0
packages/rendermime/src/renderers.ts

@@ -59,6 +59,10 @@ function renderHTML(options: renderHTML.IOptions): Promise<void> {
   // Set the inner HTML of the host.
   host.innerHTML = source;
 
+  if (host.getElementsByTagName('script')) {
+    console.warn('JupyterLab does not render inline JavaScript in HTML output');
+  }
+
   // TODO - arbitrary script execution is disabled for now.
   // Eval any script tags contained in the HTML. This is not done
   // automatically by the browser when script tags are created by
@@ -305,6 +309,10 @@ function renderMarkdown(options: renderMarkdown.IRenderOptions): Promise<void> {
     // Set the inner HTML of the host.
     host.innerHTML = content;
 
+    if (host.getElementsByTagName('script')) {
+      console.warn('JupyterLab does not render inline JavaScript in HTML output');
+    }
+
     // TODO arbitrary script execution is disabled for now.
     // Eval any script tags contained in the HTML. This is not done
     // automatically by the browser when script tags are created by

+ 31 - 0
packages/rendermime/src/widgets.ts

@@ -372,3 +372,34 @@ class RenderedText extends RenderedCommon {
     });
   }
 }
+
+
+/**
+ * A widget for displaying deprecated JavaScript output.
+ */
+export
+class RenderedJavaScript extends RenderedCommon {
+  /**
+   * Construct a new rendered text widget.
+   *
+   * @param options - The options for initializing the widget.
+   */
+  constructor(options: IRenderMime.IRendererOptions) {
+    super(options);
+    this.addClass('jp-RenderedJavaScript');
+  }
+
+  /**
+   * Render a mime model.
+   *
+   * @param model - The mime model to render.
+   *
+   * @returns A promise which resolves when rendering is complete.
+   */
+  render(model: IRenderMime.IMimeModel): Promise<void> {
+    return renderers.renderText({
+      host: this.node,
+      source: 'JavaScript output is disabled in JupyterLab'
+    });
+  }
+}

+ 2 - 1
packages/rendermime/style/index.css

@@ -64,7 +64,8 @@
 .jp-RenderedText pre .ansi-bright-white-bg { background-color: #A1A6B2; }
 
 
-.jp-RenderedText[data-mime-type="application/vnd.jupyter.stderr"] {
+.jp-RenderedText[data-mime-type="application/vnd.jupyter.stderr"],
+.jp-RenderedJavaScript {
   background: #fdd;
 }