import { ExamComponentSkin } from "../core/skins"; import { CodeEditorSpecification, CodeEditorSubmission } from "./code_editor"; import { ResponseKind } from "./common"; import { FITBSpecification, FITBSubmission } from "./fitb"; import { FITBDropSpecification, FITBDropSubmission } from "./fitb-drop"; import { IFrameResponseSpecification, IFrameSubmission } from "./iframe"; import { MCSpecification, MCSubmission } from "./mc"; import { SLSpecification, SLSubmission } from "./select_lines"; export type ResponseSpecification = QT extends "multiple_choice" ? MCSpecification : QT extends "fill_in_the_blank" ? FITBSpecification : QT extends "select_lines" ? SLSpecification : QT extends "code_editor" ? CodeEditorSpecification : QT extends "fitb_drop" ? FITBDropSpecification : QT extends "iframe" ? IFrameResponseSpecification : never; export type SubmissionType = QT extends "multiple_choice" ? MCSubmission : QT extends "fill_in_the_blank" ? FITBSubmission : QT extends "select_lines" ? SLSubmission : QT extends "code_editor" ? CodeEditorSubmission : QT extends "fitb_drop" ? FITBDropSubmission : QT extends "iframe" ? IFrameSubmission : never; export type MalformedSubmission = { readonly validity: "malformed"; raw: string; }; export type BlankSubmission = { readonly validity: "blank"; }; export type UncheckedSubmission = { validity: "unchecked"; encoding: SubmissionType; }; export type InvalidSubmission = { readonly validity: "invalid"; encoding: SubmissionType; }; export type ViableSubmission = { readonly validity: "viable"; encoding: SubmissionType; }; export type AnySubmission = MalformedSubmission | BlankSubmission | UncheckedSubmission | InvalidSubmission | ViableSubmission; export type ParsedSubmission = MalformedSubmission | BlankSubmission | UncheckedSubmission; export type WellFormedSubmission = Exclude, MalformedSubmission>; export type CheckedSubmission = Exclude, UncheckedSubmission>; export type ValidSubmission = Exclude, InvalidSubmission>; /** * Creates a wrapper representing a raw submission that * could not be parsed successfully into a well-formed encoding. */ export declare function MALFORMED_SUBMISSION(raw_submission: string): MalformedSubmission; /** * Returns the representation of a blank submission. */ export declare function BLANK_SUBMISSION(): BlankSubmission; /** * Creates a wrapper representing an unchecked submission. */ export declare function UNCHECKED_SUBMISSION(encoding: SubmissionType): UncheckedSubmission; /** * Creates a wrapper representing a submission that has been * checked and determined to be invalid. */ export declare function INVALID_SUBMISSION(encoding: SubmissionType): InvalidSubmission; /** * Creates a wrapper representing a submission that has been * checked and determined to be viable. */ export declare function VIABLE_SUBMISSION(encoding: SubmissionType): ViableSubmission; /** * A type used to represent differences between two response specifications. */ export type ResponseSpecificationDiff = { incompatible?: boolean; structure?: boolean; content?: boolean; sample_solution?: boolean; default_grader?: boolean; format?: boolean; }; export type ResponseHandler = { parse: (rawSubmission: string | null | undefined) => ParsedSubmission; validate: (response: ResponseSpecification, submission: WellFormedSubmission) => CheckedSubmission; render: (response: ResponseSpecification, question_id: string, question_uuid: string, skin?: ExamComponentSkin) => string; render_solution: (response: ResponseSpecification, solution: ValidSubmission, question_id: string, question_uuid: string, skin?: ExamComponentSkin) => string; activate?: (responseElem: JQuery, is_sample_solution: boolean) => void; extract: (responseElem: JQuery) => SubmissionType; fill: (elem: JQuery, submission: ValidSubmission) => void; diff: (response1: ResponseSpecification, response2: ResponseSpecification) => ResponseSpecificationDiff; }; export declare function is_empty_response_diff(diff: ResponseSpecificationDiff): boolean;