1(function ($) { 2 "use strict"; 3 jQuery(document).ready(function ($) { 4 jQuery(document).on('change keyup', '.gfield input, .gfield select, .gfield textarea', function (event) { 5 gf_raw_input_change(event, this); 6 }); 7 $("body").on('change', ".container-repeater-field .gform-grid-col--size-auto", function (e) { 8 var self = $(this); 9 var value = $(this).val(); 10 var input_ids = $(this).attr("name"); 11 if (input_ids === undefined) { 12 return; 13 } 14 input_ids = input_ids.split("_"); 15 var input_id = input_ids[1]; 16 var form_ids = self.closest("form").attr("id"); 17 form_ids = form_ids.split("_"); 18 var form_id = form_ids[1]; 19 var field_ids = input_ids[1].split("."); 20 if (field_ids[1] == 2) { 21 return; 22 } 23 var field_id = field_ids[0]; 24 const obj = { 25 [input_id]: value, 26 [field_id + ".2"]: "" 27 } 28 var $nextSelect = $(this).closest(".ginput_container").find("#input_" + form_id + "_" + field_id + "_2_container select") 29 $.post(gformChainedSelectData.ajaxUrl, { 30 action: 'gform_get_next_chained_select_choices', 31 input_id: input_id, 32 form_id: form_id, 33 field_id: field_id, 34 value: obj, 35 nonce: gformChainedSelectData.nonce 36 }, function (response) { 37 if (!response) { 38 return; 39 } 40 var choices = $.parseJSON(response), 41 optionsMarkup = ''; 42 $nextSelect.find('option').remove(); 43 if (choices.length <= 0) { 44 //self.resetSelects( $select, true ); 45 } else { 46 var hasSelectedChoice = false; 47 $.each(choices, function (i, choice) { 48 var selected = choice.isSelected ? 'selected="selected"' : ''; 49 if (selected) { 50 hasSelectedChoice = true; 51 } 52 optionsMarkup += '<option value="' + choice.value + '"' + selected + '>' + choice.text + '</option>'; 53 }); 54 $nextSelect.show().append(optionsMarkup); 55 // the placeholder will be selected by default, rather than removing it and re-adding, just force the noOptions option to be selected 56 if (choices[0].noOptions) { 57 var $noOption = $nextSelect.find('option:last-child').clone(), 58 $nextSelects = $nextSelect.parents('span').nextAll().find('select'); 59 $nextSelects.append($noOption); 60 $nextSelects.add($nextSelect) 61 .addClass('gf_no_options') 62 .find('option:last-child').prop('selected', true); 63 //self.toggleCompleted( true ); 64 } else { 65 $nextSelect 66 .removeClass('gf_no_options') 67 //.prop( 'disabled', false ).show(); 68 .toggleSelect(false, self); 69 if (hasSelectedChoice) { 70 $nextSelect.change(); 71 } 72 } 73 } 74 //self.resizeSelects(); 75 }); 76 }) 77 gform.addFilter('gform_is_value_match', function (isMatch, formId, rule) { 78 var check_repeater = rule['fieldId'].toString().split("-"); 79 if (check_repeater.length < 2) { 80 return isMatch; 81 } else { 82 var $ = jQuery, 83 inputId = rule['fieldId'], 84 baseInputId = check_repeater[0], 85 randId = check_repeater[1], 86 baseFieldId = parseInt(baseInputId, 10), 87 inputIndex = gformExtractInputIndex(baseInputId), 88 isInputSpecific = inputIndex !== false, 89 $inputs; 90 if (isInputSpecific) { 91 $inputs = $('#input_{0}_{1}_{2}-{3}, #choice_{0}_{1}_{2}-{3}'.gformFormat(formId, baseFieldId, inputIndex, randId)); 92 } else { 93 $inputs = $('input[id="input_{0}_{1}-{2}"], input[id^="input_{0}_{1}_"][id$="-{2}"], input[id^="choice_{0}_{1}_"][id$="-{2}"], select#input_{0}_{1}-{2}, textarea#input_{0}_{1}-{2}'.gformFormat(formId, baseFieldId, randId)); 94 } 95 var isCheckable = $.inArray($inputs.attr('type'), ['checkbox', 'radio']) !== -1; 96 var isMatch = isCheckable ? gf_is_match_checkable($inputs, rule, formId, inputId) : gf_is_match_default($inputs.eq(0), rule, formId, inputId); 97 return isMatch; 98 } 99 }); 100 gform.addFilter('gform_field_meta_raw_input_change', function (form, input, event) { 101 var htmlId = input.attr('id'); 102 var fieldId = yeeaddons_gf_get_input_id_by_html_id(htmlId); 103 var formId = gf_get_form_id_by_html_id(htmlId); 104 if (formId !== undefined) { 105 var check_ids = htmlId.split("-"); 106 if (check_ids.length > 1) { 107 form = { fieldId: fieldId, formId: formId }; 108 } 109 } 110 return form; 111 }); 112 function yeeaddons_gf_get_input_id_by_html_id(htmlId) { 113 var ids = htmlId ? htmlId.split('_') : []; 114 if (ids.length >= 3) { 115 var type = ids[0]; 116 if (type === 'choice') { 117 var fieldId = ids[2]; 118 var randSuffix = ''; 119 var lastPart = ids[ids.length - 1]; 120 if (lastPart && lastPart.indexOf('-') !== -1) { 121 var parts = lastPart.split('-'); 122 randSuffix = '-' + parts[1]; 123 } 124 return fieldId + randSuffix; 125 } else if (type === 'input') { 126 if (ids.length === 3) { 127 return ids[2]; 128 } else if (ids.length >= 4) { 129 var fieldId = ids[2]; 130 var indexPart = ids[3]; 131 return fieldId + '.' + indexPart; 132 } 133 } 134 } 135 return htmlId; 136 } 137 gform.addAction('gform_input_change', function (elem, formId, fieldId) { 138 if (!window.gf_form_conditional_logic) { 139 return; 140 } 141 var dependentFieldIds = rgars(gf_form_conditional_logic, [formId, 'fields', (fieldId)].join('/')); 142 if (dependentFieldIds) { 143 gf_apply_rules(formId, dependentFieldIds); 144 } 145 }, 10); 146 get_repeater_data_name(); 147 var names_upload = []; 148 jQuery(document).on("gform_page_loaded", function (e, form_id) { 149 //jQuery(".gform-datepicker").datepicker('destroy'); 150 get_repeater_data_name(); 151 }); 152 jQuery(document).on('gform_post_render', function (event, form_id, current_page) { 153 //jQuery(".gform-datepicker").datepicker('destroy'); 154 get_repeater_data_name(); 155 }); 156 gform.addFilter('gform_file_upload_markup', function (html, file, up, strings, imagesUrl, response) { 157 var formId = up.settings.multipart_params.form_id; 158 var fieldId = up.settings.multipart_params.field_id; 159 var container = $('#' + file.id).closest(".container-repeater-field"); 160 var id_rand = container.data("id"); 161 var nameAttr = 'gform_multifile_upload_' + formId + '_' + fieldId + '__' + id_rand; 162 var repeater = container.find('input[name="' + nameAttr + '"]'); 163 if (repeater.length === 0) { 164 repeater = container.find(".gform_multifile_upload"); 165 } 166 var val_repeater = repeater.val(); 167 var link = response.data.uploaded_filename; 168 if (val_repeater == "") { 169 repeater.val(link) 170 } else { 171 repeater.val(val_repeater + ", " + link); 172 } 173 return html.replace("onclick", "data-onclick");; 174 }); 175 if (window.gform && typeof window.gform.addFilter === 'function') { 176 window.gform.addFilter('gform_datepicker_options_pre_init', function (options, formId, fieldId) { 177 if (typeof fieldId === 'string' && fieldId.indexOf('-') > -1) { 178 var originalFieldId = fieldId.split('-')[0]; 179 return window.gform.applyFilters('gform_datepicker_options_pre_init', options, formId, originalFieldId); 180 } 181 return options; 182 }, 9); 183 } 184 var repeater_fields_htmls = {}; 185 //condition out repeater out 186 gform.addAction('gform_post_conditional_logic_field_action1', function (formId, action, targetId, defaultValues, isInit) { 187 if (targetId != "") { 188 var dat_select = targetId.replace("#", '');
189 $(".gf-field-repeater-data-html").each(function () { 190 var html_data = $(this).val(); 191 html_data = $(html_data); 192 if (action == "hide") { 193 $('[data-js-reload="' + dat_select + '"]', html_data).css("display", "none"); 194 } else { 195 $('[data-js-reload="' + dat_select + '"]', html_data).css("display", "block"); 196 } 197 $(this).val("<div class='container-repeater-field'>" + html_data.html() + '</div>'); 198 }) 199 if (action == "hide") { 200 $('[data-js-reload="' + dat_select + '"]').css("display", "none"); 201 } else { 202 $('[data-js-reload="' + dat_select + '"]').css("display", "block"); 203 } 204 } 205 }); 206 $("body").on("click", ".gform_delete_file", function (e) { 207 e.preventDefault(); 208 var str = $(this).data("onclick"); 209 const regex = /\((.*?)\)/gm; 210 var m = ""; 211 var a = ""; 212 while ((m = regex.exec(str)) !== null) { 213 // This is necessary to avoid infinite loops with zero-width matches 214 if (m.index === regex.lastIndex) { 215 regex.lastIndex++; 216 } 217 a = m[1].split(',');; 218 } 219 gformDeleteUploadedFileRepeater(a[0], a[1], $(this)); 220 return; 221 }) 222 function gformDeleteUploadedFileRepeater(formId, fieldId, deleteButton) { 223 if (deleteButton.closest(".repeater-field-warp-item-data").length > 0) { 224 var rand_id = deleteButton.closest(".container-repeater-field").data("id"); 225 var fileIndex = jQuery(deleteButton).parent().index(); 226 var parent = deleteButton.closest(".container-repeater-field").find("#field_" + formId + "_" + fieldId + "-" + rand_id); 227 if (parent.length === 0) { 228 parent = jQuery("#field_" + formId + "_" + fieldId); 229 } 230 parent.find('input[type="file"],.validation_message,#extensions_message_' + formId + '_' + fieldId).removeClass("gform_hidden"); 231 parent.find(".ginput_post_image_file").show(); 232 //parent.find("input[type=\"text\"]").val(''); 233 var filesJson = jQuery('#gform_uploaded_files_' + formId).val(); 234 if (filesJson) { 235 var files = jQuery.secureEvalJSON(filesJson); 236 if (files) { 237 var inputName = "input_" + fieldId; 238 var full_name = deleteButton.closest(".container-repeater-field").find('input[name="gform_multifile_upload_' + formId + '_' + fieldId + '__' + rand_id + '"]').val(); 239 if (full_name == "") { 240 full_name = []; 241 } else { 242 full_name = full_name.split(","); 243 } 244 var $multfile = parent.find("#gform_multifile_upload_" + formId + "_" + fieldId + "__" + rand_id); 245 var remove_name = deleteButton.closest(".ginput_preview").find(".gfield_fileupload_filename").html(); 246 var index1 = full_name.indexOf(remove_name); 247 if (index1 !== -1) { 248 full_name.splice(index1, 1); 249 } 250 deleteButton.closest(".container-repeater-field").find('input[name="gform_multifile_upload_' + formId + '_' + fieldId + '__' + rand_id + '"]').val(full_name.join(",")); 251 deleteButton.closest(".ginput_preview").remove(); 252 if ($multfile.length > 0) { 253 files[inputName].splice(fileIndex, 1); 254 var settings = $multfile.data('settings'); 255 var max = settings.gf_vars.max_files; 256 jQuery("#" + settings.gf_vars.message_id + "__" + rand_id).html(''); 257 if (files[inputName].length < max) 258 gfMultiFileUploader.toggleDisabled(settings, false); 259 } else { 260 files[inputName] = null; 261 } 262 jQuery('#gform_uploaded_files_' + formId).val(jQuery.toJSON(files)); 263 } 264 } 265 } else { 266 var parent = jQuery("#field_" + formId + "_" + fieldId); 267 var fileIndex = jQuery(deleteButton).parent().index(); 268 deleteButton.closest(".ginput_preview").remove(); 269 //displaying single file upload field 270 parent.find('input[type="file"],.validation_message,#extensions_message_' + formId + '_' + fieldId).removeClass("gform_hidden"); 271 //displaying post image label 272 parent.find(".ginput_post_image_file").show(); 273 //clearing post image meta fields 274 parent.find("input[type=\"text\"]").val(''); 275 //removing file from uploaded meta 276 var filesJson = jQuery('#gform_uploaded_files_' + formId).val(); 277 if (filesJson) { 278 var files = jQuery.secureEvalJSON(filesJson); 279 if (files) { 280 var inputName = "input_" + fieldId; 281 var $multfile = parent.find("#gform_multifile_upload_" + formId + "_" + fieldId); 282 if ($multfile.length > 0) { 283 files[inputName].splice(fileIndex, 1); 284 var settings = $multfile.data('settings'); 285 var max = settings.gf_vars.max_files; 286 jQuery("#" + settings.gf_vars.message_id).html(''); 287 if (files[inputName].length < max) 288 gfMultiFileUploader.toggleDisabled(settings, false); 289 } else { 290 files[inputName] = null; 291 } 292 jQuery('#gform_uploaded_files_' + formId).val(jQuery.toJSON(files)); 293 } 294 } 295 } 296 } 297 var input_ids = []; 298 function change_name_and_ids(item, field_end = null, key = null) { 299 if (key == null) { 300 var id_rand = Math.floor(Math.random() * 10000); 301 } else { 302 var id_rand = key; 303 } 304 var datas = JSON.parse(field_end.find(".gf-field-repeater-data").val()); 305 var datas_ids = datas.id; 306 datas_ids.push(id_rand); 307 datas.id = datas_ids; 308 field_end.find(".gf-field-repeater-data").val(JSON.stringify(datas)); 309 item = $(item); 310 item.attr("data-id", id_rand); 311 $(".gfield_visibility_visible", item).each(function () { 312 var id = $(this).attr("id"); 313 $(this).attr("id", id + "-" + id_rand); 314 $(this).attr("data-js-reload", id + "-" + id_rand); 315 }) 316 $(".gform_fileupload_multifile", item).each(function () { 317 var id = $(this).attr("id"); 318 var container_item = $(this).closest(".gfield gfield--type-fileupload"); 319 var settings = $(this).attr("data-settings"); 320 settings = jQuery.parseJSON(settings); 321 $.each(settings, function (index, value) { 322 switch (index) { 323 case "browse_button": 324 case "container": 325 case "drop_element": 326 case "filelist": 327 settings[index] = value + "__" + id_rand; 328 $("#" + value, item).attr("id", value + "__" + id_rand); 329 break; 330 case "multipart_params": 331 //settings["multipart_params"]["field_id"] = value.field_id + "__"+id_rand; 332 break; 333 } 334 }); 335 item.append('<input type="hidden" name="' + id + '" class="gform_multifile_upload" />'); 336 $(this).attr("id", id + "__" + id_rand); 337 $(this).attr("data-settings", JSON.stringify(settings)); 338 names_upload.push(id + "__" + id_rand); 339 }) 340 $("input", item).each(function () { 341 var name = $(this).attr("name"); 342 if (typeof name !== 'string' || name == "MAX_FILE_SIZE") { 343 return; 344 } 345 var type = $(this).attr("type"); 346 var id = $(this).attr("id"); 347 input_ids.push(id); 348 if (name != "" && name.endsWith('[]')) { 349 name = name.replace(/\[\]$/, ''); 350 $(this).attr("name", name + "__" + id_rand + "[]"); 351 } else { 352 $(this).attr("name", name + "__" + id_rand); 353 } 354 $(this).attr("id", id + "-" + id_rand); 355 if ($(this).hasClass('gform-datepicker') || $(this).hasClass('datepicker')) { 356 $(this).removeAttr('data-initialized').removeData('initialized').removeClass('hasDatepicker'); 357 if (this.dataset) { 358 delete this.dataset.initialized; 359 delete this.dataset.toggleClickedBeforeInit; 360 } 361 var $toggleBtn = $(this).siblings('.gform-datepicker-toggle'); 362 if (!$toggleBtn.length) { 363 $toggleBtn = $(this).closest('.ginput_container_date').find('.gform-datepicker-toggle'); 364 } 365 if ($toggleBtn.length) { 366 $toggleBtn.attr('id', 'datepicker_toggle_' + id + '-' + id_rand); 367 $toggleBtn.attr('aria-controls', id + '-' + id_rand); 368 } 369 var $kbd = $(this).siblings('#keyboardHint_' + id); 370 if (!$kbd.length) { 371 $kbd = $(this).closest('.ginput_container_date').find('#keyboardHint_' + id); 372 } 373 if ($kbd.length) { 374 $kbd.attr('id', 'keyboardHint_' + id + '-' + id_rand); 375 } 376 } 377 var value_check = localStorage.getItem(id + "-" + id_rand); 378 if (type == "checkbox") { 379 $(this).closest("div").find("label").attr("for", id + "-" + id_rand); 380 if (value_check != null) { 381 $(this).prop("checked", true).attr("checked", "checked"); 382 } 383 } else if (type == "file") { 384 $(this).attr("id", id + "-" + id_rand); 385 } else if (type == "radio") { 386 $(this).attr("id", id + "-" + id_rand); 387 $(this).closest("div, li").find("label").attr("for", id + "-" + id_rand); 388 var value_check = localStorage.getItem(name + "__" + id_rand); 389 if (value_check != null) { 390 var old_check = $(this).val(); 391 if (old_check == value_check) { 392 $(this).prop("checked", true).attr("checked", "checked"); 393 } 394 } 395 } 396 else { 397 // ensure the field label's "for" attribute corresponds with the field's ID 398 $(this).closest("div").parent().find("label").attr("for", id + "-" + id_rand); 399 if (value_check != null) { 400 $(this).val(value_check); 401 } 402 } 403 }) 404 $("textarea", item).each(function () { 405 var name = $(this).attr("name"); 406 var id = $(this).attr("id"); 407 $(this).attr("name", name + "__" + id_rand); 408 $(this).attr("id", id + "-" + id_rand); 409 // ensure the field label's "for" attribute corresponds with the field's ID 410 $(this).closest("div").parent().find("label").attr("for", id + "-" + id_rand); 411 var value_check = localStorage.getItem(id + "-" + id_rand); 412 if (value_check != null) { 413 $(this).val(value_check); 414 } 415 }) 416 $("select", item).each(function () { 417 var name = $(this).attr("name"); 418 var id = $(this).attr("id"); 419 if (name.includes("[")) { 420 name = name.replace(/\[\]/g, ''); 421 $(this).attr("name", name + "__" + id_rand + "[]"); 422 } else { 423 $(this).attr("name", name + "__" + id_rand); 424 } 425 $(this).attr("id", id + "-" + id_rand); 426 // ensure the field label's "for" attribute corresponds with the field's ID 427 $(this).closest("div").parent().find("label").attr("for", id + "-" + id_rand); 428 var value_check = localStorage.getItem(id + "-" + id_rand); 429 if (value_check != null) { 430 $(this).val(value_check); 431 } 432 }) 433 return item; 434 } 435 function add_repeater_data(button, key = null) { 436 var start_field; 437 if (key == null) { 438 var key = Math.floor(Math.random() * 10000); 439 } 440 var item = $('<div class="repeater-field-item"><div class="repeater-field-header"></div><div class="repeater-field-content"></div></div>'); 441 button.prevAll().each(function (index) { 442 var item = $(this).clone(); 443 if (item.hasClass("gfield--type-repeater_start")) { 444 start_field = $(this); 445 return false; 446 } 447 }) 448 var html_field = get_repeater_data(button, key); 449 var header = get_repeater_data_header(start_field); 450 item.find(".repeater-field-header").append(header); 451 item.find(".repeater-field-content").append(html_field); 452 button.find(".repeater-field-warp-item").append(item); 453 item.find("input[type=radio][checked], input[type=checkbox][checked]").prop("checked", true); 454 update_repeater_count_header(); 455 $("input").trigger("done_load_repeater"); 456 var form_ids = button.attr("id").split("_"); 457 if (yeeaddons_gf_repeater_data.pro == "ok") { 458 var form_id = form_ids[1]; 459 if (window["gf_form_conditional_logic"] !== undefined) { 460 if (typeof window["gf_form_conditional_logic"][form_id] !== "undefined") { 461 var dependents = window["gf_form_conditional_logic"][form_id].dependents;
462 var dependents_new = dependents; 463 var dependents_new_id = []; 464 $.each(dependents, function (key_1, value) { 465 var datas_logic = []; 466 $.each(value, function (key_2, value_2) { 467 datas_logic.push(value_2 + "-" + key); 468 }) 469 if (key_1.search("-") < 0) { 470 dependents_new[key_1 + "-" + key] = datas_logic; 471 dependents_new_id.push(key_1 + "-" + key); 472 } else { 473 dependents_new_id.push(key_1); 474 } 475 }); 476 var fields = window["gf_form_conditional_logic"][form_id].fields; 477 var fields_new = fields; 478 $.each(fields, function (key_1, value) { 479 var datas_logic = []; 480 $.each(value, function (key_2, value_2) { 481 datas_logic.push(value_2 + "-" + key); 482 }) 483 if (key_1.search("-") < 0) { 484 fields_new[key_1 + "-" + key] = datas_logic; 485 } 486 }); 487 var logic = window["gf_form_conditional_logic"][form_id].logic; 488 //console.log(window["gf_form_conditional_logic"][form_id]); 489 var logic_new = logic; 490 $.each(logic, function (key_1, value) { 491 if (key_1.search("-") < 0) { 492 // use old and add new repeater 493 logic_new[key_1 + "-" + key] = yeeaddons_change_id_logic(value, key); 494 } else { 495 //da them 496 } 497 }); 498 var animation = window["gf_form_conditional_logic"][form_id].animation; 499 var defaults = window["gf_form_conditional_logic"][form_id].defaults; 500 window["gf_form_conditional_logic"][form_id] = { animation: animation, defaults: defaults, dependents: dependents_new, fields: fields_new, logic: logic_new, "ok": "ok" }; 501 gf_apply_rules(form_id, dependents_new_id, true); 502 } 503 } 504 } 505 //end logic 506 507 $.each(names_upload, function (key_1, value) { 508 if ($("#" + value).length > 0) { 509 gfMultiFileUploader.setup("#" + value); 510 } 511 }); 512 names_upload = []; 513 var input_mask = yeeaddons_gf_repeater_data.input_mask; 514 $.each(input_ids, function (key_1, value_1) { 515 if (value_1 in input_mask) { 516 $('#' + value_1 + "-" + key).mask(input_mask[value_1]).bind('keypress', function (e) { if (e.which == 13) { jQuery(this).blur(); } }) 517 } 518 }); 519 conditional_logic_custom(key); 520 input_ids = []; 521 $('.gform-datepicker').each(function () { 522 var $element = $(this); 523 if (typeof $.fn.datepicker === 'function') { 524 // Legacy GF < 3.0: jQuery UI datepicker available 525 if (!$element.hasClass('hasDatepicker')) { 526 initSingleDatepicker($element); 527 $element.addClass('initialized'); 528 } 529 } 530 }); 531 // GF 3.0+: Re-trigger datepicker initialization for the form 532 // so GF's theme script loads the datepicker chunk and sets up delegation 533 reinitGF3Datepicker(button); 534 } 535 /** 536 * Re-trigger GF 3.0 datepicker initialization. 537 * GF 3.0 uses lazy-loading: the datepicker chunk is only loaded when 538 * gform/post_render fires and .gform-datepicker elements exist in the DOM. 539 * Since the repeater removes original fields before GF checks for them, 540 * we need to re-dispatch the event after creating new rows. 541 */ 542 var _gf3DatepickerTriggered = {}; 543 function reinitGF3Datepicker(el) { 544 if (typeof $.fn.datepicker === 'function') { 545 return; // Legacy jQuery UI datepicker is available, no need for GF 3.0 re-init 546 } 547 var $wrapper = el.closest('.gform_wrapper'); 548 if (!$wrapper.length) return; 549 var formId = parseInt($wrapper.attr('id').replace('gform_wrapper_', '')); 550 if (!formId || isNaN(formId)) return; 551 // Only trigger once per form per page load to avoid duplicate event listeners 552 if (_gf3DatepickerTriggered[formId]) return; 553 _gf3DatepickerTriggered[formId] = true; 554 // Dispatch gform/post_render so GF's theme script detects datepicker fields 555 // and lazy-loads the accessible datepicker chunk 556 document.dispatchEvent(new CustomEvent('gform/post_render', { 557 detail: { formId: formId, currentPage: 1 } 558 })); 559 } 560 function yeeaddons_change_id_logic(value, key) { 561 var field_rules_inner = []; 562 if (value && value.field && Array.isArray(value.field.rules)) { // added this line to fix js issue in add more to autofill multiple data 563 $.each(value.field.rules, function (key_2, value_2) { 564 if (value_2.fieldId.search("-") < 0) { 565 var field_id_1 = value_2.fieldId + "-" + key; 566 } 567 field_rules_inner.push({ fieldId: field_id_1, operator: value_2.operator, value: value_2.value });
568 }) 569 var rules = field_rules_inner; 570 var field = { actionType: value.field.actionType, enabled: value.field.enabled, logicType: value.field.logicType, rules: rules }; 571 return { field: field, nextButton: value.nextButton, section: value.section }; 572 } else { 573 return value; 574 } 575 576 } 577 function conditional_logic_custom(rand) { 578 return; 579 var value_check = $("#input_1_13-" + rand).val(); 580 if (value_check == "Other" || value_check == "other") { 581 $("#input_1_14-" + rand).closest(".gfield").addClass("hidden"); 582 } else { 583 $("#input_1_14-" + rand).closest(".gfield").removeClass("hidden"); 584 } 585 } 586 gform.addAction('gform_input_change', function (elem, formId, fieldId) { 587 var datas = $(elem).attr("name").split("__");; 588 if (datas.length > 1) { 589 conditional_logic_custom(datas[1]); 590 } 591 }, 10); 592 function get_repeater_data(step_field, key = null) { 593 var data_html = step_field.find(".gf-field-repeater-data-html").val(); 594 if (data_html == "") { 595 data_html = step_field.find(".gf-field-repeater-data-
595html").attr('value'); 596 } 597 var html_step = change_name_and_ids(data_html, step_field, key); 598 return html_step; 599 } 600 function get_repeater_data_name() { 601 var i = 1; 602 $(".gfield--type-repeater_start").each(function () { 603 if ($(this).data("installed") == "installed") { 604 return; 605 } 606 $(this).data("installed", "installed"); 607 $(this).addClass("installed"); 608 var html_step = $("<div class='container-repeater-field'></div>"); 609 var names = []; 610 var step_field = ""; 611 var elements = $(this).nextAll(); 612 var value = ""; 613 elements.each(function (index) { 614 var item = $(this).clone(); 615 if (item.hasClass("gfield--type-repeater_end")) { 616 $(this).attr("data-id", i); 617 value = $(this).find("input").val(); 618 if (value == "") { 619 value = $(this).find("input").attr("value"); 620 } 621 step_field = $(this); 622 $(this).find(".gf-field-repeater-data").val(JSON.stringify({ "count": 1, "fields": names, "id": [] })); 623 $(this).find(".gf-field-repeater-data").attr("value", JSON.stringify({ "count": 1, "fields": names, "id": [] })); 624 return false; 625 } 626 $(this).remove(); 627 html_step.append(item); 628 var check_name = null; 629 if (item.find(".ginput_container_fileupload").length > 0) { 630 var name = item.find("input[type=file]").attr("name"); 631 if (name === undefined) { 632 name = item[0].id; 633 name = name.split("field"); 634 names.push("gform_multifile_upload" + name[1]); 635 } else { 636 names.push(item.find("input[type=file]").attr("name")); 637 } 638 } else { 639 if (item.find("input").attr("name")) { 640 var custom_n = item.find("input").attr("name"); 641 custom_n = custom_n.replace(/\[\]$/, ''); 642 names.push(custom_n); 643 } else if (item.find("textarea").attr("name")) { 644 names.push(item.find("textarea").attr("name")); 645 } else if (item.find("select").attr("name")) { 646 names.push(item.find("select").attr("name")); 647 } else { 648 var type = item.find("input").attr("type"); 649 names.push(item.find("input").attr("name")); 650 } 651 } 652 }) 653 var text_html = "<div class='container-repeater-field'>" + html_step.html() + "</div>";
654 step_field.find(".gf-field-repeater-data-html").val(text_html); 655 step_field.find(".gf-field-repeater-data-html").attr("value", text_html); 656 var initial_rows = 1; 657 initial_rows = step_field.find(".repeater-field-warp-item-data").data("initial_rows"); 658 var initial_rows_map_field_check = step_field.find(".repeater-field-warp-item-data").data("initial_rows_map_check"); 659 if (initial_rows_map_field_check != "" && initial_rows_map_field_check !== undefined) { 660 var initial_rows_map_field = step_field.find(".repeater-field-warp-item-data").data("initial_rows_map"); 661 var initial_rows_map_number = $("#" + initial_rows_map_field).val(); 662 if (initial_rows_map_number == "") { 663 initial_rows_map_number = $("#" + initial_rows_map_field).attr("value"); 664 } 665 if (initial_rows_map_number == "") { 666 initial_rows_map_number = 0; 667 } 668 $("#" + initial_rows_map_field).attr("data-repeater", step_field.find(".repeater-field-warp-item-data").data("map_id")); 669 $("#" + initial_rows_map_field).attr("repeater_initial_rows", "ok"); 670 initial_rows = initial_rows_map_number; 671 step_field.find(".gf-repeater-field-button-add").addClass("hidden"); 672 step_field.addClass("repeater-remove-toolbar"); 673 } 674 if (initial_rows === undefined || initial_rows === "") { 675 initial_rows = 1; 676 } 677 if (value != "") { 678 value = JSON.parse(value); 679 initial_rows = value.count; 680 var data_arr_ids = value.id; 681 setTimeout(function () { 682 for (var j = 0; j < initial_rows; j++) { 683 add_repeater_data(step_field.closest(".gfield--type-repeater_end"), data_arr_ids[j]); 684 } 685 }, 100); 686 } else { 687 setTimeout(function () { 688 for (var j = 0; j < initial_rows; j++) { 689 add_repeater_data(step_field.closest(".gfield--type-repeater_end")); 690 } 691 }, 100); 692 } 693 i++; 694 }) 695 } 696 $("body").on("change", "[repeater_initial_rows='ok']", function (e) { 697 var repeater_id = $(this).data("repeater"); 698 $("#" + repeater_id).find(".repeater-field-item").remove(); 699 var number = $(this).val(); 700 if (number == "") { 701 number = $(this).attr("value"); 702 } 703 for (let i = 0; i < number; i++) { 704 $("#" + repeater_id).find(".gf-repeater-field-button-add").click(); 705 } 706 }) 707 function get_repeater_data_header(start_field) { 708 var html_step = start_field.find(".repeater-field-header-data").val(); 709 if (html_step == "") { 710 html_step = start_field.find(".repeater-field-header-data").attr("value"); 711 } 712 return html_step; 713 } 714 function update_repeater_count_header() { 715 $(".gfield--type-repeater_end").each(function () { 716 var i = 1; 717 $(".repeater-field-item", $(this)).each(function () { 718 $(this).find(".repeater-field-header-count").html(i); 719 i++; 720 }) 721 var data_js = $(this).find(".gf-field-repeater-data").val(); 722 if (data_js == "") { 723 $(this).find(".gf-field-repeater-data").attr("value"); 724 } 725 var datas = JSON.parse(data_js); 726 datas.count = i - 1; 727 $(this).find(".gf-field-repeater-data").val(JSON.stringify(datas)); 728 $(this).find(".gf-field-repeater-data").attr("value", JSON.stringify(datas)); 729 }); 730 } 731 function check_max_row(step_field) { 732 var max = step_field.find(".repeater-field-warp-item-data").data("limit"); 733 var number_item = $('.repeater-field-item', step_field).length; 734 if (number_item >= max) { 735 return false; 736 } else { 737 return true; 738 } 739 } 740 function check_min_row(step_field) { 741 var min = step_field.find(".repeater-field-warp-item-data").data("initial_rows"); 742 var number_item = $('.repeater-field-item', step_field).length; 743 if (number_item <= min) { 744 return false; 745 } else { 746 return true; 747 } 748 } 749 function removeAR(arr) { 750 var what, a = arguments, L = a.length, ax; 751 while (L > 1 && arr.length) { 752 what = a[--L]; 753 while ((ax = arr.indexOf(what)) !== -1) { 754 arr.splice(ax, 1); 755 } 756 } 757 return arr; 758 } 759 $("body").on("click", ".gf-repeater-field-button-add", function (e) { 760 e.preventDefault(); 761 if (check_max_row($(this).closest(".gfield--type-repeater_end"))) { 762 add_repeater_data($(this).closest(".gfield--type-repeater_end")); 763 } else { 764 $(this).addClass('hidden'); 765 } 766 }) 767 $("body").on("click", ".repeater-field-header-acctions-toogle", function (e) { 768 e.preventDefault(); 769 if ($(this).hasClass("icon-down-open")) { 770 $(this).removeClass("icon-down-open"); 771 $(this).addClass("icon-up-open"); 772 } else { 773 $(this).addClass("icon-down-open"); 774 $(this).removeClass("icon-up-open"); 775 } 776 $(this).closest(".repeater-field-item").find(".repeater-field-content").slideToggle("slow"); 777 $(this).closest(".repeater-field-item").find(".repeater-field-header").toggleClass('repeater-content-show'); 778 }) 779 $("body").on("click", ".repeater-field-header-acctions-remove", function (e) { 780 e.preventDefault(); 781 $(this).closest(".gfield--type-repeater_end").find(".gf-repeater-field-button-add").removeClass('hidden'); 782 if (check_min_row($(this).closest(".gfield--type-repeater_end"))) { 783 var id = $(this).closest(".repeater-field-item").find(".container-repeater-field").data("id"); 784 var data_js = $(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").val(); 785 if (data_js == "") { 786 data_js = $(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").attr("value"); 787 } 788 var datas = JSON.parse(data_js); 789 var datas_ids = datas.id; 790 datas_ids = removeAR(datas_ids, id); 791 datas.id = datas_ids; 792 $(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").val(JSON.stringify(datas)); 793 $(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").attr("value", JSON.stringify(datas)); 794 $(this).closest(".repeater-field-item").remove(); 795 } else { 796 } 797 update_repeater_count_header(); 798 }) 799 //date pick 800 function getDatepickerI18n() { 801 var i18n = gform_i18n.datepicker; 802 return { 803 dayNamesMin: [ 804 i18n.days.sunday, 805 i18n.days.monday, 806 i18n.days.tuesday, 807 i18n.days.wednesday, 808 i18n.days.thursday, 809 i18n.days.friday, 810 i18n.days.saturday, 811 ], 812 monthNamesShort: [ 813 i18n.months.january, 814 i18n.months.february, 815 i18n.months.march, 816 i18n.months.april, 817 i18n.months.may, 818 i18n.months.june, 819 i18n.months.july, 820 i18n.months.august, 821 i18n.months.september, 822 i18n.months.october, 823 i18n.months.november, 824 i18n.months.december, 825 ], 826 firstDay: i18n.firstDay, 827 iconText: i18n.iconText, 828 }; 829 } 830 /** 831 * @function getDatepickerBaseOptions 832 * @description Return base options object that configures the datepicker. 833 * @param $element The datepicker trigger. 834 * @since 2.5 835 * 836 * @returns {{ 837 * suppressDatePicker: boolean, 838 * changeMonth: boolean, 839 * changeYear: boolean, 840 * onClose: onClose, 841 * yearRange: string, 842 * dateFormat: string, 843 * showOn: string, 844 * dayNamesMin: *[], 845 * monthNamesShort: *[], 846 * beforeShow: (function(*, *): boolean), 847 * showOtherMonths: boolean 848 * }} 849 */ 850 function getDatepickerBaseOptions($element) { 851 var i18n = getDatepickerI18n(); 852 var isThemeDatepicker = $element.closest('.gform_wrapper').length > 0;
853 var isPreview = $('#preview_form_container').length > 0; 854 var isRTL = window.getComputedStyle($element[0], null).getPropertyValue('direction') === 'rtl'; 855 var formTheme = isThemeDatepicker ? $element.closest('.gform_wrapper').data('form-theme') : 'gravity-theme'; 856 var formId = isThemeDatepicker ? $element.closest('.gform_wrapper').attr('id').replace('gform_wrapper_', '') : ''; 857 var formPageInstance = isThemeDatepicker ? $element.closest('.gform_wrapper').attr('data-form-index') : ''; 858 return { 859 yearRange: '-100:+20', 860 showOn: 'focus', 861 dateFormat: 'mm/dd/yy', 862 dayNamesMin: i18n.dayNamesMin, 863 monthNamesShort: i18n.monthNamesShort, 864 firstDay: i18n.firstDay, 865 changeMonth: true, 866 changeYear: true, 867 isRTL: isRTL, 868 showOtherMonths: isThemeDatepicker, 869 suppressDatePicker: false, 870 onClose: function () { 871 var self = this; 872 $element.focus(); 873 this.suppressDatePicker = true; 874 setTimeout(function () { 875 self.suppressDatePicker = false; 876 }, 200); 877 }, 878 beforeShow: function (input, inst) { 879 // Remove any classes that were added before as it could have been added to a different datepicker. 880 inst.dpDiv[0].classList.remove('gform-theme-datepicker'); 881 inst.dpDiv[0].classList.remove('gravity-theme'); 882 inst.dpDiv[0].classList.remove('gform-theme'); 883 inst.dpDiv[0].classList.remove('gform-legacy-datepicker'); 884 inst.dpDiv[0].classList.remove('gform-theme--framework'); 885 inst.dpDiv[0].classList.remove('gform-theme--foundation'); 886 inst.dpDiv[0].classList.remove('gform-theme--orbital'); 887 if (isThemeDatepicker) { 888 inst.dpDiv[0].classList.add('gform-theme-datepicker'); 889 $(inst.dpDiv[0]).attr('data-parent-form', formId + '_' + formPageInstance); 890 } 891 if (formTheme === undefined || formTheme === 'gravity-theme') { 892 $(inst.dpDiv[0]).addClass('gravity-theme'); 893 } else if (formTheme === 'legacy') { 894 $(inst.dpDiv[0]).addClass('gform-legacy-datepicker'); 895 } 896 else { 897 $(inst.dpDiv[0]).addClass('gform-theme--' + formTheme); 898 if (formTheme === 'orbital') { 899 $(inst.dpDiv[0]).addClass('gform-theme--framework'); 900 $(inst.dpDiv[0]).addClass('gform-theme--foundation'); 901 } 902 } 903 if (isRTL && isPreview) { 904 var $inputContainer = $(input).closest('.gfield'); 905 var rightOffset = $(document).outerWidth() - ($inputContainer.offset().left + $inputContainer.outerWidth()); 906 inst.dpDiv[0].style.right = rightOffset + 'px'; 907 } 908 return !this.suppressDatePicker; 909 }, 910 }; 911 } 912 /** 913 * @function initSingleDatepicker 914 * @description Initialize a datepicker assigning various additional options based on the trigger element. 915 * @param $element The datepicker trigger. 916 * @since 2.4 917 */ 918 function initSingleDatepicker($element) { 919 var i18n = getDatepickerI18n(); 920 var inputId = $element.attr('id') ? $element.attr('id') : ''; 921 var optionsObj = getDatepickerBaseOptions($element); 922 if ($element.hasClass('dmy')) { 923 optionsObj.dateFormat = 'dd/mm/yy'; 924 } else if ($element.hasClass('dmy_dash')) { 925 optionsObj.dateFormat = 'dd-mm-yy'; 926 } else if ($element.hasClass('dmy_dot')) { 927 optionsObj.dateFormat = 'dd.mm.yy'; 928 } else if ($element.hasClass('ymd_slash')) { 929 optionsObj.dateFormat = 'yy/mm/dd'; 930 } else if ($element.hasClass('ymd_dash')) { 931 optionsObj.dateFormat = 'yy-mm-dd'; 932 } else if ($element.hasClass('ymd_dot')) { 933 optionsObj.dateFormat = 'yy.mm.dd'; 934 } 935 if ($element.hasClass('gdatepicker_with_icon')) { 936 optionsObj.showOn = 'both'; 937 optionsObj.buttonImage = $element.parent().siblings("[id^='gforms_calendar_icon_input']").val(); 938 optionsObj.buttonImageOnly = true; 939 optionsObj.buttonText = i18n.iconText; 940 } else { 941 optionsObj.showOn = 'focus'; 942 } 943 inputId = inputId.split('_'); 944 // allow the user to override the datepicker options object 945 optionsObj = gform.applyFilters('gform_datepicker_options_pre_init', optionsObj, inputId[1], inputId[2], $element); 946 if (typeof $element.datepicker === 'function') { 947 $element.datepicker(optionsObj); 948 // We give the input focus after selecting a date which differs from default Datepicker behavior; this prevents 949 // users from clicking on the input again to open the datepicker. Let's add a manual click event to handle this. 950 if ($element.is(':input')) { 951 $element.click(function () { 952 $element.datepicker('show'); 953 });
954 } 955 } 956 } 957 }) 958 $(document).on("change", ".gfield--type-repeater_end input,.gfield--type-repeater_end textarea,.gfield--type-repeater_end select", function (event) { 959 var id = $(this).attr("id"); 960 if (typeof (Storage) !== "undefined") { 961 if ($(this).attr("name") != "" && typeof $(this).attr("name") != 'undefined') { 962 var type = $(this).attr("type"); 963 var name = $(this).attr("id"); 964 if (type == "checkbox") { 965 if ($("#" + name + ":checked").length > 0) { 966 var value = $("#" + name + ":checked").val(); 967 localStorage.setItem(id, value); 968 } else { 969 localStorage.removeItem(id); 970 } 971 } else if (type == "radio") { 972 var id = $(this).attr("name"); 973 var value = $(this).val(); 974 localStorage.setItem(id, value); 975 } 976 else { 977 var value = $(this).val(); 978 localStorage.setItem(id, value); 979 } 980 } 981 } 982 }); 983})(jQuery);
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.