From 246e6f6df630102f630c4c8586d64a721930eb2e Mon Sep 17 00:00:00 2001 From: Luc Mcgrady Date: Wed, 29 Oct 2025 15:48:21 +0000 Subject: [PATCH] Added: "ReviewerRequest" type --- ts/routes/reviewer-inner/index.ts | 8 ++++++-- .../{reviewerRequest.ts => innerReviewerRequest.ts} | 0 ts/routes/reviewer/reviewer.ts | 5 +++-- ts/routes/reviewer/reviewerRequest.ts | 9 +++++++++ 4 files changed, 18 insertions(+), 4 deletions(-) rename ts/routes/reviewer-inner/{reviewerRequest.ts => innerReviewerRequest.ts} (100%) create mode 100644 ts/routes/reviewer/reviewerRequest.ts diff --git a/ts/routes/reviewer-inner/index.ts b/ts/routes/reviewer-inner/index.ts index b80ccabbc..dc32fac87 100644 --- a/ts/routes/reviewer-inner/index.ts +++ b/ts/routes/reviewer-inner/index.ts @@ -5,7 +5,8 @@ import "../../reviewer/reviewer.scss"; import "mathjax/es5/tex-chtml-full.js"; import { renderError } from "../../reviewer"; import { enableNightMode } from "../reviewer/reviewer"; -import type { InnerReviewerRequest } from "./reviewerRequest"; +import type { ReviewerRequest } from "../reviewer/reviewerRequest"; +import type { InnerReviewerRequest } from "./innerReviewerRequest"; declare const MathJax: any; const urlParams = new URLSearchParams(location.search); @@ -57,7 +58,10 @@ function pycmd(cmd: string) { const match = cmd.match(/play:(q|a):(\d+)/); if (match) { const [_, context, index] = match; - window.parent.postMessage({ type: "audio", answerSide: context == "a", index: parseInt(index) }, "*"); + window.parent.postMessage( + { type: "audio", answerSide: context == "a", index: parseInt(index) } satisfies ReviewerRequest, + "*", + ); } } globalThis.pycmd = pycmd; diff --git a/ts/routes/reviewer-inner/reviewerRequest.ts b/ts/routes/reviewer-inner/innerReviewerRequest.ts similarity index 100% rename from ts/routes/reviewer-inner/reviewerRequest.ts rename to ts/routes/reviewer-inner/innerReviewerRequest.ts diff --git a/ts/routes/reviewer/reviewer.ts b/ts/routes/reviewer/reviewer.ts index a9e0c2b9d..d22f9482d 100644 --- a/ts/routes/reviewer/reviewer.ts +++ b/ts/routes/reviewer/reviewer.ts @@ -3,7 +3,8 @@ import { CardAnswer, type NextCardDataResponse_NextCardData } from "@generated/anki/scheduler_pb"; import { nextCardData, playAudio } from "@generated/backend"; import { derived, get, writable } from "svelte/store"; -import type { InnerReviewerRequest } from "../reviewer-inner/reviewerRequest"; +import type { InnerReviewerRequest } from "../reviewer-inner/innerReviewerRequest"; +import type { ReviewerRequest } from "./reviewerRequest"; export function isNightMode() { // https://stackoverflow.com/a/57795518 @@ -40,7 +41,7 @@ export class ReviewerState { addEventListener("message", this.onMessage.bind(this)); } - onMessage(e: MessageEvent) { + onMessage(e: MessageEvent) { switch (e.data.type) { case "audio": { playAudio({ answerSide: e.data.answerSide, index: e.data.index, cid: this.currentCard!.card!.id }); diff --git a/ts/routes/reviewer/reviewerRequest.ts b/ts/routes/reviewer/reviewerRequest.ts new file mode 100644 index 000000000..aa4d3c786 --- /dev/null +++ b/ts/routes/reviewer/reviewerRequest.ts @@ -0,0 +1,9 @@ +// Copyright: Ankitects Pty Ltd and contributors +// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +interface AudioMessage { + type: "audio"; + answerSide: boolean; + index: number; +} + +export type ReviewerRequest = AudioMessage;