a96ddfc3fd
eg from anki.hooks import addHook def prepare(q): return q + """ <script> onUpdateHook.push(function () { window.scrollTo(0, 2000); }) </script>""" addHook('prepareQuestion', prepare)
124 lines
2.6 KiB
JavaScript
124 lines
2.6 KiB
JavaScript
var ankiPlatform = "desktop";
|
|
var typeans;
|
|
|
|
var qFade = 100;
|
|
var aFade = 0;
|
|
|
|
var onUpdateHook;
|
|
var onShownHook;
|
|
|
|
function _runHook(arr) {
|
|
for (var i=0; i<arr.length; i++) {
|
|
arr[i]();
|
|
}
|
|
}
|
|
|
|
function _updateQA(html, fadeTime, onupdate, onshown) {
|
|
onUpdateHook = [onupdate];
|
|
onShownHook = [onshown];
|
|
|
|
// fade out current text
|
|
var qa = $("#qa");
|
|
qa.fadeTo(fadeTime, 0, function() {
|
|
// update text
|
|
try {
|
|
qa.html(html);
|
|
} catch(err) {
|
|
qa.text("Invalid HTML on card: "+err);
|
|
}
|
|
_removeStylingFromMathjaxCloze();
|
|
_runHook(onUpdateHook);
|
|
|
|
// don't allow drags of images, which cause them to be deleted
|
|
$("img").attr("draggable", false);
|
|
|
|
// render mathjax
|
|
MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
|
|
|
|
// and reveal when processing is done
|
|
MathJax.Hub.Queue(function () {
|
|
qa.fadeTo(fadeTime, 1, function () {
|
|
_runHook(onShownHook);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
function _showQuestion(q, bodyclass) {
|
|
_updateQA(q, qFade, function() {
|
|
// return to top of window
|
|
window.scrollTo(0, 0);
|
|
|
|
document.body.className = bodyclass;
|
|
}, function() {
|
|
// focus typing area if visible
|
|
typeans = document.getElementById("typeans");
|
|
if (typeans) {
|
|
typeans.focus();
|
|
}
|
|
});
|
|
}
|
|
|
|
function _showAnswer(a, bodyclass) {
|
|
_updateQA(a, aFade, function() {
|
|
if (bodyclass) {
|
|
// when previewing
|
|
document.body.className = bodyclass;
|
|
}
|
|
|
|
// scroll to answer?
|
|
var e = $("#answer");
|
|
if (e[0]) {
|
|
e[0].scrollIntoView();
|
|
}
|
|
}, function() {
|
|
});
|
|
}
|
|
|
|
_flagColours = {
|
|
1: "red",
|
|
2: "purple",
|
|
3: "green",
|
|
4: "blue"
|
|
};
|
|
|
|
function _drawFlag(flag) {
|
|
var elem = $("#_flag");
|
|
if (flag === 0) {
|
|
elem.hide();
|
|
return;
|
|
}
|
|
elem.show();
|
|
elem.css("color", _flagColours[flag]);
|
|
}
|
|
|
|
function _drawMark(mark) {
|
|
var elem = $("#_mark");
|
|
if (!mark) {
|
|
elem.hide();
|
|
} else {
|
|
elem.show();
|
|
}
|
|
}
|
|
|
|
function _typeAnsPress() {
|
|
if (window.event.keyCode === 13) {
|
|
pycmd("ans");
|
|
}
|
|
}
|
|
|
|
function _removeStylingFromMathjaxCloze() {
|
|
$(".cloze").each(function (i) {
|
|
if (_clozeIsInsideMathjax(this)) {
|
|
this.outerHTML = this.innerHTML;
|
|
}
|
|
});
|
|
}
|
|
|
|
function _clozeIsInsideMathjax(node) {
|
|
if (!node.previousSibling || node.previousSibling.nodeType !== 3) {
|
|
return;
|
|
}
|
|
// look for mathjax opening in previous text
|
|
return /\\\(|\$\$/.test(node.previousSibling.textContent);
|
|
} |