Fix: Handle Inner iframe keypresses

This commit is contained in:
Luc Mcgrady 2025-10-31 13:01:29 +00:00
parent 4144fefcd7
commit dc016c509a
No known key found for this signature in database
GPG key ID: 4F3D7A0B17CC3D9C
3 changed files with 30 additions and 10 deletions

View file

@ -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<InnerReviewerRequest>) => {
}
});
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) {

View file

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

View file

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