Added: type for iframe request

This commit is contained in:
Luc Mcgrady 2025-10-21 16:07:29 +01:00
parent 91a968596c
commit 2ff75434f7
No known key found for this signature in database
GPG key ID: 4F3D7A0B17CC3D9C
3 changed files with 18 additions and 2 deletions

View file

@ -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<InnerReviewerRequest>) => {
switch (e.data.type) {
case "html": {
document.body.innerHTML = e.data.value;

View file

@ -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;

View file

@ -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) {