PageSourceSearch

https://www.tirano-mediavaltellina.it/wp-content/plugins/repeater-…/libs/cf7_repeater.js?ver=1790960489

js tirano-mediavaltellina.it collected 2026-10-02 19:26:34 UTC 15,604 bytes, 414 lines download raw bytes

1(function ($) {
2	"use strict";
3	jQuery(document).ready(function ($) {
4		document.addEventListener('change', function (event) {
5			const el = event.target;
6			var $form = $(el).closest('form.wpcf7-form');
7			if (!$form.length) {
8				return;
9			}
10			$(".repeater-field-content .wpcf7-not-valid-tip", $form).remove();
11		}, false);
12		document.addEventListener('wpcf7invalid', function (event) {
13			$.each(event.detail.apiResponse.invalid_fields, function (index, value) {
14				if (value.idref == "yeeaddons") {
15					$('[name="' + value.field + '"]').closest(".wpcf7-form-control-wrap").append('<span class="wpcf7-not-valid-tip" aria-hidden="true">' + value.message + '</span>');
16				}
17			});
18		}, false);
19		var select2Configs = {};
20		function init_template_select2_configs() {
21			if (typeof $.fn.select2 !== 'function') return;
22			$(".cf7-repeater").each(function () {
23				var $template = $(this).find(".cf7-field-repeater-data-html");
24				$template.find("select").each(function () {
25					var $sel = $(this);
26					var s2 = $sel.data("select2");
27					var key = "s2_" + Math.random().toString(36).substr(2, 9);
28					if (s2 && s2.options && s2.options.options) {
29						select2Configs[key] = $.extend({}, s2.options.options);
30						$sel.attr("data-repeater-select2-key", key);
31					} else if ($sel.hasClass("select2-hidden-accessible") || $sel.siblings(".select2-container").length) {
32						select2Configs[key] = {};
33						$sel.attr("data-repeater-select2-key", key);
34					}
35					try {
36						if (s2) {
37							$sel.select2("destroy");
38						}
39					} catch (e) {}
40				});
41				$template.find(".select2-container").remove();
42				$template.find("[data-select2-id]").removeAttr("data-select2-id");
43				$template.find(".select2-hidden-accessible")
44					.removeClass("select2-hidden-accessible")
45					.removeAttr("tabindex")
46					.removeAttr("aria-hidden");
47			});
48		}
49		init_template_select2_configs();
50		get_repeater_data_name();
51		document.addEventListener('wpcf7mailsent', function (event) {
52			setTimeout(function () {
53				$(".field-repeater-data").each(function () {
54					var field = $(this);
55					var data = JSON.stringify(field.data("old"));
56					field.val(data).change();
57				})
58			}, 100);
59		}, false);
60		var list_names = [];
61		function change_name_and_ids(item, field_end = null, id_rand = '') {
62			var datas = JSON.parse(field_end.find(".field-repeater-data").val());
63			var datas_ids = datas.id;
64			datas_ids.push(id_rand);
65			datas.id = datas_ids;
66			field_end.find(".field-repeater-data").val(JSON.stringify(datas));
67			field_end.find(".field-repeater-data").attr("data-old", JSON.stringify(datas));
68			item = $("<div>" + item + "</div>");
69			// Clean up any select2 artifacts copied from template
70			item.find(".select2-container").remove();
71			item.find("[data-select2-id]").removeAttr("data-select2-id");
72			item.removeAttr("data-select2-id");
73			item.find(".select2-hidden-accessible")
74				.removeClass("select2-hidden-accessible")
75				.removeAttr("tabindex")
76				.removeAttr("aria-hidden");
77			$(item.find(".cf7-group")).each(function () {
78				var id = $(this).attr("id");
79				if (id) {
80					$(this).attr("id", id + "__" + id_rand);
81				}
82				$(this).removeClass("cf7-logic-hidden");
83			})
84			$("input", item).each(function () {
85				var name = $(this).attr("name");
86				list_names.push(name.replace("[]", ""));
87				var type = $(this).attr("type");
88				var id = $(this).attr("id");
89				var index = $(this).closest(".container-repeater-field").data("step");
90				if (name.indexOf("[]") !== -1) {
91					name = name.replace("[]", "__" + id_rand + "[]");
92				} else {
93					name = name + "__" + id_rand;
94				}
95				$(this).attr("name", name);
96				if (id) {
97					$(this).attr("id", id + "-" + id_rand);
98				}
99				$(this).closest(".wpcf7-form-control-wrap").attr("data-name", name);
100			})
101			$("textarea", item).each(function () {
102				var name = $(this).attr("name");
103				list_names.push(name.replace("[]", ""));
104				var id = $(this).attr("id");
105				$(this).attr("name", name + "__" + id_rand);
106				if (id) {
107					$(this).attr("id", id + "-" + id_rand);
108				}
109				$(this).closest(".wpcf7-form-control-wrap").attr("data-name", name + "__" + id_rand);
110			})
111			$("select", item).each(function () {
112				var name = $(this).attr("name");
113				if (!name) return;
114				list_names.push(name.replace("[]", ""));
115				var id = $(this).attr("id");
116				if (name.indexOf("[]") !== -1) {
117					name = name.replace("[]", "__" + id_rand + "[]");
118				} else {
119					name = name + "__" + id_rand;
120				}
121				$(this).attr("name", name);
122				if (id) {
123					$(this).attr("id", id + "-" + id_rand);
124				}
125				$(this).closest(".wpcf7-form-control-wrap").attr("data-name", name);
126			})
127			if (list_names.length > 0) {
128				list_names = [...new Set(list_names)];
129				$('input[name="_yeeaddons_cf7_repeater_fields"]').val(list_names.join("|"));
130			}
131			return item;
132		}
133		function add_repeater_data(button) {
134			var id_rand = Math.floor(Math.random() * 10000);
135			var item = $('<div class="repeater-field-item"><div class="repeater-field-header"></div><div class="repeater-field-content"></div></div>');
136			item.attr("data-id", id_rand);
137			var html_field = get_repeater_data(button, id_rand);
138			var header = get_repeater_data_header(button);
139			item.find(".repeater-field-header").append(header);
140			item.find(".repeater-field-content").append(html_field);
141			button.find(".cf7-field-repeater-reponese").append(item);
142			update_repeater_count_header();
143			// Universal Select2 re-initialization for any plugin using Select2
144			if (typeof $.fn.select2 === 'function') {
145				item.find('select').each(function() {
146					var $select = $(this);
147					var s2Key = $select.attr('data-repeater-select2-key');
148					var isSelect2Field = s2Key ||
149						$select.hasClass('wpcf7-woocommerce_product') ||
150						$select.hasClass('wpcf7-products') ||
151						$select.hasClass('select2') ||
152						$select.hasClass('select2-enable') ||
153						$select.hasClass('wc-enhanced-select') ||
154						$select.hasClass('country_select');
155
156					if (isSelect2Field) {
157						$select.siblings('.select2-container').remove();
158						$select.removeClass('select2-hidden-accessible')
159							.removeAttr('tabindex')
160							.removeAttr('aria-hidden')
161							.removeAttr('data-select2-id');
162						$select.find('[data-select2-id]').removeAttr('data-select2-id');
163
164						var config = {};
165						if (s2Key && select2Configs[s2Key]) {
166							config = $.extend({}, select2Configs[s2Key]);
167						}
168
169						// Specific defaults for known plugins if not already in config
170						if ($select.hasClass('wpcf7-woocommerce_product')) {
171							if (!config.placeholder) config.placeholder = "--- Select Product ---";
172							if (config.minimumResultsForSearch === undefined) config.minimumResultsForSearch = -1;
173						}
174						if ($select.hasClass('wpcf7-products')) {
175							if (!config.placeholder && $select.attr('placeholder')) config.placeholder = $select.attr('placeholder');
176							if (typeof window.formatOptions_product === 'function' && !config.templateResult) {
177								config.templateResult = window.formatOptions_product;
178							}
179						}
180
181						if (!config.width) {
182							config.width = '100%';
183						}
184
185						$select.select2(config);
186					}
187				});
188				try {
189					$(document.body).trigger('wc-enhanced-select-init');
190				} catch (e) {}
191			}
192			$(document).trigger('cf7_repeater_added', [item]);
193			$("input").trigger("done_load_repeater");
194		}
195		function get_repeater_data(step_field, id_rand) {
196			var html_step = change_name_and_ids(step_field.find(".cf7-field-repeater-data-
196html").html(), step_field, id_rand);
197			return html_step;
198		}
199		function get_repeater_data_name() {
200			var i = 1;
201			$(".cf7-repeater").each(function () {
202				var datas = $(this).find(".field-repeater-data").data("datas") + " yeeaddons_test";
203				var title = explode_datas(datas, "title");
204				var button_text = explode_datas(datas, "button_text");
205				var data_header = $(this).find(".repeater-field-header-data").html();
206				data_header = $(data_header);
207				data_header.find(".repeater-field-header-title-text").html(title);
208				$(".repeater-field-button-add", $(this)).html(button_text);
209				$(this).find(".repeater-field-header-data").html(data_header);
210				var html_step = $("<div class='container-repeater-field'></div>");
211				var names = [];
212				var step_field_data = $(this).find(".field-repeater-data");
213				var field_end = $(this).find(".cf7-field-repeater-data-html").html();
214				var button = $(this);
215				$("input,select,textarea", $(field_end)).each(function (index) {
216					var name = $(this).attr("name");
217					names.push(name.replace("[]", ""));
218				})
219				names = [...new Set(names)];
220				step_field_data.val(JSON.stringify({ "count": 1, "fields": names, "id": [] }));
221				step_field_data.attr("data-old", JSON.stringify({ "count": 1, "fields": names, "id": [] }));
222				var initial_rows = 0;
223				initial_rows = explode_datas(datas, "initial_rows");
224				if (cf7_repeater.pro != "ok") {
225					if (initial_rows > 1) {
226						alert("Free version: initial_rows < 2");
227						initial_rows = 1;
228					}
229				}
230				var initial_rows_map_field = explode_datas(datas, "initial_rows_map");
231				if (initial_rows_map_field) {
232					var initial_rows_map_number = $('[name="' + initial_rows_map_field + '"]').val();
233					if (initial_rows_map_number !== undefined) {
234						$('[name="' + initial_rows_map_field + '"]').attr("data-repeater", $(this).find(".field-repeater-data").attr("name"));
235						$('[name="' + initial_rows_map_field + '"]').attr("repeater_initial_rows", "ok");
236						initial_rows = initial_rows_map_number;
237						$(this).find(".repeater-field-button-add").addClass("hidden");
238						$(this).addClass("repeater-remove-toolbar");
239					}
240				}
241				setTimeout(function () {
242					for (var j = 0; j < initial_rows; j++) {
243						add_repeater_data(button);
244					}
245				}, 100);
246				i++;
247			})
248		}
249		$("body").on("change", "[repeater_initial_rows='ok']", function (e) {
250			var repeater_id = $(this).data("repeater");
251			var $repeater = $("#" + repeater_id);
252			if (cf7_repeater.pro == "ok") {
253				$repeater.find(".repeater-field-item").remove();
254				var number = $(this).val();
255				for (let i = 0; i < number; i++) {
256					$repeater.find(".repeater-field-button-add").click();
257				}
258			} else {
259				alert("Upgrade to pro version");
260			}
261			$repeater.find(".repeater-field-button-add").addClass("hidden");
262			$repeater.addClass("repeater-remove-toolbar");
263		})
264		function get_repeater_data_header(start_field) {
265			var html_step = start_field.find(".repeater-field-header-data").html()
266			return html_step;
267		}
268		function update_repeater_count_header() {
269			$(".cf7-repeater").each(function () {
270				var i = 1;
271				$(".repeater-field-item", $(this)).each(function () {
272					$(this).find(".repeater-field-header-count").html(i);
273					$(this).addClass("repeater-field-item-" + i);
274					i++;
275				})
276				var datas = JSON.parse($(this).find(".field-repeater-data").val());
277				datas.count = i - 1;
278				$(this).find(".field-repeater-data").val(JSON.stringify(datas));
279				$(this).find(".field-repeater-data").attr("data-old", JSON.stringify(datas));
280			});
281		}
282		function check_max_row(step_field, button) {
283			var max = explode_datas(step_field.find(".field-repeater-data").data("datas"));
284			var number_item = $('.repeater-field-item', step_field).length;
285			if (max - number_item == 1) {
286				button.addClass('hidden');
287			} else {
288				button.removeClass('hidden');
289			}
290			if (number_item >= max) {
291				return false;
292			} else {
293				return true;
294			}
295		}
296		function check_min_row(step_field) {
297			var min = explode_datas(step_field.find(".field-repeater-data").data("datas"), "initial_rows");
298			var number_item = $('.repeater-field-item', step_field).length;
299			if (number_item <= min) {
300				return false;
301			} else {
302				return true;
303			}
304		}
305		function explode_datas(str = "", type = "max") {
306			if (type == "max") {
307				const regex = /max\s*:\s*(\d+)/;
308				const match = str.match(regex);
309				return match ? parseInt(match[1], 10) : 100;
310			} else if (type == "initial_rows") {
311				const regex = /initial_rows\:(.\d?) /gm;
312				let m;
313				let max = 1;
314				while ((m = regex.exec(str)) !== null) {
315					if (m.index === regex.lastIndex) {
316						regex.lastIndex++;
317					}
318					m.forEach((match, groupIndex) => {
319						max = match;
320					});
321				}
322				return max;
323			}
324			else if (type == "title") {
325				const regex = /title\:'(.*?)' /gm;
326				let m;
327				let max = "";
328				while ((m = regex.exec(str)) !== null) {
329					if (m.index === regex.lastIndex) {
330						regex.lastIndex++;
331					}
332					m.forEach((match, groupIndex) => {
333						max = match;
334					});
335				}
336				return max;
337			} else if (type == "button_text") {
338				const regex = /button\:'(.*?)' /gm;
339				let m;
340				let max = "Add more";
341				while ((m = regex.exec(str)) !== null) {
342					if (m.index === regex.lastIndex) {
343						regex.lastIndex++;
344					}
345					m.forEach((match, groupIndex) => {
346						max = match;
347					});
348				}
349				return max;
350			} else if (type == "initial_rows_map") {
351				const regex = /initial_rows_map\:(.*?) /gm;
352				let m;
353				let max = "";
354				while ((m = regex.exec(str)) !== null) {
355					if (m.index === regex.lastIndex) {
356						regex.lastIndex++;
357					}
358					m.forEach((match, groupIndex) => {
359						max = match;
360					});
361				}
362				return max;
363			}
364		}
365		function removeAR(arr) {
366			var what, a = arguments, L = a.length, ax;
367			while (L > 1 && arr.length) {
368				what = a[--L];
369				while ((ax = arr.indexOf(what)) !== -1) {
370					arr.splice(ax, 1);
371				}
372			}
373			return arr;
374		}
375		$("body").on("click", ".repeater-field-button-add", function (e) {
376			e.preventDefault();
377			if (check_max_row($(this).closest(".cf7-repeater"), $(this))) {
378				add_repeater_data($(this).closest(".cf7-repeater"));
379			} else {
380				$(this).addClass('hidden');
381			}
382		})
383		$("body").on("click", ".repeater-field-header-acctions-toogle", function (e) {
384			e.preventDefault();
385			if ($(this).hasClass("icon-down-open")) {
386				$(this).removeClass("icon-down-open");
387				$(this).addClass("icon-up-open");
388			} else {
389				$(this).addClass("icon-down-open");
390				$(this).removeClass("icon-up-open");
391			}
392			$(this).closest(".repeater-field-item").find(".repeater-field-content").slideToggle("slow");
393			$(this).closest(".repeater-field-item").find(".repeater-field-header").toggleClass('repeater-content-show');
394		})
395		$("body").on("click", ".repeater-field-header-acctions-remove", function (e) {
396			e.preventDefault();
397			$(this).closest(".cf7-repeater").find(".repeater-field-button-add").removeClass('hidden');
398			if (check_min_row($(this).closest(".cf7-repeater"))) {
399				var id = $(this).closest(".repeater-field-item").data("id");
400				var datas = JSON.parse($(this).closest(".cf7-repeater").find(".field-repeater-data").val());
401				var datas_ids = datas.id;
402				datas_ids = removeAR(datas_ids, id);
403				datas.id = datas_ids;
404				$(this).closest(".cf7-repeater").find(".field-repeater-data").val(JSON.stringify(datas));
405				$(this).closest(".cf7-repeater").find(".field-repeater-data").attr("data-old", JSON.stringify(datas));
406				$(this).closest(".repeater-field-item").remove();
407			} else {
408			}
409			update_repeater_count_header();
410			$(document).trigger("cf7_repeater_removed");
411			$("input").trigger("done_load_repeater");
412		})
413	})
414})(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.