mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-09-04 22:56:20 +08:00
Add typesetting engine lazy load feature
This commit is contained in:
parent
4323e66ae9
commit
a665b64839
@ -93,6 +93,7 @@ InlineEditor.defaultConfig = {
|
|||||||
// ...
|
// ...
|
||||||
math: {
|
math: {
|
||||||
engine: 'mathjax', // or katex or function. E.g. (equation, element, display) => { ... }
|
engine: 'mathjax', // or katex or function. E.g. (equation, element, display) => { ... }
|
||||||
|
lazyLoad: undefined // async () => { ... }, called once before rendering first equation if engine doesn't exist. After resolving promise, plugin renders equations.
|
||||||
outputType: 'script', // or span
|
outputType: 'script', // or span
|
||||||
forceOutputType: false, // forces output to use outputType
|
forceOutputType: false, // forces output to use outputType
|
||||||
enablePreview: true // Enable preview view
|
enablePreview: true // Enable preview view
|
||||||
@ -102,14 +103,13 @@ InlineEditor.defaultConfig = {
|
|||||||
|
|
||||||
### Available typesetting engines
|
### Available typesetting engines
|
||||||
__MathJax__
|
__MathJax__
|
||||||
- Tested by using __latest 2.7__
|
- Tested with __latest 2.7__
|
||||||
- Has experimental (__CHTML__, __SVG__) support for __3.0.0__ or newer version
|
- Has experimental (__CHTML__, __SVG__) support for __3.0.0__ or newer version
|
||||||
- Use only __\\( \\)__ delimiters for inline and __\\[ \\]__ delimiters for display
|
|
||||||
|
|
||||||
[<img src="https://www.mathjax.org/badge/badge-square.svg" width="130" alt="KaTeX">](https://www.mathjax.org/)
|
[<img src="https://www.mathjax.org/badge/badge-square.svg" width="130" alt="KaTeX">](https://www.mathjax.org/)
|
||||||
|
|
||||||
__KaTeX__
|
__KaTeX__
|
||||||
- Tested by using version __0.11.0__
|
- Tested with version __0.12.0__
|
||||||
|
|
||||||
[<img src="https://katex.org/img/katex-logo-black.svg" width="130" alt="KaTeX">](https://katex.org/)
|
[<img src="https://katex.org/img/katex-logo-black.svg" width="130" alt="KaTeX">](https://katex.org/)
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ export default class MathEditing extends Plugin {
|
|||||||
const uiElement = writer.createUIElement( 'div', null, function( domDocument ) {
|
const uiElement = writer.createUIElement( 'div', null, function( domDocument ) {
|
||||||
const domElement = this.toDomElement( domDocument );
|
const domElement = this.toDomElement( domDocument );
|
||||||
|
|
||||||
renderEquation( equation, domElement, mathConfig.engine, display, false );
|
renderEquation( equation, domElement, mathConfig.engine, mathConfig.lazyLoad, display, false );
|
||||||
|
|
||||||
return domElement;
|
return domElement;
|
||||||
} );
|
} );
|
||||||
|
@ -70,7 +70,13 @@ export default class MathUI extends Plugin {
|
|||||||
|
|
||||||
const mathConfig = this.editor.config.get( 'math' );
|
const mathConfig = this.editor.config.get( 'math' );
|
||||||
|
|
||||||
const formView = new MainFormView( editor.locale, mathConfig.engine, mathConfig.enablePreview, this._previewUid );
|
const formView = new MainFormView(
|
||||||
|
editor.locale,
|
||||||
|
mathConfig.engine,
|
||||||
|
mathConfig.lazyLoad,
|
||||||
|
mathConfig.enablePreview,
|
||||||
|
this._previewUid
|
||||||
|
);
|
||||||
|
|
||||||
formView.mathInputView.bind( 'value' ).to( mathCommand, 'value' );
|
formView.mathInputView.bind( 'value' ).to( mathCommand, 'value' );
|
||||||
formView.displayButtonView.bind( 'isOn' ).to( mathCommand, 'display' );
|
formView.displayButtonView.bind( 'isOn' ).to( mathCommand, 'display' );
|
||||||
|
@ -22,7 +22,7 @@ import MathView from './mathview';
|
|||||||
import '../../theme/mathform.css';
|
import '../../theme/mathform.css';
|
||||||
|
|
||||||
export default class MainFormView extends View {
|
export default class MainFormView extends View {
|
||||||
constructor( locale, engine, previewEnabled, previewUid ) {
|
constructor( locale, engine, lazyLoad, previewEnabled, previewUid ) {
|
||||||
super( locale );
|
super( locale );
|
||||||
|
|
||||||
const t = locale.t;
|
const t = locale.t;
|
||||||
@ -52,7 +52,7 @@ export default class MainFormView extends View {
|
|||||||
this.previewLabel.text = t( 'Equation preview' );
|
this.previewLabel.text = t( 'Equation preview' );
|
||||||
|
|
||||||
// Math element
|
// Math element
|
||||||
this.mathView = new MathView( engine, locale, previewUid );
|
this.mathView = new MathView( engine, lazyLoad, locale, previewUid );
|
||||||
this.mathView.bind( 'display' ).to( this.displayButtonView, 'isOn' );
|
this.mathView.bind( 'display' ).to( this.displayButtonView, 'isOn' );
|
||||||
|
|
||||||
children = [
|
children = [
|
||||||
|
@ -3,10 +3,11 @@ import View from '@ckeditor/ckeditor5-ui/src/view';
|
|||||||
import { renderEquation } from '../utils';
|
import { renderEquation } from '../utils';
|
||||||
|
|
||||||
export default class MathView extends View {
|
export default class MathView extends View {
|
||||||
constructor( engine, locale, previewUid ) {
|
constructor( engine, lazyLoad, locale, previewUid ) {
|
||||||
super( locale );
|
super( locale );
|
||||||
|
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
|
this.lazyLoad = lazyLoad;
|
||||||
this.previewUid = previewUid;
|
this.previewUid = previewUid;
|
||||||
|
|
||||||
this.set( 'value', '' );
|
this.set( 'value', '' );
|
||||||
@ -30,7 +31,7 @@ export default class MathView extends View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateMath() {
|
updateMath() {
|
||||||
renderEquation( this.value, this.element, this.engine, this.display, true, this.previewUid );
|
renderEquation( this.value, this.element, this.engine, this.lazyLoad, this.display, true, this.previewUid );
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
21
src/utils.js
21
src/utils.js
@ -42,7 +42,7 @@ export function extractDelimiters( equation ) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function renderEquation( equation, element, engine = 'katex', display = false, preview = false, previewUid ) {
|
export async function renderEquation( equation, element, engine = 'katex', lazyLoad, display = false, preview = false, previewUid ) {
|
||||||
if ( engine === 'mathjax' && typeof MathJax !== 'undefined' ) {
|
if ( engine === 'mathjax' && typeof MathJax !== 'undefined' ) {
|
||||||
if ( isMathJaxVersion3( MathJax.version ) ) {
|
if ( isMathJaxVersion3( MathJax.version ) ) {
|
||||||
selectRenderMode( element, preview, previewUid, el => {
|
selectRenderMode( element, preview, previewUid, el => {
|
||||||
@ -84,8 +84,23 @@ export function renderEquation( equation, element, engine = 'katex', display = f
|
|||||||
} else if ( typeof engine === 'function' ) {
|
} else if ( typeof engine === 'function' ) {
|
||||||
engine( equation, element, display );
|
engine( equation, element, display );
|
||||||
} else {
|
} else {
|
||||||
element.innerHTML = equation;
|
if ( typeof lazyLoad !== 'undefined' ) {
|
||||||
console.warn( `math-tex-typesetting-missing: Missing the mathematical typesetting engine (${ engine }) for tex.` );
|
try {
|
||||||
|
if ( !global.window.CKEDITOR_MATH_LAZY_LOAD ) {
|
||||||
|
global.window.CKEDITOR_MATH_LAZY_LOAD = lazyLoad();
|
||||||
|
}
|
||||||
|
element.innerHTML = equation;
|
||||||
|
await global.window.CKEDITOR_MATH_LAZY_LOAD;
|
||||||
|
renderEquation( equation, element, engine, undefined, display, preview, previewUid );
|
||||||
|
}
|
||||||
|
catch ( err ) {
|
||||||
|
element.innerHTML = equation;
|
||||||
|
console.error( `math-tex-typesetting-lazy-load-failed: Lazy load failed: ${ err }` );
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
element.innerHTML = equation;
|
||||||
|
console.warn( `math-tex-typesetting-missing: Missing the mathematical typesetting engine (${ engine }) for tex.` );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user