156 lines
4.3 KiB
TypeScript
156 lines
4.3 KiB
TypeScript
/**
|
|
* Hilfsklasse für den Umgang mit Formularen
|
|
*/
|
|
export class Forms {
|
|
|
|
private static _instance: Forms;
|
|
private _errorClass: string = "has-error";
|
|
private _validClass: string = "has-success";
|
|
|
|
/**
|
|
* Erstellt eine Instanz
|
|
* @param name Eindeutiger Event-Name
|
|
*/
|
|
constructor(errorClass: string, validClass: string) {
|
|
this._errorClass = errorClass;
|
|
this._validClass = validClass;
|
|
this.init();
|
|
}
|
|
|
|
static getInstance(errorClass: string, validClass: string): Forms {
|
|
if (!Forms._instance) {
|
|
Forms._instance = new Forms(errorClass, validClass);
|
|
}
|
|
return Forms._instance;
|
|
}
|
|
|
|
/**
|
|
* Initialisierung
|
|
*/
|
|
private init(): void {
|
|
this.setupBootstrap4ErrorHandling();
|
|
}
|
|
|
|
/**
|
|
* Fehleranzeige mittels Bootstrap3 initialisieren
|
|
*/
|
|
private setupBootstrap4ErrorHandling(): void {
|
|
var self = this;
|
|
const defaultOptions: JQueryValidation.ValidationOptions = {
|
|
highlight(element) {
|
|
$(element).removeClass(self._validClass);
|
|
$(element).addClass(self._errorClass);
|
|
},
|
|
unhighlight(element) {
|
|
$(element).removeClass(self._errorClass);
|
|
$(element).addClass(self._validClass);
|
|
},
|
|
errorClass: self._errorClass,
|
|
validClass: self._validClass
|
|
};
|
|
$.validator.setDefaults(defaultOptions);
|
|
|
|
$.validator.unobtrusive.options = {
|
|
errorClass: self._errorClass,
|
|
validClass: self._validClass
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Zurücksetzen der unobtrusive Validierung eines Forms
|
|
* @param {string} formName: Name des Forms (optional). Wenn nicht angegeben, dann alle forms
|
|
*/
|
|
public resetValidation(formName: string = ""): void {
|
|
//Reset validation message
|
|
$(".field-validation-error")
|
|
.removeClass("field-validation-error")
|
|
.addClass("field-validation-valid");
|
|
|
|
//Reset input, select and textarea style
|
|
$(".input-validation-error")
|
|
.removeClass("input-validation-error")
|
|
.addClass("valid");
|
|
|
|
//Reset validation summary
|
|
$(".validation-summary-errors")
|
|
.removeClass("validation-summary-errors")
|
|
.addClass("validation-summary-valid")
|
|
.find("ul").empty();
|
|
|
|
//To reenable lazy validation (no validation until you submit the form)
|
|
if (formName.length === 0)
|
|
formName = "form";
|
|
$(formName).removeData("validator");
|
|
$.validator.unobtrusive.parse($(formName));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Hilfsklasse für das Validieren von formularen
|
|
*/
|
|
export class FormValidation {
|
|
|
|
private static _instance: FormValidation;
|
|
private _formInterval: any;
|
|
private _formValidCallback: any;
|
|
private _formInvalidCallback: any;
|
|
private _formName: string;
|
|
|
|
/**
|
|
* Erstellt eine Instanz
|
|
* @param name Eindeutiger Event-Name
|
|
*/
|
|
constructor() {
|
|
this.init();
|
|
}
|
|
|
|
static getInstance(): FormValidation {
|
|
if (!FormValidation._instance) {
|
|
FormValidation._instance = new FormValidation();
|
|
}
|
|
return FormValidation._instance;
|
|
}
|
|
|
|
/**
|
|
* Initialisierung
|
|
*/
|
|
private init(): void {
|
|
|
|
}
|
|
|
|
/**
|
|
* Warten auf Pending-Request
|
|
*/
|
|
private waitForFormValidation(): void {
|
|
var self = FormValidation._instance;
|
|
let validator = <any>$(self._formName).validate();
|
|
if (validator.pendingRequest === 0) {
|
|
clearInterval(self._formInterval);
|
|
if ($(self._formName).valid()) {
|
|
// push your data or form submit
|
|
self._formValidCallback();
|
|
} else {
|
|
self._formInvalidCallback();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validiert ein Form unter Berücksichtigung von Remote-Validation
|
|
* @param formName
|
|
* @param validCallback
|
|
* @param invalidCallback
|
|
*/
|
|
public validateForm(formName: string, validCallback: any, invalidCallback: any): void {
|
|
var self = this;
|
|
self._formName = formName;
|
|
self._formValidCallback = validCallback;
|
|
self._formInvalidCallback = invalidCallback;
|
|
|
|
$(formName).valid();
|
|
self._formInterval = setInterval(self.waitForFormValidation, 30);
|
|
}
|
|
}
|
|
|
|
|