Path: blob/main/frontend/vue/components/CodeExercise/OutputRenderer.ts
3375 views
import { Widget } from '@lumino/widgets'1import { MathJaxTypesetter } from '@jupyterlab/mathjax2'2import { OutputArea, OutputAreaModel } from '@jupyterlab/outputarea'3import {4// eslint-disable-next-line import/named5IRenderMime,6RenderMimeRegistry,7standardRendererFactories8} from '@jupyterlab/rendermime'910import {11WIDGET_MIMETYPE,12WidgetRenderer13} from '@jupyter-widgets/html-manager/lib/output_renderers'14import { HTMLManager } from '@jupyter-widgets/html-manager'15import { IShellFuture, IKernelConnection } from '@jupyterlab/services/lib/kernel/kernel'16import { KernelMessage } from '@jupyterlab/services'17import { getWidgetsManager } from './KernelManager'1819const outputOptions = {20mathjaxUrl: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js',21mathjaxConfig: 'TeX-AMS_CHTML-full,Safe'22}2324interface IOutputShellFuture extends IShellFuture<KernelMessage.IExecuteRequestMsg, KernelMessage.IExecuteReplyMsg> { }2526let _renderers: IRenderMime.IRendererFactory[]27function getRenderers (options: any) {28if (!_renderers) {29_renderers = standardRendererFactories.filter((f) => {30// filter out latex renderer if mathjax is unavailable31if (f.mimeTypes.includes('text/latex')) {32if (options.mathjaxUrl) {33return true34} else {35console.warn('MathJax unavailable')36return false37}38} else {39return true40}41})42}43return _renderers44}4546function createOutputArea (parent: HTMLDivElement) {47let latexTypesetter: MathJaxTypesetter | undefined48if (outputOptions.mathjaxUrl) {49latexTypesetter = new MathJaxTypesetter({50url: outputOptions.mathjaxUrl,51config: outputOptions.mathjaxConfig52})53}5455const renderers = {56initialFactories: getRenderers(outputOptions),57latexTypesetter58}59const rendermime = new RenderMimeRegistry(renderers)6061rendermime.addFactory(62{63safe: false,64mimeTypes: [WIDGET_MIMETYPE],65createRenderer: options => new WidgetRenderer(options, getWidgetsManager() as unknown as HTMLManager)66},67168)6970const model = new OutputAreaModel({ trusted: true })7172const outputArea = new OutputArea({ model, rendermime })7374Widget.attach(outputArea as OutputArea, parent)7576return outputArea77}7879export {80OutputArea,81IOutputShellFuture,82createOutputArea83}848586