UNPKG

scorm-again

Version:

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

127 lines (115 loc) 2.7 kB
import { CMIArray } from "../common/array"; import { aicc_constants } from "../../constants/api_constants"; import { BaseCMI } from "../common/base_cmi"; import { CMIScore } from "../common/score"; import { aicc_regex } from "../../constants/regex"; import { scorm12_errors } from "../../constants/error_codes"; import { AICCValidationError } from "../../exceptions/aicc_exceptions"; import { checkAICCValidFormat } from "./validation"; /** * Class representing the AICC cmi.student_data.tries object */ export class CMITries extends CMIArray { /** * Constructor for inline Tries Array class */ constructor() { super({ children: aicc_constants.tries_children, }); } } /** * Class for AICC Tries */ export class CMITriesObject extends BaseCMI { private _status = ""; private _time = ""; /** * Constructor for AICC Tries 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.score?.initialize(); } /** * Called when the API has been reset */ reset(): void { this._initialized = false; this._status = ""; this._time = ""; this.score?.reset(); } /** * Getter for _status * @return {string} */ get status(): string { return this._status; } /** * Setter for _status * @param {string} status */ set status(status: string) { if (checkAICCValidFormat(status, aicc_regex.CMIStatus2)) { this._status = status; } } /** * Getter for _time * @return {string} */ get time(): string { return this._time; } /** * Setter for _time * @param {string} time */ set time(time: string) { if (checkAICCValidFormat(time, aicc_regex.CMITime)) { this._time = time; } } /** * toJSON for cmi.student_data.tries.n object * @return { * { * status: string, * time: string, * score: CMIScore * } * } */ toJSON(): { status: string; time: string; score: CMIScore; } { this.jsonString = true; const result = { status: this.status, time: this.time, score: this.score, }; delete this.jsonString; return result; } }