UNPKG

scorm-again

Version:

A modern SCORM JavaScript run-time library for AICC, SCORM 1.2, and SCORM 2004

105 lines (94 loc) 2.48 kB
import { BaseCMI } from "../common/base_cmi"; import { CMIScore } from "../common/score"; import { aicc_constants } from "../../constants/api_constants"; import { aicc_regex } from "../../constants/regex"; import { scorm12_errors } from "../../constants/error_codes"; import { AICCValidationError } from "../../exceptions/aicc_exceptions"; import { checkAICCValidFormat } from "./validation"; import { CMIArray } from "../common/array"; /** * Class for cmi.student_data.attempt_records array */ export class CMIAttemptRecords extends CMIArray { /** * Constructor for inline Tries Array class */ constructor() { super({ children: aicc_constants.attempt_records_children, }); } } /** * Class for AICC Attempt Records */ export class CMIAttemptRecordsObject extends BaseCMI { private _lesson_status = ""; /** * Constructor for AICC Attempt Records object */ constructor() { super(); this.score = new CMIScore({ score_children: aicc_constants.score_children, score_range: aicc_regex.score_range, invalidErrorCode: scorm12_errors.INVALID_SET_VALUE as number, invalidTypeCode: scorm12_errors.TYPE_MISMATCH as number, invalidRangeCode: scorm12_errors.VALUE_OUT_OF_RANGE as number, errorClass: AICCValidationError, }); } public score: CMIScore; /** * Called when the API has been initialized after the CMI has been created */ override initialize() { super.initialize(); this._lesson_status = ""; this.score?.initialize(); } /** * Called when the API has been reset */ reset(): void { this._initialized = false; this.score?.reset(); } /** * Getter for _lesson_status * @return {string} */ get lesson_status(): string { return this._lesson_status; } /** * Setter for _lesson_status * @param {string} lesson_status */ set lesson_status(lesson_status: string) { if (checkAICCValidFormat(lesson_status, aicc_regex.CMIStatus2)) { this._lesson_status = lesson_status; } } /** * toJSON for cmi.student_data.attempt_records.n object * @return { * { * lesson_status: string, * score: CMIScore * } * } */ toJSON(): { lesson_status: string; score: CMIScore; } { this.jsonString = true; const result = { lesson_status: this.lesson_status, score: this.score, }; delete this.jsonString; return result; } }