1(function( $, i18n ) { 2 3 var ActuaPublicForm = $.fn.ActuaPublicForm = {}; 4 ActuaPublicForm.vars = actua_public_vars; 5 ActuaPublicForm.loading = {background:"rgba(54,70,93,0.95)", imageColor:"#FFFFFF", size:30, minSize:30, maxSize:30}; 6 ActuaPublicForm.form_id = 0; 7 ActuaPublicForm.data = {}; 8 ActuaPublicForm.autofill = false; 9 ActuaPublicForm.autofill_method = false; 10 11 ActuaPublicForm.app = { 12 13 init: function(){ 14 15 if($("#actuaFormContainer").length){ 16 17 ActuaPublicForm.form_id = $("#actuaFormContainer").data('form_id'); 18 ActuaPublicForm.app.enableForm(); 19 20 } 21 22 }, 23 enableForm: function(){ 24 25 $.ajax({ 26 url: ActuaPublicForm.vars.site_url + '/actua_public_form/display_form/', 27 dataType:"html", 28 type:'POST', 29 data:{'form_id':ActuaPublicForm.form_id}, 30 beforeSend: function(){ 31 32 $('#actuaFormContainer').LoadingOverlay('show',ActuaPublicForm.loading); 33 34 }, 35 success: function(response){ 36 37 $("#actuaForm").html(response); 38 ActuaPublicForm.app.enableFormEvents(); 39 40 }, 41 error: function(){ 42 $('#actuaFormContainer').LoadingOverlay('hide',ActuaPublicForm.loading); 43 } 44 }).done(function(){ 45 $('#actuaFormContainer').LoadingOverlay('hide',ActuaPublicForm.loading); 46 }); 47 48 }, 49 enableFormEvents: function(){ 50 51 if($('.actua_form_range_input').length){ 52 $('.actua_form_range_input').asRange({ 53 range: false, 54 tip: { 55 active: 'onMove' 56 } 57 }); 58 } 59 60 if($('#actuaFormContainer .col.autofill').length){ 61 ActuaPublicForm.autofill = true; 62 if($('#actuaFormContainer .col.autofill.in-session').length){ 63 ActuaPublicForm.autofill_method = 'session'; 64 }else{ 65 ActuaPublicForm.autofill_method = 'local'; 66 } 67 } 68 69 $('#actua-form-submit-btn').click(function(event){ 70 event.preventDefault(); 71 ActuaPublicForm.app.submitForm(); 72 }); 73 74 ActuaPublicForm.app.enableAutofill(); 75 ActuaPublicForm.app.loadAutofill(); 76 77 }, 78 enableAutofill: function(){ 79 if(ActuaPublicForm.autofill == true){ 80 $('#actuaForm input[type=date], #actuaForm select, #actuaForm textarea, #actuaForm input[type=text], #actuaForm input[type=email], #actuaForm input[type=number]').change(function(){ 81 var key = $(this).attr('id'); 82 var value = $(this).val(); 83 if(ActuaPublicForm.autofill_method == 'session'){ 84 sessionStorage.setItem(key, value); 85 }else{ 86 localStorage.setItem(key, value); 87 } 88 }); 89 $('#actuaForm input[type=checkbox]').change(function(){ 90 var key = $(this).attr('id'); 91 if($(this).is(':checked')){ 92 var value = 'check'; 93 }else{ 94 var value = 'uncheck'; 95 } 96 if(ActuaPublicForm.autofill_method == 'session'){ 97 sessionStorage.setItem(key, value); 98 }else{ 99 localStorage.setItem(key, value); 100 } 101 }); 102 $('#actuaForm input[type=radio]').change(function(){ 103 var key = $(this).attr('name'); 104 if($(this).is(':checked')){ 105 var value = $(this).val(); 106 if(ActuaPublicForm.autofill_method == 'session'){ 107 sessionStorage.setItem(key, value); 108 }else{ 109 localStorage.setItem(key, value); 110 } 111 } 112 }); 113 $('#actuaForm .actua_form_range_input').on('asRange::change', function (e) { 114 var key = $(this).attr('id'); 115 var value = $(this).val(); 116 if(ActuaPublicForm.autofill_method == 'session'){ 117 sessionStorage.setItem(key, value); 118 }else{ 119 localStorage.setItem(key, value); 120 } 121 }); 122 } 123 }, 124 loadAutofill:function(){ 125 if(ActuaPublicForm.autofill == true){ 126 $('#actuaForm input[type=date], #actuaForm select, #actuaForm textarea, #actuaForm input[type=text], #actuaForm input[type=email], #actuaForm input[type=number]').each(function(index, element) { 127 var key = $(this).attr('id'); 128 if(ActuaPublicForm.autofill_method == 'session'){ 129 if (sessionStorage.getItem(key)) { 130 $(this).val(sessionStorage.getItem(key)); 131 } 132 }else{ 133 if (localStorage.getItem(key)) { 134 $(this).val(localStorage.getItem(key)); 135 } 136 } 137 }); 138 $('#actuaForm input[type=checkbox]').each(function(index, element) { 139 var key = $(this).attr('id'); 140 if(ActuaPublicForm.autofill_method == 'session'){ 141 if (sessionStorage.getItem(key)) { 142 if(sessionStorage.getItem(key) == 'check'){ 143 $(this).prop( "checked", true); 144 }else{ 145 $(this).prop( "checked", false); 146 } 147 } 148 }else{ 149 if (localStorage.getItem(key)) { 150 if(localStorage.getItem(key) == 'check'){ 151 $(this).prop( "checked", true); 152 }else{ 153 $(this).prop( "checked", false); 154 } 155 } 156 } 157 }); 158 $('#actuaForm input[type=radio]').each(function(index, element) { 159 var key = $(this).attr('name'); 160 if(ActuaPublicForm.autofill_method == 'session'){ 161 if (sessionStorage.getItem(key)) { 162 if(sessionStorage.getItem(key) == $(this).val()){ 163 $(this).prop( "checked", true); 164 } 165 } 166 }else{ 167 if (localStorage.getItem(key)) { 168 if(localStorage.getItem(key) == $(this).val()){ 169 $(this).prop( "checked", true); 170 } 171 } 172 } 173 }); 174 $('#actuaForm .actua_form_range_input').each(function(index, element) { 175 var key = $(this).attr('id'); 176 if(ActuaPublicForm.autofill_method == 'session'){ 177 if (sessionStorage.getItem(key)) { 178 $(this).asRange('set',sessionStorage.getItem(key)); 179 } 180 }else{ 181 if (localStorage.getItem(key)) { 182 $(this).asRange('set',localStorage.getItem(key)); 183 } 184 } 185 }); 186 } 187 }, 188 submitForm: function() { 189 190 if(ActuaPublicForm.app.validateForm()){ 191 192 ActuaPublicForm.app.recolectFormData(); 193 194 $.ajax({
195 url: ActuaPublicForm.vars.site_url + '/actua_public_form/process_form/', 196 dataType:"json", 197 type:'POST', 198 data:{'form_id':ActuaPublicForm.form_id,'data':ActuaPublicForm.data}, 199 beforeSend: function(){ 200 201 $('#actuaFormContainer').LoadingOverlay('show',ActuaPublicForm.loading); 202 203 }, 204 success: function(response){ 205 206 if(response.success == 'toast_msg'){ 207 208 toastr.error(response.msg); 209 210 }else if(response.success == 'html_msg'){ 211 if(ActuaPublicForm.autofill == true){ 212 if(response.clean_stored == 'clean'){ 213 sessionStorage.clear(); 214 localStorage.clear(); 215 } 216 } 217 $("#actuaForm").html(response.msg); 218 $('html,body').animate({scrollTop: $('#actuaForm').offset().top - 300},1000); 219 } 220 221 }, 222 error: function(){ 223 $('#actuaFormContainer').LoadingOverlay('hide',ActuaPublicForm.loading); 224 } 225 }).done(function(){ 226 $('#actuaFormContainer').LoadingOverlay('hide',ActuaPublicForm.loading); 227 }); 228 229 }else{ 230 231 $('html,body').animate({scrollTop: $('.is-invalid').first().offset().top - 300},1000); 232 toastr.error(ActuaPublicForm.vars.texts.something_went_wrong); 233 234 } 235 236 }, 237 recolectFormData: function(){ 238 239 var formData = []; 240 241 $('#actuaForm input[type=date], #actuaForm select, #actuaForm textarea, #actuaForm input[type=text], #actuaForm input[type=email], #actuaForm input[type=number]').each(function(index, element) { 242 var name = $(this).attr('id'); 243 var value = $(this).val(); 244 var current = {'name':name,'value':value}; 245 formData.push(current); 246 }); 247 248 var distinctInputNames = []; 249 $('#actuaForm .form-check-input').each(function(index, element) { 250 var name = $(this).attr('name'); 251 if(distinctInputNames.indexOf(name) == -1){ 252 distinctInputNames.push(name); 253 } 254 }); 255 256 $(distinctInputNames).each(function(index, element) { 257 var values = []; 258 $('input[name='+element+']:checked').each(function(index, element) { 259 values[index] = $(this).val(); 260 }); 261 var current = {'name':element,'value':values}; 262 formData.push(current); 263 }); 264 265 ActuaPublicForm.data = formData; 266 267 }, 268 validateForm: function() { 269 270 $('#actuaForm .is-invalid').removeClass('is-invalid'); 271 $('#actuaForm .invalid-feedback').empty(); 272 273 var form_validated = true; 274 275 $('#actuaForm input[type=text]').each(function(index, element) { 276 var value = $(this).val(); 277 var required = $(this).attr('required'); 278 var maxlength = parseInt($(this).attr('maxlength')); 279 if(required == 'required' && value == ''){ 280 $(this).addClass('is-invalid'); 281 form_validated = false; 282 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.field_required); 283 } 284 if(value != ''){ 285 if(!isNaN(maxlength) && value.length > maxlength){ 286 $(this).addClass('is-invalid'); 287 form_validated = false; 288 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.maxlength_error.replace('%s',maxlength)); 289 } 290 if($(this).hasClass('actua_form_url_validation')){ 291 if(!ActuaPublicForm.app.validateURL(value)){ 292 $(this).addClass('is-invalid'); 293 form_validated = false; 294 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.valid_url_required); 295 } 296 } 297 } 298 }); 299 300 $('#actuaForm input[type=email]').each(function(index, element) { 301 var value = $(this).val(); 302 var required = $(this).attr('required'); 303 var maxlength = parseInt($(this).attr('maxlength')); 304 if(required == 'required' && value == ''){ 305 $(this).addClass('is-invalid'); 306 form_validated = false; 307 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.field_required); 308 } 309 if(value != ''){ 310 if(!isNaN(maxlength) && value.length > maxlength){ 311 $(this).addClass('is-invalid'); 312 form_validated = false; 313 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.maxlength_error.replace('%s',maxlength)); 314 } 315 if(!ActuaPublicForm.app.validateEmail(value)){ 316 $(this).addClass('is-invalid'); 317 form_validated = false; 318 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.valid_email_required); 319 } 320 } 321 }); 322 323 $('#actuaForm input[type=number]:not(.actua_form_range_input)').each(function(index, element) { 324 var value = $(this).val(); 325 var required = $(this).attr('required'); 326 var maxlength = parseInt($(this).attr('maxlength')); 327 var imin = parseInt($(this).attr('min')); 328 var imax = parseInt($(this).attr('max')); 329 if(required == 'required' && value == ''){ 330 $(this).addClass('is-invalid'); 331 form_validated = false; 332 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.field_required); 333 } 334 if(value != ''){ 335 if(!isNaN(maxlength) && value.length > maxlength){ 336 $(this).addClass('is-invalid'); 337 form_validated = false; 338 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.maxlength_error.replace('%s',maxlength)); 339 } 340 if(!isNaN(imin) && value < imin){ 341 $(this).addClass('is-invalid'); 342 form_validated = false; 343 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.min_error.replace('%s',imin)); 344 } 345 if(!isNaN(imax) && value > imax){ 346 $(this).addClass('is-invalid'); 347 form_validated = false; 348 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.max_error.replace('%s',imax)); 349 } 350 } 351 }); 352 353 $('#actuaForm select').each(function(index, element) { 354 var value = $(this).val(); 355 var required = $(this).attr('required'); 356 if(required == 'required' && value == null){ 357 $(this).addClass('is-invalid'); 358 form_validated = false; 359 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.field_required); 360 } 361 }); 362 363 $('#actuaForm textarea').each(function(index, element) { 364 var value = $(this).val(); 365 var required = $(this).attr('required'); 366 if(required == 'required' && value == ''){ 367 $(this).addClass('is-invalid'); 368 form_validated = false; 369 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.field_required); 370 } 371 }); 372 373 $('#actuaForm input[type=date]').each(function(index, element) { 374 var value = $(this).val(); 375 var required = $(this).attr('required'); 376 if(required == 'required' && value == ''){ 377 $(this).addClass('is-invalid'); 378 form_validated = false; 379 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.field_required); 380 } 381 if(value != '' && !ActuaPublicForm.app.validateDate(value)){ 382 $(this).addClass('is-invalid'); 383 form_validated = false; 384 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.valid_date_required); 385 } 386 if($(this).attr('min_date')){ 387 var inputDate = new Date(value); 388 var minDate = new Date($(this).attr('min_date')); 389 if(inputDate < minDate){ 390 var limit_date = $.fn.ActuaPublic.app.dateFormat($(this).attr('min_date'),"DD/MM/YYYY"); 391 form_validated = false; 392 $(this).addClass('is-invalid'); 393 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.minimum_date_available + " " + limit_date); 394 } 395 } 396 if($(this).attr('max_date')){ 397 var inputDate = new Date(value); 398 var maxDate = new Date($(this).attr('max_date')); 399 if(inputDate > maxDate){ 400 var limit_date = $.fn.ActuaPublic.app.dateFormat($(this).attr('max_date'),"DD/MM/YYYY"); 401 form_validated = false; 402 $(this).addClass('is-invalid'); 403 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.maximum_date_available + " " + limit_date); 404 } 405 } 406 }); 407 408 $('#actuaForm .group-required').each(function(index, element) { 409 var inputs = $(this).find('.form-check-input'); 410 var has_checked = false; 411 inputs.each(function(index, element) { 412 if($(this).is(':checked')){ 413 has_checked = true; 414 } 415 }); 416 if(!has_checked){ 417 $(this).addClass('is-invalid'); 418 form_validated = false; 419 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.field_required); 420 } 421 }); 422 423 $('#actuaForm .form-group').each(function(index, element) { 424 if($(this).attr('data-maxcheckable') && $(this).attr('data-mincheckable')){ 425 if($(this).data('maxcheckable') != 'DEFAULT'){ 426 var lim = $(this).data('maxcheckable'); 427 var inputs = $(this).find('.form-check-input'); 428 var conta = 0; 429 inputs.each(function(index, element) { 430 if($(this).is(':checked')){ 431 conta++; 432 } 433 });
434 if(conta > lim){ 435 $(this).addClass('is-invalid'); 436 form_validated = false; 437 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.max_checkable_error.replace('%s',lim)); 438 439 } 440 } 441 if($(this).data('mincheckable') != 'DEFAULT'){ 442 var lim = $(this).data('mincheckable'); 443 var inputs = $(this).find('.form-check-input'); 444 var conta = 0; 445 inputs.each(function(index, element) { 446 if($(this).is(':checked')){ 447 conta++; 448 } 449 }); 450 if(conta < lim){ 451 $(this).addClass('is-invalid'); 452 form_validated = false; 453 $(this).closest('.form-group').find('div.invalid-feedback').text(ActuaPublicForm.vars.texts.min_checkable_error.replace('%s',lim)); 454 } 455 } 456 } 457 }); 458 459 if(form_validated){ 460 $('#actuaForm .form-pattern').each(function(index, element) { 461 var field_id = $(this).data('field_id'); 462 var field_val = $(this).val(); 463 var current_input = $(this); 464 if(field_val != ''){ 465 $.ajax({
466 url: ActuaPublicForm.vars.site_url + '/actua_public_form/check_pattern/', 467 dataType:"json", 468 async:false, 469 type:'POST', 470 data:{'field_id':field_id,'field_val':field_val}, 471 success: function(result){ 472 473 if(result.success == 'error'){ 474 $(current_input).addClass('is-invalid'); 475 form_validated = false; 476 $(current_input).closest('.form-group').find('div.invalid-feedback').text(result.msg); 477 } 478 479 }, 480 }); 481 } 482 }); 483 } 484 485 return form_validated; 486 487 }, 488 validateDate: function(str) { 489 490 var pattern = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/; 491 return pattern.test(str); 492 493 }, 494 validateEmail: function(str) { 495 496 var pattern = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i; 497 return pattern.test(str); 498 499 }, 500 validateURL: function(str) { 501 502 var pattern = /(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/; 503 return pattern.test(str); 504 505 } 506 } 507 508 jQuery(document).ready(function($) { 509 510 ActuaPublicForm.app.init(); 511 512 }); 513 514 jQuery( document ).ajaxComplete(function(event, xhr, settings) { 515 516 let url = new URL(settings.url); 517 if(url.pathname == '/actua_public_booking/display_tickets/'){ 518 ActuaPublicForm.app.init(); 519 $('#actuaFormContainer').closest('.container').addClass('notice notice-warning'); 520 } 521 522 }); 523 524})( jQuery, wp.i18n );
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.