PageSourceSearch

https://houseofpuertorico.com/wp-content/plugins/repeater-for-gravity-forms/libs/wp_repeater.js?ver=1790247432

js houseofpuertorico.com collected 2026-09-25 08:40:26 UTC 39,713 bytes, 983 lines download raw bytes

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.