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.