code-exercises-js
Version:
Create exercises for your students!
29 lines (28 loc) • 1.45 kB
TypeScript
import EditableField from "./EditableField";
import Event from "./Event";
import { MonacoEditor } from "./MonacoEditor";
import ValidationRuleSet from "./Validation";
import IValidationRule from "./IValidationRule";
import { editor } from "monaco-editor/esm/vs/editor/editor.api";
import ValidationResultGroup from "./ValidationResultGroup";
import ValidationResultSummary from "./ValidationSummary";
export default abstract class Excercise<RuleType extends IValidationRule, RuleSetType extends ValidationRuleSet<RuleType>> {
protected _editableFields: EditableField[];
protected abstract readonly _ruleSets: RuleSetType[];
protected readonly _monacoEditorInstance: MonacoEditor;
protected readonly id: string;
constructor(monacoEditorElement: HTMLElement, content?: string, monacoConfig?: editor.IStandaloneEditorConstructionOptions);
abstract addValidationRule(): RuleSetType;
protected abstract validateRule(rule: RuleType): Promise<boolean> | boolean;
readonly onValidate: Event<ValidationResultSummary>;
get content(): string;
get monacoEditorInstance(): editor.IStandaloneCodeEditor;
setEditableFields(fields: EditableField[]): void;
clearEditableFields(): void;
validate(): Promise<ValidationResultSummary>;
/**
* Override this method to add custom validation
*/
protected abstract validateExtend(): Promise<Array<ValidationResultGroup>>;
private editableFieldsChanged;
}