Project

General

Profile

Help with WText and the javascript library MathJax

Added by 太极美术工程狮 狮长 almost 9 years ago

MathJax is a javascript library which renders MathML code into beautiful fomulas.

When the contents of the DOM in the browser changed , you can call javascript code MathJax.Hub.Typeset() to rerun MathJax and refresh the fomulas.

But , how do I know the exact time when the contents of a WText have been completely transfered from the server to the browser ? I have to call MathJax function at that moment.

When I call WText::setText in my c code , the contents are at the server at that time , but what is the time the contents reached the browser and got inserted into DOM ? I didn't find a way to get that information.

I uploaded an example , wish you can get the idea of my question.

Note that , you need to test the example with a browser that doesn't provide MathML support , as far as I know , the browsers with WebKit engine do not fully support MathML.

Please let me know if you need any further information.

MathJaxProblem.zip (2.35 MB) MathJaxProblem.zip An example project which shows my problem

Replies (3)

RE: Help with WText and the javascript library MathJax - Added by Wim Dumon almost 9 years ago

Hello,

This is done by doJavaScript(). For example:

atclCnttWdgt->setText (WString::fromUTF8 (wholeContent));
atclCnttWdgt->doJavaScript("MathJax.Hub.Typeset()");

Best regards,

Wim.

RE: Help with WText and the javascript library MathJax - Added by 太极美术工程狮 狮长 almost 9 years ago

I have already tried that before .

It seems that ,

atclCnttWdgt->setText (WString::fromUTF8 (wholeContent));

atclCnttWdgt->doJavaScript("MathJax.Hub.Typeset()"); //When the code is executed , the content of atclCnttWdgt has not been inserted into the DOM of the browser yet . And then , MathJax.Hub.Typeset() has not effect.

RE: Help with WText and the javascript library MathJax - Added by Wim Dumon almost 9 years ago

The order of execution is indeed ill-defined here, I overlooked that. You can delay calling the javascript code by wrapping it in a setTimeout call:

atclCnttWdgt->setText (WString::fromUTF8 (wholeContent));
atclCnttWdgt->doJavaScript("setTimeout(function(){MathJax.Hub.Typeset();},0)");
    (1-3/3)