scorm-again
Version:
A modern SCORM JavaScript run-time library for AICC, SCORM 1.2, and SCORM 2004
162 lines (147 loc) • 3.68 kB
text/typescript
/**
* Class for SCORM 2004's cmi.learner_preference object
*/
import { BaseCMI } from "../common/base_cmi";
import { scorm2004_constants } from "../../constants/api_constants";
import { Scorm2004ValidationError } from "../../exceptions/scorm2004_exceptions";
import { scorm2004_errors } from "../../constants/error_codes";
import { check2004ValidFormat, check2004ValidRange } from "./validation";
import { scorm2004_regex } from "../../constants/regex";
export class CMILearnerPreference extends BaseCMI {
private __children = scorm2004_constants.student_preference_children;
private _audio_level = "1";
private _language = "";
private _delivery_speed = "1";
private _audio_captioning = "0";
/**
* Constructor for cmi.learner_preference
*/
constructor() {
super();
}
/**
* Called when the API has been reset
*/
override reset() {
this._initialized = false;
}
/**
* Getter for __children
* @return {string}
* @private
*/
get _children(): string {
return this.__children;
}
/**
* Setter for __children. Just throws an error.
* @param {string} _children
* @private
*/
set _children(_children: string) {
throw new Scorm2004ValidationError(
scorm2004_errors.READ_ONLY_ELEMENT as number,
);
}
/**
* Getter for _audio_level
* @return {string}
*/
get audio_level(): string {
return this._audio_level;
}
/**
* Setter for _audio_level
* @param {string} audio_level
*/
set audio_level(audio_level: string) {
if (
check2004ValidFormat(audio_level, scorm2004_regex.CMIDecimal) &&
check2004ValidRange(audio_level, scorm2004_regex.audio_range)
) {
this._audio_level = audio_level;
}
}
/**
* Getter for _language
* @return {string}
*/
get language(): string {
return this._language;
}
/**
* Setter for _language
* @param {string} language
*/
set language(language: string) {
if (check2004ValidFormat(language, scorm2004_regex.CMILang)) {
this._language = language;
}
}
/**
* Getter for _delivery_speed
* @return {string}
*/
get delivery_speed(): string {
return this._delivery_speed;
}
/**
* Setter for _delivery_speed
* @param {string} delivery_speed
*/
set delivery_speed(delivery_speed: string) {
if (
check2004ValidFormat(delivery_speed, scorm2004_regex.CMIDecimal) &&
check2004ValidRange(delivery_speed, scorm2004_regex.speed_range)
) {
this._delivery_speed = delivery_speed;
}
}
/**
* Getter for _audio_captioning
* @return {string}
*/
get audio_captioning(): string {
return this._audio_captioning;
}
/**
* Setter for _audio_captioning
* @param {string} audio_captioning
*/
set audio_captioning(audio_captioning: string) {
if (
check2004ValidFormat(audio_captioning, scorm2004_regex.CMISInteger) &&
check2004ValidRange(audio_captioning, scorm2004_regex.text_range)
) {
this._audio_captioning = audio_captioning;
}
}
/**
* toJSON for cmi.learner_preference
*
* @return {
* {
* audio_level: string,
* language: string,
* delivery_speed: string,
* audio_captioning: string
* }
* }
*/
toJSON(): {
audio_level: string;
language: string;
delivery_speed: string;
audio_captioning: string;
} {
this.jsonString = true;
const result = {
audio_level: this.audio_level,
language: this.language,
delivery_speed: this.delivery_speed,
audio_captioning: this.audio_captioning,
};
delete this.jsonString;
return result;
}
}