@@ -40,17 +40,9 @@ class Form {
4040 #errorContainerClass = 'data-powermail-class-handler' ;
4141 #errorMessageContainerClass = 'powermail-errors-list' ;
4242
43- constructor ( form ) {
44- this . #form = form ;
45- this . #form. powermailFormValidation = this ;
46- }
47-
48- validate ( ) {
49- this . #validateFormSubmit( ) ;
50- this . #validateFieldListener( ) ;
51- }
52-
5343 /**
44+ * Validator configuration
45+ *
5446 * Add possibility to add own validators from outside like:
5547 *
5648 * const forms = document.querySelectorAll('.powermail_form');
@@ -66,19 +58,95 @@ class Form {
6658 * });
6759 * });
6860 *
61+ * @type {{name: function(*=, *): boolean} }
62+ */
63+ #validators = {
64+ 'required' : ( field ) => {
65+ return this . #isRequiredField( field ) && this . #isValidationRequiredConfirmed( field ) === false ;
66+ } ,
67+ 'email' : ( field ) => {
68+ return this . #isEmailField( field ) && this . #isValidationEmailConfirmed( field ) === false ;
69+ } ,
70+ 'url' : ( field ) => {
71+ return this . #isUrlField( field ) && this . #isValidationUrlConfirmed( field ) === false ;
72+ } ,
73+ 'pattern' : ( field ) => {
74+ return this . #isPatternField( field ) && this . #isValidationPatternConfirmed( field ) === false ;
75+ } ,
76+ 'number' : ( field ) => {
77+ return this . #isNumberField( field ) && this . #isValidationNumberConfirmed( field ) === false ;
78+ } ,
79+ 'minimum' : ( field ) => {
80+ return this . #isMinimumField( field ) && this . #isValidationMinimumConfirmed( field ) === false ;
81+ } ,
82+ 'maximum' : ( field ) => {
83+ return this . #isMaximumField( field ) && this . #isValidationMaximumConfirmed( field ) === false ;
84+ } ,
85+ 'length' : ( field ) => {
86+ return this . #isLengthField( field ) && this . #isValidationLengthConfirmed( field ) === false ;
87+ } ,
88+ 'equalto' : ( field ) => {
89+ return this . #isEqualtoField( field ) && this . #isValidationEqualtoConfirmed( field ) === false ;
90+ } ,
91+ 'powermailfilesize' : ( field ) => {
92+ return this . #isUploadField( field ) && this . #isValidationUploadFieldSizeConfirmed( field ) === false ;
93+ } ,
94+ 'powermailfileextensions' : ( field ) => {
95+ return this . #isUploadField( field ) && this . #isValidationUploadFieldExtensionConfirmed( field ) === false ;
96+ } ,
97+ } ;
98+
99+ /**
100+ * Submit error callback configuration
101+ *
102+ * Add possibility to add own callbacks when a user submits a form and an error happens from outside like:
103+ *
104+ * const forms = document.querySelectorAll('.powermail_form');
105+ * forms.forEach(function(form) {
106+ * let formValidation = form.powermailFormValidation;
107+ *
108+ * formValidation.addSubmitErrorCallback('custom100', function() {
109+ * // error happens, do something
110+ * });
111+ * });
112+ *
113+ * @type {{name: function(*=, *): boolean} }
114+ */
115+ #submitErrorCallbacks = { } ;
116+
117+ constructor ( form ) {
118+ this . #form = form ;
119+ this . #form. powermailFormValidation = this ;
120+ }
121+
122+ validate ( ) {
123+ this . #validateFormSubmit( ) ;
124+ this . #validateFieldListener( ) ;
125+ }
126+
127+ /**
69128 * @param name
70129 * @param validator
71130 */
72131 addValidator ( name , validator ) {
73132 this . #validators[ name ] = validator ;
74133 }
75134
135+ /**
136+ * @param name
137+ * @param callback
138+ */
139+ addSubmitErrorCallback ( name , callback ) {
140+ this . #submitErrorCallbacks[ name ] = callback ;
141+ }
142+
76143 #validateFormSubmit( ) {
77144 const that = this ;
78145 this . #form. setAttribute ( 'novalidate' , 'novalidate' )
79146 this . #form. addEventListener ( 'submit' , function ( event ) {
80147 that . #validateForm( ) ;
81148 if ( that . #hasFormErrors( ) === true ) {
149+ that . #runSubmitErrorCallbacks( ) ;
82150 event . preventDefault ( ) ;
83151 }
84152 } )
@@ -109,47 +177,6 @@ class Form {
109177 }
110178 } ;
111179
112- /**
113- * Validator configuration
114- *
115- * @type {{name: function(*=, *): boolean} }
116- */
117- #validators = {
118- 'required' : ( field ) => {
119- return this . #isRequiredField( field ) && this . #isValidationRequiredConfirmed( field ) === false ;
120- } ,
121- 'email' : ( field ) => {
122- return this . #isEmailField( field ) && this . #isValidationEmailConfirmed( field ) === false ;
123- } ,
124- 'url' : ( field ) => {
125- return this . #isUrlField( field ) && this . #isValidationUrlConfirmed( field ) === false ;
126- } ,
127- 'pattern' : ( field ) => {
128- return this . #isPatternField( field ) && this . #isValidationPatternConfirmed( field ) === false ;
129- } ,
130- 'number' : ( field ) => {
131- return this . #isNumberField( field ) && this . #isValidationNumberConfirmed( field ) === false ;
132- } ,
133- 'minimum' : ( field ) => {
134- return this . #isMinimumField( field ) && this . #isValidationMinimumConfirmed( field ) === false ;
135- } ,
136- 'maximum' : ( field ) => {
137- return this . #isMaximumField( field ) && this . #isValidationMaximumConfirmed( field ) === false ;
138- } ,
139- 'length' : ( field ) => {
140- return this . #isLengthField( field ) && this . #isValidationLengthConfirmed( field ) === false ;
141- } ,
142- 'equalto' : ( field ) => {
143- return this . #isEqualtoField( field ) && this . #isValidationEqualtoConfirmed( field ) === false ;
144- } ,
145- 'powermailfilesize' : ( field ) => {
146- return this . #isUploadField( field ) && this . #isValidationUploadFieldSizeConfirmed( field ) === false ;
147- } ,
148- 'powermailfileextensions' : ( field ) => {
149- return this . #isUploadField( field ) && this . #isValidationUploadFieldExtensionConfirmed( field ) === false ;
150- } ,
151- } ;
152-
153180 #validateField( field ) {
154181 let error = false ;
155182 field = this . #getValidationField( field ) ;
@@ -175,6 +202,15 @@ class Form {
175202 return error ;
176203 }
177204
205+ #runSubmitErrorCallbacks( ) {
206+ for ( let callback in this . #submitErrorCallbacks) {
207+ if ( this . #submitErrorCallbacks. hasOwnProperty ( callback ) === false ) {
208+ continue ;
209+ }
210+ this . #submitErrorCallbacks[ callback ] ( ) ;
211+ }
212+ }
213+
178214 /*
179215 * Check for validations
180216 */
0 commit comments