import { QuestionGrader, AssignedQuestion } from "../core"; import { GradedQuestion } from "../core/assigned_exams"; import { ResponseKind } from "../response/common"; import { FITBDropSubmission } from "../response/fitb-drop"; import { GradingResult } from "./QuestionGrader"; type FITBDropGradingResult = GradingResult & ({ wasBlankSubmission: false; evaluation: readonly FITBDropRubricItemEvaluation[]; } | { wasBlankSubmission: true; }); export type FITBDropRubricItemEvaluation = { pointsEarned: number; explanation: string; }; export type FITBDropRubricItemPolicy = "first_match" | "best_score"; export type FITBDropRubricItem = { title: string; points: number; description: string; policy: FITBDropRubricItemPolicy; evaluators: FITBDropEvaluatorSpecification[]; }; export type StandardFITBDropGraderSpecification = { readonly grader_kind: "standard_fitb_drop"; readonly rubric: readonly FITBDropRubricItem[]; readonly points_possible: number; }; export declare class StandardFITBDropGrader implements QuestionGrader<"fitb_drop"> { readonly spec: StandardFITBDropGraderSpecification; readonly t_response_kinds: "fitb_drop"; constructor(spec: StandardFITBDropGraderSpecification); scale(new_points_possible: number): StandardFITBDropGrader; isGrader(responseKind: T): this is QuestionGrader; prepare(exam_id: string, question_id: string, spec: StandardFITBDropGraderSpecification): void; grade(aq: AssignedQuestion<"fitb_drop">): FITBDropGradingResult; pointsEarned(gr: FITBDropGradingResult): number; renderReport(gq: GradedQuestion<"fitb_drop", FITBDropGradingResult>): string; annotateResponseElem(gq: GradedQuestion<"fitb_drop", FITBDropGradingResult>, response_elem: JQuery): void; renderStats(aqs: readonly AssignedQuestion<"fitb_drop">[]): string; renderOverview(gqs: readonly GradedQuestion<"fitb_drop", FITBDropGradingResult>[]): string; } export type SimpleDropEvaluatorSpecification = { readonly kind: "simple_drop_evaluator"; readonly index: number; readonly evaluations_by_droppable_id: { readonly [index: string]: FITBDropRubricItemEvaluation | undefined; }; }; export type TargetDropEvaluatorSpecification = { readonly kind: "target_drop_evaluator"; readonly index: number; readonly include_children?: boolean; readonly criteria: "at_least_one" | "exactly_one" | "require_all" | "require_none" | "require_blank"; readonly targets: readonly string[]; readonly prohibited?: readonly string[]; readonly evaluation: FITBDropRubricItemEvaluation; }; export declare function targetDropEvaluation(spec: TargetDropEvaluatorSpecification, submission: FITBDropSubmission): FITBDropRubricItemEvaluation; export declare const SPECIAL_MATCHER_DROPPABLES: readonly [{ readonly id: "__examma-ray-drop-matcher-group"; readonly content: string; }, { readonly id: "__examma-ray-drop-matcher-shuffle"; readonly content: string; }, { readonly id: "__examma-ray-drop-matcher-depth"; readonly content: string; }, { readonly id: "__examma-ray-drop-matcher-or"; readonly content: string; }]; interface DropItemMatcherBase { readonly id: string; readonly children?: readonly DropLocationMatcher[]; } interface IDDropItemMatcher extends DropItemMatcherBase { readonly id: string; readonly kind: "id"; readonly children?: readonly DropLocationMatcher[]; } interface GroupDropItemMatcher extends DropItemMatcherBase { readonly id: string; readonly kind: "group"; readonly children: [DropLocationMatcher]; } interface DepthDropItemMatcher extends DropItemMatcherBase { readonly id: string; readonly kind: "depth"; readonly min_depth: number; readonly max_depth: number; readonly children: [DropLocationMatcher]; } interface ShuffleDropItemMatcher extends DropItemMatcherBase { readonly id: string; readonly kind: "shuffle"; readonly children: [DropLocationMatcher]; } interface OrDropItemMatcher extends DropItemMatcherBase { readonly id: string; readonly kind: "or"; readonly children: [DropLocationMatcher]; } export type DropItemMatcher = IDDropItemMatcher | GroupDropItemMatcher | DepthDropItemMatcher | ShuffleDropItemMatcher | OrDropItemMatcher; export type DropLocationMatcher = { readonly dropped_items: readonly DropItemMatcher[]; }; export type MatchingDropEvaluatorSpecification = { readonly kind: "matching_drop_evaluator"; readonly children: DropLocationMatcher[]; readonly evaluation: FITBDropRubricItemEvaluation; }; export declare function extractFromDropLocation(elem: JQuery): DropLocationMatcher; export declare function extractDropItemMatch(elem: JQuery): DropItemMatcher; export declare function fillDropLocation(dropLocationElem: JQuery, matcher: DropLocationMatcher, originalsElem: JQuery): void; export declare function matchingDropEvaluation(evaluator: MatchingDropEvaluatorSpecification, submission: FITBDropSubmission): FITBDropRubricItemEvaluation | undefined; export type FITBDropEvaluatorSpecification = SimpleDropEvaluatorSpecification | TargetDropEvaluatorSpecification | MatchingDropEvaluatorSpecification; export declare function scaleFITBDropEvaluatorSpecification(evaluator: FITBDropEvaluatorSpecification, scaling_factor: number): FITBDropEvaluatorSpecification; export declare function fitbDropEvaluate(evaluator: FITBDropEvaluatorSpecification, submission: FITBDropSubmission): FITBDropRubricItemEvaluation | undefined; export declare function evaluateRubricItem(ri: FITBDropRubricItem, submission: FITBDropSubmission): FITBDropRubricItemEvaluation; export declare const FITBDropEvaluations: { full_credit: (points: number) => { pointsEarned: number; explanation: string; }; partial_credit: (points: number) => { pointsEarned: number; explanation: string; }; no_credit: () => { pointsEarned: number; explanation: string; }; }; export {};