Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/frontend/vue/components/CodeExercise/OutputRenderer.ts
3375 views
1
import { Widget } from '@lumino/widgets'
2
import { MathJaxTypesetter } from '@jupyterlab/mathjax2'
3
import { OutputArea, OutputAreaModel } from '@jupyterlab/outputarea'
4
import {
5
// eslint-disable-next-line import/named
6
IRenderMime,
7
RenderMimeRegistry,
8
standardRendererFactories
9
} from '@jupyterlab/rendermime'
10
11
import {
12
WIDGET_MIMETYPE,
13
WidgetRenderer
14
} from '@jupyter-widgets/html-manager/lib/output_renderers'
15
import { HTMLManager } from '@jupyter-widgets/html-manager'
16
import { IShellFuture, IKernelConnection } from '@jupyterlab/services/lib/kernel/kernel'
17
import { KernelMessage } from '@jupyterlab/services'
18
import { getWidgetsManager } from './KernelManager'
19
20
const outputOptions = {
21
mathjaxUrl: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js',
22
mathjaxConfig: 'TeX-AMS_CHTML-full,Safe'
23
}
24
25
interface IOutputShellFuture extends IShellFuture<KernelMessage.IExecuteRequestMsg, KernelMessage.IExecuteReplyMsg> { }
26
27
let _renderers: IRenderMime.IRendererFactory[]
28
function getRenderers (options: any) {
29
if (!_renderers) {
30
_renderers = standardRendererFactories.filter((f) => {
31
// filter out latex renderer if mathjax is unavailable
32
if (f.mimeTypes.includes('text/latex')) {
33
if (options.mathjaxUrl) {
34
return true
35
} else {
36
console.warn('MathJax unavailable')
37
return false
38
}
39
} else {
40
return true
41
}
42
})
43
}
44
return _renderers
45
}
46
47
function createOutputArea (parent: HTMLDivElement) {
48
let latexTypesetter: MathJaxTypesetter | undefined
49
if (outputOptions.mathjaxUrl) {
50
latexTypesetter = new MathJaxTypesetter({
51
url: outputOptions.mathjaxUrl,
52
config: outputOptions.mathjaxConfig
53
})
54
}
55
56
const renderers = {
57
initialFactories: getRenderers(outputOptions),
58
latexTypesetter
59
}
60
const rendermime = new RenderMimeRegistry(renderers)
61
62
rendermime.addFactory(
63
{
64
safe: false,
65
mimeTypes: [WIDGET_MIMETYPE],
66
createRenderer: options => new WidgetRenderer(options, getWidgetsManager() as unknown as HTMLManager)
67
},
68
1
69
)
70
71
const model = new OutputAreaModel({ trusted: true })
72
73
const outputArea = new OutputArea({ model, rendermime })
74
75
Widget.attach(outputArea as OutputArea, parent)
76
77
return outputArea
78
}
79
80
export {
81
OutputArea,
82
IOutputShellFuture,
83
createOutputArea
84
}
85
86