66 lines
1.7 KiB
TypeScript
66 lines
1.7 KiB
TypeScript
export interface ReadingExam {
|
|
text: {
|
|
title: string;
|
|
content: string;
|
|
};
|
|
exercises: Exercise[];
|
|
}
|
|
|
|
export interface ListeningExam {
|
|
audio: {
|
|
title: string;
|
|
source: string;
|
|
transcript: string;
|
|
repeatableTimes: number; // *The amount of times the user is allowed to repeat the audio, 0 for unlimited
|
|
};
|
|
exercises: Exercise[];
|
|
}
|
|
|
|
export type Exercise = FillBlanksExercise | MatchSentencesExercise | MultipleChoiceExercise;
|
|
|
|
export interface FillBlanksExercise {
|
|
prompt: string; // *EXAMPLE: "Complete the summary below. Click a blank to select the corresponding word for it."
|
|
type: "fillBlanks";
|
|
words: string[]; // *EXAMPLE: ["preserve", "unaware"]
|
|
text: string; // *EXAMPLE: "They tried to {{1}} burning"
|
|
allowRepetition: boolean;
|
|
solutions: {
|
|
id: string; // *EXAMPLE: "1"
|
|
solution: string; // *EXAMPLE: "preserve"
|
|
}[];
|
|
}
|
|
|
|
export interface MatchSentencesExercise {
|
|
type: "matchSentences";
|
|
prompt: string;
|
|
sentences: {
|
|
id: string;
|
|
sentence: string;
|
|
solution: string;
|
|
color: string;
|
|
}[];
|
|
allowRepetition: boolean;
|
|
options: {
|
|
id: string;
|
|
sentence: string;
|
|
}[];
|
|
}
|
|
|
|
export interface MultipleChoiceExercise {
|
|
type: "multipleChoice";
|
|
prompt: string; // *EXAMPLE: "Select the appropriate option."
|
|
questions: MultipleChoiceQuestion[];
|
|
}
|
|
|
|
export interface MultipleChoiceQuestion {
|
|
variant: "image" | "text";
|
|
id: string; // *EXAMPLE: "1"
|
|
prompt: string; // *EXAMPLE: "What does her briefcase look like?"
|
|
solution: string; // *EXAMPLE: "A"
|
|
options: {
|
|
id: string; // *EXAMPLE: "A"
|
|
src?: string; // *EXAMPLE: "https://i.imgur.com/rEbrSqA.png" (only used if the variant is "image")
|
|
text?: string; // *EXAMPLE: "wallet, pens and novel" (only used if the variant is "text")
|
|
}[];
|
|
}
|