commit
1ee08c049e
@ -1,6 +1,8 @@
|
||||
/* Copyright: Ankitects Pty Ltd and contributors
|
||||
* License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */
|
||||
|
||||
declare var MathJax: any;
|
||||
|
||||
var ankiPlatform = "desktop";
|
||||
var typeans;
|
||||
var _updatingQA = false;
|
||||
@ -8,10 +10,10 @@ var _updatingQA = false;
|
||||
var qFade = 50;
|
||||
var aFade = 0;
|
||||
|
||||
var onUpdateHook;
|
||||
var onShownHook;
|
||||
var onUpdateHook: Array<() => void | Promise<void>>;
|
||||
var onShownHook: Array<() => void | Promise<void>>;
|
||||
|
||||
function _runHook(arr: () => Promise<any>[]): Promise<any[]> {
|
||||
function _runHook(arr: Array<() => void | Promise<void>>): Promise<void[]> {
|
||||
var promises = [];
|
||||
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
@ -21,7 +23,7 @@ function _runHook(arr: () => Promise<any>[]): Promise<any[]> {
|
||||
return Promise.all(promises);
|
||||
}
|
||||
|
||||
function _updateQA(html, fadeTime, onupdate, onshown) {
|
||||
async function _updateQA(html, fadeTime, onupdate, onshown) {
|
||||
// if a request to update q/a comes in before the previous content
|
||||
// has been loaded, wait a while and try again
|
||||
if (_updatingQA) {
|
||||
@ -39,35 +41,34 @@ function _updateQA(html, fadeTime, onupdate, onshown) {
|
||||
var qa = $("#qa");
|
||||
|
||||
// fade out current text
|
||||
new Promise((resolve) => qa.fadeTo(fadeTime, 0, () => resolve()))
|
||||
// update text
|
||||
.then(() => {
|
||||
try {
|
||||
qa.html(html);
|
||||
} catch (err) {
|
||||
qa.html(
|
||||
(
|
||||
`Invalid HTML on card: ${String(err).substring(0, 2000)}\n` +
|
||||
String(err.stack).substring(0, 2000)
|
||||
).replace(/\n/g, "<br />")
|
||||
);
|
||||
}
|
||||
})
|
||||
.then(() => _runHook(onUpdateHook))
|
||||
.then(() =>
|
||||
// @ts-ignore wait for mathjax to ready
|
||||
MathJax.startup.promise.then(() => {
|
||||
// @ts-ignore clear MathJax buffer
|
||||
MathJax.typesetClear();
|
||||
await qa.fadeTo(fadeTime, 0).promise();
|
||||
|
||||
// @ts-ignore typeset
|
||||
return MathJax.typesetPromise(qa.slice(0, 1));
|
||||
})
|
||||
)
|
||||
// and reveal when processing is done
|
||||
.then(() => new Promise((resolve) => qa.fadeTo(fadeTime, 1, () => resolve())))
|
||||
.then(() => _runHook(onShownHook))
|
||||
.then(() => (_updatingQA = false));
|
||||
// update text
|
||||
try {
|
||||
qa.html(html);
|
||||
} catch (err) {
|
||||
qa.html(
|
||||
(
|
||||
`Invalid HTML on card: ${String(err).substring(0, 2000)}\n` +
|
||||
String(err.stack).substring(0, 2000)
|
||||
).replace(/\n/g, "<br />")
|
||||
);
|
||||
}
|
||||
await _runHook(onUpdateHook);
|
||||
|
||||
// wait for mathjax to ready
|
||||
await MathJax.startup.promise.then(() => {
|
||||
// clear MathJax buffers from previous typesets
|
||||
MathJax.typesetClear();
|
||||
|
||||
return MathJax.typesetPromise(qa.slice(0, 1));
|
||||
});
|
||||
|
||||
// and reveal when processing is done
|
||||
await qa.fadeTo(fadeTime, 1).promise();
|
||||
await _runHook(onShownHook);
|
||||
|
||||
_updatingQA = false;
|
||||
}
|
||||
|
||||
function _showQuestion(q, bodyclass) {
|
||||
|
Loading…
Reference in New Issue
Block a user