From dc016c509a519a9d8851a9b51f0bd2ae37e6b035 Mon Sep 17 00:00:00 2001 From: Luc Mcgrady Date: Fri, 31 Oct 2025 13:01:29 +0000 Subject: [PATCH] Fix: Handle Inner iframe keypresses --- ts/routes/reviewer-inner/index.ts | 20 +++++++++++++------- ts/routes/reviewer/reviewer.ts | 13 +++++++++++-- ts/routes/reviewer/reviewerRequest.ts | 7 ++++++- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/ts/routes/reviewer-inner/index.ts b/ts/routes/reviewer-inner/index.ts index bcf537b4b..9b581b198 100644 --- a/ts/routes/reviewer-inner/index.ts +++ b/ts/routes/reviewer-inner/index.ts @@ -8,6 +8,13 @@ import { enableNightMode } from "../reviewer/reviewer"; import type { ReviewerRequest } from "../reviewer/reviewerRequest"; import type { InnerReviewerRequest } from "./innerReviewerRequest"; +function postParentMessage(message: ReviewerRequest) { + window.parent.postMessage( + message, + "*", + ); +} + declare const MathJax: any; const urlParams = new URLSearchParams(location.search); @@ -50,17 +57,16 @@ addEventListener("message", async (e: MessageEvent) => { } }); +addEventListener("keydown", (e) => { + if (e.key.length == 1 && "1234 ".includes(e.key) && !document.activeElement?.matches("#typeans")) { + postParentMessage({ type: "keyPress", key: e.key }); + } +}); + const base = document.createElement("base"); base.href = "/"; document.head.appendChild(base); -function postParentMessage(message: ReviewerRequest) { - window.parent.postMessage( - message, - "*", - ); -} - function pycmd(cmd: string) { const match = cmd.match(/play:(q|a):(\d+)/); if (match) { diff --git a/ts/routes/reviewer/reviewer.ts b/ts/routes/reviewer/reviewer.ts index 1fa8e526a..cd0514ec3 100644 --- a/ts/routes/reviewer/reviewer.ts +++ b/ts/routes/reviewer/reviewer.ts @@ -54,6 +54,11 @@ export class ReviewerState { } case "typed": { this.currentTypedAnswer = e.data.value; + break; + } + case "keyPress": { + this.handleKeyPress(e.data.key); + break; } } } @@ -63,8 +68,8 @@ export class ReviewerState { iframe.addEventListener("load", this.onReady.bind(this)); } - onKeyDown(e: KeyboardEvent) { - switch (e.key) { + handleKeyPress(key: string) { + switch (key) { case "1": { this.easeButtonPressed(0); break; @@ -92,6 +97,10 @@ export class ReviewerState { } } + onKeyDown(e: KeyboardEvent) { + this.handleKeyPress(e.key); + } + public registerShortcuts() { document.addEventListener("keydown", this.onKeyDown.bind(this)); } diff --git a/ts/routes/reviewer/reviewerRequest.ts b/ts/routes/reviewer/reviewerRequest.ts index 8ed9590cf..c57ea2c50 100644 --- a/ts/routes/reviewer/reviewerRequest.ts +++ b/ts/routes/reviewer/reviewerRequest.ts @@ -11,4 +11,9 @@ interface UpdateTypedAnswerMessage { value: string; } -export type ReviewerRequest = AudioMessage | UpdateTypedAnswerMessage; +interface KeyPressMessage { + type: "keyPress"; + key: string; +} + +export type ReviewerRequest = AudioMessage | UpdateTypedAnswerMessage | KeyPressMessage;