scorm-again
Version:
A modern SCORM JavaScript run-time library for AICC, SCORM 1.2, and SCORM 2004
171 lines (156 loc) • 4.01 kB
text/typescript
import { CMIArray } from "../common/array";
import { scorm2004_constants } from "../../constants/api_constants";
import { scorm2004_errors } from "../../constants/error_codes";
import { Scorm2004ValidationError } from "../../exceptions/scorm2004_exceptions";
import { BaseCMI } from "../common/base_cmi";
import { check2004ValidFormat } from "./validation";
import { scorm2004_regex } from "../../constants/regex";
/**
* Class representing SCORM 2004's cmi.comments_from_lms object
* @extends CMIArray
*/
export class CMICommentsFromLMS extends CMIArray {
/**
* Constructor for cmi.comments_from_lms Array
*/
constructor() {
super({
children: scorm2004_constants.comments_children,
errorCode: scorm2004_errors.READ_ONLY_ELEMENT as number,
errorClass: Scorm2004ValidationError,
});
}
}
/**
* Class representing SCORM 2004's cmi.comments_from_learner object
*/
export class CMICommentsFromLearner extends CMIArray {
/**
* Constructor for cmi.comments_from_learner Array
*/
constructor() {
super({
children: scorm2004_constants.comments_children,
errorCode: scorm2004_errors.READ_ONLY_ELEMENT as number,
errorClass: Scorm2004ValidationError,
});
}
}
/**
* Class representing SCORM 2004's cmi.comments_from_learner.n and cmi.comments_from_lms.n object
*/
export class CMICommentsObject extends BaseCMI {
private _comment = "";
private _location = "";
private _timestamp = "";
private readonly _readOnlyAfterInit: boolean;
/**
* Constructor for cmi.comments_from_learner.n and cmi.comments_from_lms.n
* @param {boolean} readOnlyAfterInit
*/
constructor(readOnlyAfterInit: boolean = false) {
super();
this._comment = "";
this._location = "";
this._timestamp = "";
this._readOnlyAfterInit = readOnlyAfterInit;
}
/**
* Called when the API has been reset
*/
reset(): void {
this._initialized = false;
}
/**
* Getter for _comment
* @return {string}
*/
get comment(): string {
return this._comment;
}
/**
* Setter for _comment
* @param {string} comment
*/
set comment(comment: string) {
if (this.initialized && this._readOnlyAfterInit) {
throw new Scorm2004ValidationError(
scorm2004_errors.READ_ONLY_ELEMENT as number,
);
} else {
if (
check2004ValidFormat(comment, scorm2004_regex.CMILangString4000, true)
) {
this._comment = comment;
}
}
}
/**
* Getter for _location
* @return {string}
*/
get location(): string {
return this._location;
}
/**
* Setter for _location
* @param {string} location
*/
set location(location: string) {
if (this.initialized && this._readOnlyAfterInit) {
throw new Scorm2004ValidationError(
scorm2004_errors.READ_ONLY_ELEMENT as number,
);
} else {
if (check2004ValidFormat(location, scorm2004_regex.CMIString250)) {
this._location = location;
}
}
}
/**
* Getter for _timestamp
* @return {string}
*/
get timestamp(): string {
return this._timestamp;
}
/**
* Setter for _timestamp
* @param {string} timestamp
*/
set timestamp(timestamp: string) {
if (this.initialized && this._readOnlyAfterInit) {
throw new Scorm2004ValidationError(
scorm2004_errors.READ_ONLY_ELEMENT as number,
);
} else {
if (check2004ValidFormat(timestamp, scorm2004_regex.CMITime)) {
this._timestamp = timestamp;
}
}
}
/**
* toJSON for cmi.comments_from_learner.n object
* @return {
* {
* comment: string,
* location: string,
* timestamp: string
* }
* }
*/
toJSON(): {
comment: string;
location: string;
timestamp: string;
} {
this.jsonString = true;
const result = {
comment: this.comment,
location: this.location,
timestamp: this.timestamp,
};
delete this.jsonString;
return result;
}
}