PageSourceSearch

https://www.ceskeragby.cz/core/classes/_new/Form/Form.class.js?v=777

js ceskeragby.cz collected 2026-10-06 17:00:20 UTC 14,378 bytes, 492 lines download raw bytes

1function TForm()
2{
3    this.id = "Form";
4    this.create();
5}
6
7TForm.prototype.create = function() 
8{
9    var _this = this;
10    addEvent("window", "load", function(){_this.onLoad()});
11
12    // for setHTML() - AJAX LOAD
13    extendFunction(onHtmlChange, function(elem){Form.onLoad(elem)});
14}
15
16TForm.prototype.onLoad = function(body) 
17{
18    if (typeof(body) == "undefined")
19        body = document.body;
20    
21    if (!ADMIN)
22    {
23        var forms = getElementsByTagName("form", body);
24        for (var i = 0 ; i < forms.length ; i++)
25        {
26            forms[i].elems = {};
27            
28            if (forms[i].getAttribute("required"))
29            {
30                var requiredFields = explodeList(forms[i].getAttribute("required"));
31
32                for (var ii = 0 ; ii < requiredFields.length ; ii++)
33                {
34                    var requiredField = requiredFields[ii];
35                    var elems = getElementsByTagName(["input","select","textarea"], forms[i]);
36                    for (var iii = 0 ; iii < elems.length ; iii++)
37                    {
38                        if (elems[iii].name == requiredField)
39                        {
40                            forms[i].elems[elems[iii].name] = elems[iii];
41                            
42                            var tr = elems[iii];
43                            while(tr)
44                            {
45                                if (tr.tagName == "TR")
46                                    break;
47                                    
48                                tr = tr.parentNode;
49                            }
50                            
51                            if (tr)
52                                addClassName(tr, "required");
53                        }
54                    }
55                }
56            }
57            else
58            {
59                // try to find components with required attribute
60                var required = [];
61
62                // 2025 obcekastruji
63                forms[i].objects = {};
64                var objects = findObjects(forms[i]);
65                for (var iii = 0 ; iii < objects.length ; iii++)
66                {
67                    var Object = objects[iii];
68                    if (Object.isChildComponent && !Object.isChildComponent())
69                    {
70                        if (Object.params["required"])
71                            required.push(Object.params["name"]);
72                            
73                        forms[i].objects[(Object.params["errorId"] || Object.params["name"] || Object.params["id"])] = Object;
74                    }
75                }
76                
77                // BACK COMPAT
78                var elems = getElementsByTagName(["input","textarea","select"], forms[i]);
79                for (var iii = 0 ; iii < elems.length ; iii++)
80                {
81                    var tr = elems[iii];
82                    while(tr)
83                    {
84                        if (tr.tagName == "TR")
85                            break;
86                                
87                        tr = tr.parentNode;
88                    }
89                        
90                    if (tr)
91                    {
92                        if (elems[iii].name)
93                            addClassName(tr, "_Form_"+str_replace("[", "_", str_replace("]", "", elems[iii].name)));
94
95                        if (elems[iii].hasAttribute("required") || elems[iii].hasAttribute("_required"))
96                            addClassName(tr, "required");
97                    }
98                    else
99                    {
100                        //if (elems[iii].hasAttribute("required") || elems[iii].hasAttribute("_required"))
101                        //{
102                        //    addClassName(elems[iii], "required");
103                        //}
104                    }
105                    
106                    if (elems[iii].hasAttribute("required") || elems[iii].hasAttribute("_required"))
107                    {
108                        if (elems[iii].name && !in_array(elems[iii].name, required))
109                        {
110                            required.push(elems[iii].name);
111                            forms[i].elems[elems[iii].name] = elems[iii];
112                        }
113                    }
114                }
115                
116                if (required.length)
117                    forms[i].setAttribute("required", implodeList(required));
118            }
119            
120            if (forms[i].getAttribute("errors"))
121            {
122                var errorFields = explodeList(forms[i].getAttribute("errors"));
123                for (var ii = 0 ; ii < errorFields.length ; ii++)
124                {
125                    var errorField = errorFields[ii];
126                    var elems = getElementsByTagName(["input","select","textarea"], forms[i]);
127                    for (var iii = 0 ; iii < elems.length ; iii++)
128                    {
129                        if (elems[iii].name == errorField)
130                        {
131                            var tr = elems[iii];
132                            while(tr)
133                            {
134                                if (tr.tagName == "TR")
135                                    break;
136                                    
137                                tr = tr.parentNode;
138                            }
139                            
140                            if (tr)
141                                addClassName(tr, "error");
142                        }
143                    }
144                }
145            }
146            if (forms[i].getAttribute("check"))
147            {
148                this.createOnCheckValuesEvent(forms[i]);
149            }            
150            if (forms[i].getAttribute("ajax"))
151            {
152                this.createOnAJAXSubmitEvent(forms[i]);
153            }            
154            // 2025 obcekastruji
155            if (false && forms[i].hasAttribute("checkrequired"))
156            {
157                this.createOnCheckRequiredValuesEvent(forms[i]);
158            }            
159            if (forms[i].hasAttribute("ajaxcheck"))
160            {
161                this.createOnAJAXCheckValuesEvent(forms[i]);
162            }            
163        }
164    }
165}
166
167TForm.prototype.createOnAJAXCheckValuesEvent = function(form) 
168{
169    var _this = this;
170    var _form = form;
171    
172    addEvent(form, "submit", function(e){
173        e = getEvent(e);
174                        
175        if (_this.onAJAXCheckValues(_form) === false)
176        {
177            //dump("FALSE CHECK");
178            e.stop();
179            return(false);
180        }
181
182        return(true);
183    });
184}
185
186TForm.prototype.createOnCheckRequiredValuesEvent = function(form) 
187{
188    var _this = this;
189    var _form = form;
190    
191    addEvent(form, "submit", function(e){
192        e = getEvent(e);
193                        
194        if (_this.onCheckRequiredValues(_form) === false)
195        {
196            //dump("FALSE CHECK");
197            e.stop();
198            return(false);
199        }
200
201        return(true);
202    });
203}
204
205TForm.prototype.createOnCheckValuesEvent = function(form) 
206{
207    var _this = this;
208    var _form = form;
209    
210    addEvent(form, "submit", function(e){
211        e = getEvent(e);
212                        
213        if (_this.onCheckValues(_form) === false)
214        {
215            e.stop();
216            return(false);
217        }
218
219        return(true);
220    });
221}
222
223TForm.prototype.createOnSubmitEvent = function(form) 
224{
225    var _this = this;
226    var _form = form;
227    
228    addEvent(form, "submit", function(e){
229        e = getEvent(e);
230                        
231        if (_this.onAJAXSubmit(_form) === false)
232        {
233            e.stop();
234            return(false);
235        }
236
237        return(true);
238    });
239}
240
241TForm.prototype.ajaxSubmit = function(form, container) 
242{
243    form = getElement(form);
244    
245    if (typeof(container) != "undefined")
246        container = getElement(container);
247        
248    if (!container && form.getAttribute("ajax"))
249    {
250        container = getElement(form.getAttribute("ajax"));
251        if (!container)
252            container = form;
253    }
254    
255    this.onAJAXSubmit(form, container);
256}
257
258TForm.prototype.onCheckRequiredValues = function(form) 
259{
260    var required = explodeList(form.getAttribute("required"));
261    var values = getValuesInElement(form);
262    
263    var ret = true;
264    var missing = [];
265
266    for (var i = 0 ; i < required.length ; i++)
267    {
268        var nameP = required[i].split("[");
269        for (var ii = 1 ; ii < nameP.length ; ii++)
270            nameP[ii] = substr(nameP[ii], 0, nameP[ii].length-1);
271        
272        var value = values;
273        for (var ii = 0 ; ii < nameP.length ; ii++)
274        {
275            value = value[nameP[ii]];
276        }
277
278        if (!value || value === "false")
279        {
280            missing.push(required[i]);
281            ret = false;
282        }
283    }
284    
285    for (var i = 0 ; i < required.length ; i++)
286    {
287        var Component = getObjectByParams({"name":required[i]}, form);
288        if (Component)
289        {
290            Component.removeClassName("_ComponentFormError");
291        }
292    }
293
294    if (!ret)
295    {
296        for (var i = 0 ; i < missing.length ; i++)
297        {
298            var Component = getObjectByParams({"name":missing[i]}, form);
299            if (Component)
300            {
301                Component.addClassName("_ComponentFormError");
302                
303                if (!Component.__formOnChange)
304                {
305                    Component.__formOnChange = true;
306                    Component.extendMethod("onChange", function(){
307                        if(this.getValue() && this.getValue() !== "false")
308                        {
309                            this.removeClassName("_ComponentFormError");
310                        }
311                    });
312                }
313            }
314            
315        }
316        _alert("Zadejte všechny povinné údaje");
317    }
318    
319    if (missing.length)
320    {
321        var Object = getObjectByParams({"name":missing[0]}, form);
322        if (Object)
323        {
324            if (Object.container && Object.container.style.display != "none")
325                scrollToElement(Object.container, 100);
326            else
327                scrollToElement(Object.element, 100);
328        }
329    }
330
331    return(ret);
332}
333
334TForm.prototype.onCheckValues = function(form) 
335{
336    // CELE TOTO volat pres AJAX na nejakou udalost - onCheckFormValues .... (bacha ale na udalosti z modulu forms)
337    // required fields jsou ok, ale co s jinymi podminkami...
338    
339    var required = explodeList(form.getAttribute("required"));
340    var values = getValuesInElement(form);
341    
342    var ret = true;
343    var missing = [];
344
345    /*
346    if (form.getAttribute("check") && typeof(window[form.getAttribute("check")]) == "function")
347    {
348        var ret2 = window[form.getAttribute("check")](values);
349        
350        if (ret2)
351        {
352            _alert(ret2);
353            ret = false;
354        }
355        
356    }
357
358    for (var i = 0 ; i < required.length ; i++)
359    {
360        if (!values[required[i]])
361        {
362            missing.push(required[i]);
363            ret = false;
364        }
365    }
366    
367    for (var i = 0 ; i < required.length ; i++)
368    {
369        var Object = getObjectByParams({"name":required[i]}, form);
370        if (Object)
371        {
372            removeClassName(Object.container, "_ComponentFormError");
373        }
374    }
375
376    if (!ret)
377    {
378        for (var i = 0 ; i < missing.length ; i++)
379        {
380            //dump(missing[i]);
381            //dump(getObjectByParams({"name":missing[i]}, form));
382            var Object = getObjectByParams({"name":missing[i]}, form);
383            if (Object)
384            {
385                addClassName(Object.container, "_ComponentFormError");
386                //dump(Object);
387            }
388            
389        }
390        _alert("Zadejte všechny povinné údaje");
391        //dump(bad);        
392    }
393    */
394    
395    
396    return(ret);
397}
398
399TForm.prototype.onAJAXSubmit = function(form, container) 
400{
401    if (typeof(container) != "undefined")
402        container = getElement(container);
403
404    if (!container && form.getAttribute("ajax"))
405    {
406        container = getElement(form.getAttribute("ajax"));
407        if (!container)
408            container = form;
409    }
410
411    if (container)
412    {
413        var url = form.action;
414        url = explodeLink(url);
415        var values = getValuesInElement(form);
416        for (var i in values)
417        {
418            url["params"] = array_merge(url["params"], values);
419        }
420        url["params"]["ajaxViewType"] = "vtBody";
421        url["params"]["returnType"] = "rtHTML";
422        url = implodeLink(url);
423
424        AJAX.open(url, function(html){
425            setHtml(container, html);
426        });
427    }
428    //dump(form);
429    return(false);
430}
431
432// 2025 obcekastruji
433TForm.prototype.onAJAXCheckValues = function(form) 
434{
435    for (var id in form.objects)
436    {
437        var Component = form.objects[id];
438        Component.removeClassName("_ComponentFormError");
439    }
440
441    var values = getValuesInElement(form);
442    values["ajaxCheck"] = "true";
443    
444    var linkInfo = explodeLink(window.location.href);
445    linkInfo["params"] = array_merge(linkInfo["params"], values);
446    var url = implodeLink(linkInfo);
447    
448    var ret = true;
449    
450    var errors = JSON.decode(AJAX.open(url));
451    var errorsT = [];
452    for (var ids in errors)
453    {
454        var error = errors[ids];
455        ids = explodeList(ids);
456        
457        for (var i = 0 ; i < ids.length ; i++)
458        {
459            var id = ids[i];
460            var Component = form.objects[id];
461            if (Component)
462            {
463                Component.addClassName("_ComponentFormError");
464                    
465                if (!Component.__formOnChange)
466                {
467                    Component.__formOnChange = true;
468                    Component.extendMethod("onChange", function(){
469                        if(this.getValue() && this.getValue() !== "false")
470                        {
471                            this.removeClassName("_ComponentFormError");
472                        }
473                    });
474                }
475            }
476            //else
477            //    dump(id);
478        }
479        errorsT.push(error);        
480    }
481    //dump(errors);
482    
483    if (errorsT.length)
484    {
485        _alert("<div class='_FormErrors'>"+errorsT.join("<br>")+"</div>");
486        ret = false;
487    }
488
489    return(ret);
490}
491
492Form = new TForm();

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.