PageSourceSearch

https://www.fortisconcept.ch/cis-data/plugins/creanetFormcheck/newFormCheck_dev.js?dt=202609181136

js fortisconcept.ch collected 2026-10-08 07:42:22 UTC 12,449 bytes, 449 lines download raw bytes

1/************ field types ************/
2	function fc_base(elem, mandatory){
3		var F = this,
4			field = elem,
5			state = false,
6			field = elem['field'],
7			target = elem['target'] || elem['field'],
8			value = elem['value'],
9			mandatory = mandatory || false;
10
11		F.getField = function(){ return field; }
12		F.getValue = function(){ return value; }
13		F.getTarget = function(){ return target; }
14		F.getState = function(){ return state; }
15
16		F.check = function(){
17			var result = state;
18
19			if(!mandatory && value == ''){
20				result = true
21			} else {
22				// var regex = new RegExp(/^.+$/);		// any character except terminators (\n).
23				var regex = new RegExp(/^[\s\S]+$/);	// fix für textarea
24
25				result = regex.test(value) ? true : false;
26			}
27
28			state = result;
29			return state;
30		}
31	}
32
33	function fc_mail(elem, mandatory){
34		var F = this,
35			field = elem,
36			field = elem['field'],
37			target = elem['target'] || elem['field'],
38			value = elem['value'],
39			state = false,
40			mandatory = mandatory || false;
41
42		F.getField = function(){ return field; }
43		F.getValue = function(){ return value; }
44		F.getTarget = function(){ return target; }
45		F.getState = function(){ return state; }
46
47		F.check = function(){
48			var result = state;
49
50			if(!mandatory && value == ''){
51				result = true
52			} else {
53				var regex = new RegExp(/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
54
55				result = regex.test(value) ? true : false;
56			}
57
58			state = result;
59			return state;
60		}
61	}
62
63	function fc_tel(elem, mandatory){
64		var F = this,
65			field = elem['field'],
66			target = elem['target'] || elem['field'],
67			value = elem['value'],
68			state = false,
69			mandatory = mandatory || false;
70
71		F.getField = function(){ return field; }
72		F.getValue = function(){ return value; }
73		F.getTarget = function(){ return target; }
74		F.getState = function(){ return state; }
75
76		F.check = function(){
77			var result = state;
78
79			if(!mandatory && value == ''){
80				result = true
81			} else {
82				var regex = new RegExp("^((\\+|00)[1-9]\\d{0,3}|0 ?[1-9]|\\(00? ?[1-9][\\d ]*\\))[\\d\\-/ ]*$");
83
84				result = regex.test(value) ? true : false;
85			}
86
87			state = result;
88			return state;
89		}
90	}
91
92	function fc_num(elem, mandatory){
93		var F = this,
94			field = elem['field'],
95			value = elem['value'],
96			target = elem['target'] || elem['field'],
97			state = false,
98			mandatory = mandatory || false;
99
100		F.getField = function(){ return field; }
101		F.getValue = function(){ return value; }
102		F.getTarget = function(){ return target; }
103		F.getState = function(){ return state; }
104
105		F.check = function(){
106			var result = state;
107
108			if(!mandatory && value == ""){
109				result = true
110			} else {
111				var regex = new RegExp(/^\d+$/);
112
113				result = regex.test(value) ? true : false;
114			}
115
116			state = result;
117			return state;
118		}
119	}
120
121	function fc_date(elem, mandatory){
122		var F = this,
123			field = elem['field'],
124			value = elem['value'],
125			target = elem['target'] || elem['field'],
126			state = false,
127			mandatory = mandatory || false;
128
129		F.getField = function(){ return field; }
130		F.getValue = function(){ return value; }
131		F.getTarget = function(){ return target; }
132		F.getState = function(){ return state; }
133
134		F.check = function(){
135			var result = state;
136
137			if(!mandatory && value == ""){
138				result = true
139			} else {
140				var regex = new RegExp(/^\d{1,2}\.\d{1,2}\.\d{4}$/);
141
142				result = regex.test(value) ? true : false;
143			}
144
145			state = result;
146			return state;
147		}
148	}
149
150	function fc_regex(elem, mandatory){
151		var F = this,
152			field = elem['field'],
153			value = elem['value'],
154			target = elem['target'] || elem['field'],
155			state = false,
156			mandatory = mandatory || false,
157			regexrule = field.dataset.regex;
158
159		F.getField = function(){ return field; }
160		F.getValue = function(){ return value; }
161		F.getTarget = function(){ return target; }
162		F.getState = function(){ return state; }
163
164		F.check = function(){
165			var result = state;
166
167			if(!mandatory && value == ""){
168				result = true
169			} else {
170				var regex = new RegExp(regexrule);
171
172				result = regex.test(value) ? true : false;
173			}
174
175			state = result;
176			return state;
177		}
178	}
179
180
181/************ formcheck ************/
182	function Formcheck(element, callbacks){
183		if(typeof element != 'string') throw new Error("No valid form selector passed to formcheck");
184
185		/********************************* private *************************************/
186		var F = this,
187			_form = document.querySelector(element),
188			_fields = [],
189			_callbacks = {
190				'beforeValidation': null,
191				'afterValidation': null,
192				'onSuccess': null,
193				'onError': null
194			};
195
196		if(_form == null) throw new Error("Form selector " + String(element) + " could not be found");
197		if(typeof callbacks == 'object') _setupCallbacks(callbacks);
198
199
200		function _setClass(elem, classToSet){
201			function __setClass(e){
202				var classes = e.getAttribute('class') || '';
203
204				if(classes.indexOf(classToSet) == -1) e.setAttribute('class', classes + " " + classToSet)
205			}
206
207			if(Array.isArray(elem)){
208				elem.map(__setClass);
209			} else {
210				__setClass(elem)
211			}
212		}
213
214		function _removeClass(elem, classToRemove){
215			function __removeClass(e){
216				var classes = e.getAttribute('class') || '';
217
218				if(classes.indexOf(classToRemove) != -1) e.setAttribute('class', classes.replace(" " + classToRemove, ""))
219			}
220
221			if(Array.isArray(elem)){
222				elem.map(__removeClass);
223			} else {
224				__removeClass(elem)
225			}
226		}
227
228		function _loadFields(fc_serialize_result){
229			_fields = [];
230			temp_fields = fc_serialize_result || fc_serialize(_form);
231
232			try {
233				for(var index = 0; index < temp_fields.length; index++){
234					var field = temp_fields[index],
235						is_mandatory = field['class'].indexOf('input_must') == -1 ? false : true,
236						match = field['class'].match(/fc_\S+/),
237						temp_instance = false;
238
239					if(match){
240						temp_instance = new window[match[0]](temp_fields[index], is_mandatory);
241					} else {
242						temp_instance = new window['fc_base'](temp_fields[index], is_mandatory);
243					}
244
245					if(temp_instance) _fields.push(temp_instance);
246				}
247			} catch(e){
248				console.log("temp_fields variable: ", temp_fields, e);
249				throw new Error("_loadFields failed:");
250			}
251		}
252
253		function _simplifyFormData(fc_serialize_result){
254			if(!Array.isArray(fc_serialize_result)) throw new Error("fc_serialize_result should be an array");
255
256			var form_data = {};
257
258			fc_serialize_result.map(function(e,i){
259				form_data[e.name] = e.value;
260			});
261
262			return form_data;
263		}
264
265		function _checkForm(e, bPreventCallbacks = false){
266			e.preventDefault();
267			if(typeof _callbacks['beforeValidation'] == 'function') _callbacks['beforeValidation']();
268
269			var form_is_valid = true,
270				fc_serialize_result = fc_serialize(_form);
271
272			_loadFields(fc_serialize_result);
273
274			for(var index = 0; index < _fields.length; index++){
275				try {
276					var current_field = _fields[index],
277						result = current_field.check(),
278						target = current_field.getTarget(),
279						field = current_field.getField();
280
281					if(result){
282						_removeClass(target, 'input_false');
283					} else {
284						_setClass(target, 'input_false');
285						form_is_valid = false;
286
287						// Make sure to have an array of fields
288						let fieldArray = Array.isArray(field) ? field : [field];
289
290						fieldArray.forEach(singleField => {
291							singleField.addEventListener("blur", () => {
292								_checkForm(e, true);
293							},{ once: true });
294						});
295					}
296				} catch(e){
297					throw new Error(`field instance index ${index} - Error-Message: ${e}`);
298				}
299			}
300
301			if(!bPreventCallbacks){
302				if(typeof _callbacks['afterValidation'] == 'function') _callbacks['afterValidation'](fc_serialize_result);
303
304				var form_data = _simplifyFormData(fc_serialize_result);
305
306				if(!form_is_valid && typeof _callbacks['onError'] == 'function') _callbacks['onError'](form_data);
307				if(form_is_valid && typeof _callbacks['onSuccess'] == 'function') _callbacks['onSuccess'](form_data);
308			}
309
310			return form_is_valid;
311		}
312
313		function _setupCallbacks(setup){
314			Object.assign(_callbacks, setup);
315		}
316
317
318		/********************************* public *************************************/
319
320		F.dump = function(){
321			var fc_serialize_result = fc_serialize(_form);
322			_loadFields(fc_serialize_result);
323
324			for(var index = 0; index < _fields.length; index++){
325				fc_serialize_result[index]['valid'] = _fields[index].check();
326				fc_serialize_result[index]['instance'] = _fields[index];
327			}
328
329			return fc_serialize_result;
330		}
331
332		F.update = function(setup){
333			_setupCallbacks(setup);
334		}
335
336
337		/********************************* events *************************************/
338
339		_form.addEventListener('submit', _checkForm);
340	}
341
342
343/************ serialize form ************/
344	function fc_serialize(form){
345		var serialized = [],
346			radio_checkbox_set = {};
347
348		function onlyUnique(value, index, self){
349			return self.indexOf(value) === index;
350		}
351
352		function getCustomAttributes(field){
353			// var attributes = Array.from(field.attributes),
354			var attributes = [].slice.call(field.attributes),
355				result = {};
356
357			for(var index = 0; index < attributes.length; index++){
358				var elem = attributes[index];
359
360				if(elem.name.indexOf('fc-') != -1){
361					var key = elem.name.replace('data-fc-','').replace('fc-','');
362
363					if(key == 'target'){
364						if(elem.value == 'p' || elem.value == 'parent'){
365							result[key] = field.parentNode;
366							continue;
367						}
368
369						// var elements = Array.from(document.querySelectorAll(elem.value));
370						var elements = [].slice.call(document.querySelectorAll(elem.value));
371						if(elements.length == 0) throw new Error("Target selector " + elem.value + " could not be found");
372
373						result[key] = elements.length == 1 ? elements[0] : elements;
374					} else {
375						result[key] = elem.value;
376					}
377				}
378			}
379
380			return result;
381		}
382
383		function createEntry(p_name, p_value, p_field, p_class, p_other){
384			var result = {
385				'name': p_name,
386				'value': p_value,
387				'field': p_field,
388				'class': p_class
389			};
390
391			if(typeof p_other == 'object') result = Object.assign(result, p_other);
392
393			return result;
394		}
395
396		for(var i = 0; i < form.elements.length; i++){
397			var field = form.elements[i];
398
399			if(!field.name || field.disabled || field.type === 'file' || field.type === 'reset' || field.type === 'submit' || field.type === 'button') continue;
400
401			if(field.type === 'select-multiple'){
402				for(var n = 0; n < field.options.length; n++){
403					if (!field.options[n].selected) continue;
404
405					var new_entry = createEntry(field.name, field.value, field, field.getAttribute("class") || "", getCustomAttributes(field));
406
407					serialized.push(new_entry);
408				}
409			} else if(field.type !== 'checkbox' && field.type !== 'radio'){
410				var new_entry = createEntry(field.name, field.value, field, field.getAttribute("class") || "", getCustomAttributes(field));
411
412				serialized.push(new_entry);
413			} else if(field.type == 'checkbox' || field.type == 'radio'){
414				radio_checkbox_set[field.name] = form["elements"][field.name]
415			}
416		}
417
418		var radio_checkbox_keys = Object.keys(radio_checkbox_set);
419
420		for(var i = 0; i < radio_checkbox_keys.length; i++){
421			var element = radio_checkbox_keys[i],
422				// fields = Array.from(radio_checkbox_set[element]),
423				fields = [].slice.call(radio_checkbox_set[element]),
424				values = [],
425				classes = [],
426				special_attr = {};
427
428			if(typeof radio_checkbox_set[element].length === 'undefined'){
429				// Fix: [].slice.call returns an empty array, if only one element is found.
430				fields.push(radio_checkbox_set[element]);
431			}
432
433			for(var j = 0; j < fields.length; j++){
434				var field = fields[j];
435				if(field.checked) values.push(field.value);
436				Object.assign(special_attr, getCustomAttributes(field));
437
438				var attr = field.getAttribute("class");
439				if(attr) classes = classes.concat(attr.split(" "));
440			}
441
442			if(classes.length > 0) classes = classes.filter(onlyUnique);
443
444			var new_entry = createEntry(element, values.join(","), fields, classes.join(" "), special_attr);
445			serialized.push(new_entry);
446		}
447
448		return serialized;
449	}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.