feat: 增加ipynb渲染
This commit is contained in:
108
utils/notebook/lib/index.js
Normal file
108
utils/notebook/lib/index.js
Normal file
@@ -0,0 +1,108 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
| Copyright (c) Jupyter Development Team.
|
||||
| Distributed under the terms of the Modified BSD License.
|
||||
|----------------------------------------------------------------------------*/
|
||||
/**
|
||||
* @packageDocumentation
|
||||
* @module mathjax2
|
||||
*/
|
||||
import { PromiseDelegate } from '@lumino/coreutils';
|
||||
/**
|
||||
* The MathJax Typesetter.
|
||||
*/
|
||||
export class MathJaxTypesetter {
|
||||
/**
|
||||
* Create a new MathJax typesetter.
|
||||
*/
|
||||
constructor(options) {
|
||||
this._initPromise = new PromiseDelegate();
|
||||
this._initialized = false;
|
||||
this._url = options.url;
|
||||
this._config = options.config;
|
||||
}
|
||||
/**
|
||||
* Typeset the math in a node.
|
||||
*
|
||||
* #### Notes
|
||||
* MathJax schedules the typesetting asynchronously,
|
||||
* but there are not currently any callbacks or Promises
|
||||
* firing when it is done.
|
||||
*/
|
||||
typeset(node) {
|
||||
if (!this._initialized) {
|
||||
this._init();
|
||||
}
|
||||
void this._initPromise.promise.then(() => {
|
||||
MathJax.Hub.Queue(['Typeset', MathJax.Hub, node]);
|
||||
try {
|
||||
MathJax.Hub.Queue(['Require', MathJax.Ajax, '[MathJax]/extensions/TeX/AMSmath.js'], () => {
|
||||
MathJax.InputJax.TeX.resetEquationNumbers();
|
||||
});
|
||||
}
|
||||
catch (e) {
|
||||
console.error('Error queueing resetEquationNumbers:', e);
|
||||
}
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Initialize MathJax.
|
||||
*/
|
||||
_init() {
|
||||
const head = document.getElementsByTagName('head')[0];
|
||||
const script = document.createElement('script');
|
||||
script.type = 'text/javascript';
|
||||
script.src = `${this._url}?config=${this._config}&delayStartupUntil=configured`;
|
||||
script.charset = 'utf-8';
|
||||
head.appendChild(script);
|
||||
script.addEventListener('load', () => {
|
||||
this._onLoad();
|
||||
});
|
||||
this._initialized = true;
|
||||
}
|
||||
/**
|
||||
* Handle MathJax loading.
|
||||
*/
|
||||
_onLoad() {
|
||||
MathJax.Hub.Config({
|
||||
tex2jax: {
|
||||
inlineMath: [
|
||||
['$', '$'],
|
||||
['\\(', '\\)']
|
||||
],
|
||||
displayMath: [
|
||||
['$$', '$$'],
|
||||
['\\[', '\\]']
|
||||
],
|
||||
processEscapes: true,
|
||||
processEnvironments: true
|
||||
},
|
||||
// Center justify equations in code and markdown cells. Elsewhere
|
||||
// we use CSS to left justify single line equations in code cells.
|
||||
displayAlign: 'center',
|
||||
CommonHTML: {
|
||||
linebreaks: { automatic: true }
|
||||
},
|
||||
'HTML-CSS': {
|
||||
availableFonts: [],
|
||||
imageFont: null,
|
||||
preferredFont: null,
|
||||
webFont: 'STIX-Web',
|
||||
styles: { '.MathJax_Display': { margin: 0 } },
|
||||
linebreaks: { automatic: true }
|
||||
},
|
||||
skipStartupTypeset: true,
|
||||
messageStyle: 'none'
|
||||
});
|
||||
MathJax.Hub.Register.StartupHook('End Config', () => {
|
||||
var _a, _b, _c, _d, _e, _f;
|
||||
// Disable `:hover span` styles which cause performance issues in Chromium browsers
|
||||
// c-f https://github.com/jupyterlab/jupyterlab/issues/9757
|
||||
// Note that we cannot overwrite them in config earlier due to how `CombineConfig`
|
||||
// is implemented in MathJax 2 (it does not allow removing styles, just expanding).
|
||||
(_c = (_b = (_a = MathJax.Hub) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.MathEvents) === null || _c === void 0 ? true : delete _c.styles['.MathJax_Hover_Arrow:hover span'];
|
||||
(_f = (_e = (_d = MathJax.Hub) === null || _d === void 0 ? void 0 : _d.config) === null || _e === void 0 ? void 0 : _e.MathMenu) === null || _f === void 0 ? true : delete _f.styles['.MathJax_MenuClose:hover span'];
|
||||
});
|
||||
MathJax.Hub.Configured();
|
||||
this._initPromise.resolve(void 0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user