@@ -96,6 +96,7 @@ export interface MathJaxObject extends MJObject {
9696 elements : any [ ] ;
9797 document : MATHDOCUMENT ;
9898 promise : Promise < void > ;
99+ rerenderPromise : Promise < void > ;
99100 /* tslint:disable:jsdoc-require */
100101 registerConstructor ( name : string , constructor : any ) : void ;
101102 useHandler ( name : string , force ?: boolean ) : void ;
@@ -184,7 +185,7 @@ export namespace Startup {
184185
185186 /**
186187 * The promise for the startup process (the initial typesetting).
187- * It is resolves or rejected in the ready() function.
188+ * It is resolved or rejected in the ready() function.
188189 */
189190 export let promise = new Promise < void > ( ( resolve , reject ) => {
190191 promiseResolve = resolve ;
@@ -206,6 +207,13 @@ export namespace Startup {
206207 }
207208 } ) ;
208209
210+ /**
211+ * Non-null when MathJax.typeset() or MathJax.typesetPromise() have been performed
212+ * (so the menu code can tell whether a rerender is needed when components are loaded)
213+ * and then is equal to a promise after which rerendering can occur.
214+ */
215+ export let rerenderPromise : Promise < void > = null ;
216+
209217 /**
210218 * @param {MmlNode } node The root of the tree to convert to serialized MathML
211219 * @return {string } The serialized MathML from the tree
@@ -374,9 +382,12 @@ export namespace Startup {
374382 document . options . elements = elements ;
375383 document . reset ( ) ;
376384 document . render ( ) ;
385+ if ( ! rerenderPromise ) {
386+ rerenderPromise = promise ;
387+ }
377388 } ;
378389 MathJax . typesetPromise = ( elements : any [ ] = null ) => {
379- promise = promise . then ( ( ) => typesetPromise ( elements ) ) ;
390+ rerenderPromise = promise = promise . then ( ( ) => typesetPromise ( elements ) ) ;
380391 return promise ;
381392 } ;
382393 MathJax . typesetClear = ( elements : any [ ] = null ) => {
0 commit comments