diff --git a/src/utils.ts b/src/utils.ts index a5a86909f..baef7d5bf 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -129,7 +129,7 @@ export async function renderEquation( ); } // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - } else if ( engine === 'katex' ) { + } else if ( engine === 'katex' && window.katex !== undefined ) { selectRenderMode( element, preview, diff --git a/tests/lazyload.ts b/tests/lazyload.ts new file mode 100644 index 000000000..cfb6b6a42 --- /dev/null +++ b/tests/lazyload.ts @@ -0,0 +1,49 @@ +import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'; +import MathUI from '../src/mathui'; +import type { EditorConfig } from '@ckeditor/ckeditor5-core/src/editor/editorconfig'; +import { expect } from 'chai'; + +describe( 'Lazy load', () => { + let editorElement: HTMLDivElement; + let editor: ClassicEditor; + let lazyLoadInvoked: boolean; + let mathUIFeature: MathUI; + + function buildEditor( config: EditorConfig ) { + return ClassicEditor + .create( editorElement, { + ...config, + plugins: [ MathUI ] + } ) + .then( newEditor => { + editor = newEditor; + mathUIFeature = editor.plugins.get( MathUI ); + } ); + } + + beforeEach( () => { + editorElement = document.createElement( 'div' ); + document.body.appendChild( editorElement ); + + lazyLoadInvoked = false; + } ); + + afterEach( () => { + editorElement.remove(); + return editor.destroy(); + } ); + + it( 'initializes lazy load for KaTeX', async () => { + await buildEditor( { + math: { + engine: 'katex', + lazyLoad: async () => { + lazyLoadInvoked = true; + } + } + } ); + + mathUIFeature._showUI(); + expect( lazyLoadInvoked ).to.be.true; + } ); +} );