mirror of
https://github.com/ankitects/anki.git
synced 2026-01-07 02:53:54 -05:00
Added: Hooks
This commit is contained in:
parent
98c618a048
commit
fc77fab7c5
2 changed files with 35 additions and 11 deletions
|
|
@ -36,7 +36,7 @@ export function getTypedAnswer(): string | null {
|
|||
return typeans?.value ?? null;
|
||||
}
|
||||
|
||||
function _runHook(
|
||||
export function _runHook(
|
||||
hooks: Array<Callback>,
|
||||
): Promise<PromiseSettledResult<void | Promise<void>>[]> {
|
||||
const promises: (Promise<void> | void)[] = [];
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@ import "../../reviewer/reviewer.scss";
|
|||
|
||||
import "../../mathjax";
|
||||
import "mathjax/es5/tex-chtml-full.js";
|
||||
import { renderError } from "../../reviewer";
|
||||
import { registerPackage } from "@tslib/runtime-require";
|
||||
import { _runHook, renderError } from "../../reviewer";
|
||||
import { addBrowserClasses } from "../../reviewer/browser_selector";
|
||||
import { imageOcclusionAPI } from "../image-occlusion/review";
|
||||
import { enableNightMode } from "../reviewer/reviewer";
|
||||
|
|
@ -25,6 +26,14 @@ function postParentMessage(message: ReviewerRequest) {
|
|||
);
|
||||
}
|
||||
|
||||
type Callback = () => void | Promise<void>;
|
||||
|
||||
export const onUpdateHook: Array<Callback> = [];
|
||||
export const onShownHook: Array<Callback> = [];
|
||||
|
||||
globalThis.onUpdateHook = onUpdateHook;
|
||||
globalThis.onShownHook = onShownHook;
|
||||
|
||||
declare const MathJax: any;
|
||||
const urlParams = new URLSearchParams(location.search);
|
||||
const decoder = new TextDecoder();
|
||||
|
|
@ -53,15 +62,8 @@ addEventListener("message", async (e: MessageEvent<InnerReviewerRequest>) => {
|
|||
}
|
||||
}
|
||||
|
||||
// wait for mathjax to ready
|
||||
await MathJax.startup.promise
|
||||
.then(() => {
|
||||
// clear MathJax buffers from previous typesets
|
||||
MathJax.typesetClear();
|
||||
|
||||
return MathJax.typesetPromise([document.body]);
|
||||
})
|
||||
.catch(renderError("MathJax"));
|
||||
onUpdateHook.length = 0;
|
||||
onShownHook.length = 0;
|
||||
|
||||
// "".innerHTML =" does not run scripts
|
||||
for (const script of document.querySelectorAll("script")) {
|
||||
|
|
@ -74,6 +76,18 @@ addEventListener("message", async (e: MessageEvent<InnerReviewerRequest>) => {
|
|||
parent.appendChild(new_script);
|
||||
}
|
||||
|
||||
_runHook(onUpdateHook);
|
||||
// wait for mathjax to ready
|
||||
await MathJax.startup.promise
|
||||
.then(() => {
|
||||
// clear MathJax buffers from previous typesets
|
||||
MathJax.typesetClear();
|
||||
|
||||
return MathJax.typesetPromise([document.body]);
|
||||
})
|
||||
.catch(renderError("MathJax"));
|
||||
|
||||
_runHook(onShownHook);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
|
|
@ -190,3 +204,13 @@ Object.defineProperty(window, "localStorage", {
|
|||
configurable: true,
|
||||
enumerable: true,
|
||||
});
|
||||
|
||||
registerPackage("anki/reviewer", {
|
||||
// If you append a function to this each time the question or answer
|
||||
// is shown, it will be called before MathJax has been rendered.
|
||||
onUpdateHook,
|
||||
// If you append a function to this each time the question or answer
|
||||
// is shown, it will be called after images have been preloaded and
|
||||
// MathJax has been rendered.
|
||||
onShownHook,
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue