From 2ff75434f7672aa2c73596b065fcf1ea64cb9fd4 Mon Sep 17 00:00:00 2001 From: Luc Mcgrady Date: Tue, 21 Oct 2025 16:07:29 +0100 Subject: [PATCH] Added: type for iframe request --- ts/routes/reviewer-inner/index.ts | 3 ++- ts/routes/reviewer-inner/reviewerRequest.ts | 10 ++++++++++ ts/routes/reviewer/reviewer.ts | 7 ++++++- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 ts/routes/reviewer-inner/reviewerRequest.ts diff --git a/ts/routes/reviewer-inner/index.ts b/ts/routes/reviewer-inner/index.ts index df2e2d5a8..5304cb344 100644 --- a/ts/routes/reviewer-inner/index.ts +++ b/ts/routes/reviewer-inner/index.ts @@ -3,13 +3,14 @@ import "../base.scss"; import "../../reviewer/reviewer.scss"; import { enableNightMode } from "../reviewer/reviewer"; +import type { InnerReviewerRequest } from "./reviewerRequest"; const urlParams = new URLSearchParams(location.search); const style = document.createElement("style"); document.head.appendChild(style); -addEventListener("message", (e) => { +addEventListener("message", (e: MessageEvent) => { switch (e.data.type) { case "html": { document.body.innerHTML = e.data.value; diff --git a/ts/routes/reviewer-inner/reviewerRequest.ts b/ts/routes/reviewer-inner/reviewerRequest.ts new file mode 100644 index 000000000..16afcbb88 --- /dev/null +++ b/ts/routes/reviewer-inner/reviewerRequest.ts @@ -0,0 +1,10 @@ +// Copyright: Ankitects Pty Ltd and contributors +// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +interface HtmlMessage { + type: "html"; + value: string; + css?: string; + bodyclass?: string; +} + +export type InnerReviewerRequest = HtmlMessage; diff --git a/ts/routes/reviewer/reviewer.ts b/ts/routes/reviewer/reviewer.ts index ef362bc7a..6b466663b 100644 --- a/ts/routes/reviewer/reviewer.ts +++ b/ts/routes/reviewer/reviewer.ts @@ -3,6 +3,7 @@ import { CardAnswer, type NextCardDataResponse_NextCardData } from "@generated/anki/scheduler_pb"; import { nextCardData } from "@generated/backend"; import { derived, get, writable } from "svelte/store"; +import type { InnerReviewerRequest } from "../reviewer-inner/reviewerRequest"; export function isNightMode() { // https://stackoverflow.com/a/57795518 @@ -76,8 +77,12 @@ export class ReviewerState { document.addEventListener("keydown", this.onKeyDown.bind(this)); } + sendInnerRequest(message: InnerReviewerRequest) { + this.iframe?.contentWindow?.postMessage(message, "*"); + } + updateHtml(htmlString: string, css?: string, bodyclass?: string) { - this.iframe?.contentWindow?.postMessage({ type: "html", value: htmlString, css, bodyclass }, "*"); + this.sendInnerRequest({ type: "html", value: htmlString, css, bodyclass }); } async showQuestion(answer: CardAnswer | null) {