1(function($) { 2"use strict"; 3 jQuery(document).ready(function($){ 4 var repeater_render = false; 5 jQuery( document ).on( 'elementor/popup/show', () => { 6 get_repeater_data_name(2); 7 } ); 8 setTimeout(function(){ 9 get_repeater_data_name(1); 10 }, 200); 11 function change_name_and_ids(item,field_end = null,form = null,id_rand = null){ 12 var datas = JSON.parse(field_end.find(".elementor-field-repeater-data").attr("value")); 13 var datas_ids = datas.id; 14 datas_ids.push(id_rand); 15 datas.id = datas_ids; 16 field_end.find(".elementor-field-repeater-data").attr("value",JSON.stringify(datas)); 17 item = $(item); 18 item.attr("data-id",id_rand); 19 console.log(item); 20 $(".elementor-field-group input.elementor-field, .elementor-field-group .elementor-field-option input",item).each(function(){ 21 var group_class = $(this).closest(".elementor-field-group").attr("class"); 22 var name = $(this).attr("name"); 23 var type = $(this).attr("type"); 24 var id = $(this).attr("id"); 25 console.log(id); 26 if(group_class != "" && id !== undefined){ 27 var id_group = id.replace("form-field-",""); 28 if( group_class.search(id_rand) < 0 ) { //no match 29 const regex = /-\d$/gm; 30 id_group = id_group.replace(regex, ''); 31 group_class = group_class.replace("elementor-field-group-"+id_group,"elementor-field-group-"+id_group+"-"+id_rand); 32 $(this).closest(".elementor-field-group").attr("class",group_class); 33 } 34 } 35 var index = $(this).closest(".container-repeater-field").data("step"); 36 if( type == "radio") { 37 $(this).attr("name",name+"["+id_rand+"]"); 38 }else if(type == 'checkbox'){ 39 if( !name.match(/\[]/)){ 40 name = name+"["+id_rand+"]"; 41 }else{ 42 name = name.replace("[]","["+id_rand+"][]"); 43 } 44 $(this).attr("name",name); 45 }else if(type == 'file'){ 46 if($(this).attr("multiple") == "multiple"){ 47 const regex = /\[.*?\]\[/gm; 48 name = name.replace(regex,"["+id_rand+"]["); 49 $(this).attr("name",name); 50 }else{ 51 $(this).attr("name",name+"["+id_rand+"]"); 52 } 53 }else{ 54 $(this).attr("name",name+"["+id_rand+"]"); 55 } 56 $(this).attr("data-id-repeater",id+"-"+id_rand+""); 57 $(this).attr("id",id+"-"+id_rand+""); 58 }) 59 $(".elementor-field-group textarea",item).each(function(){ 60 var group_class = $(this).closest(".elementor-field-group").attr("class"); 61 var name = $(this).attr("name"); 62 var id = $(this).attr("id"); 63 if(group_class != ""){ 64 var id_group = id.replace("form-field-",""); 65 group_class = group_class.replace("elementor-field-group-"+id_group,"elementor-field-group-"+id_group+"-"+id_rand); 66 $(this).closest(".elementor-field-group").attr("class",group_class); 67 } 68 $(this).attr("name",name+"["+id_rand+"]"); 69 $(this).attr("id",id+"-"+id_rand+""); 70 $(this).attr("data-id-repeater",id+"-"+id_rand+""); 71 }) 72 $(".elementor-field-group select",item).each(function(){ 73 var group_class = $(this).closest(".elementor-field-group").attr("class"); 74 var name = $(this).attr("name"); 75 var id = $(this).attr("id"); 76 if(group_class != ""){ 77 var id_group = id.replace("form-field-",""); 78 group_class = group_class.replace("elementor-field-group-"+id_group,"elementor-field-group-"+id_group+"-"+id_rand); 79 $(this).closest(".elementor-field-group").attr("class",group_class); 80 } 81 $(this).attr("name",name+"["+id_rand+"]"); 82 $(this).attr("id",id+"-"+id_rand+""); 83 $(this).attr("data-id-repeater",id+"-"+id_rand+""); 84 }) 85 $(".elementor-field-type-html1 .elementor-field-html-type",item).each(function(){ 86 var group_class = $(this).closest(".elementor-field-group").attr("class"); 87 var id = $(this).attr("id"); 88 if(group_class != ""){ 89 var id_group = id.replace("form-field-",""); 90 group_class = group_class.replace("elementor-field-group-"+id_group,"elementor-field-group-"+id_group+"-"+id_rand); 91 $(this).closest(".elementor-field-group").attr("class",group_class); 92 } 93 $(this).attr("id",id+"-"+id_rand+""); 94 $(this).attr("data-id-repeater",id+"-"+id_rand+""); 95 }) 96 return item; 97 } 98 function update_conditional_logic(id_rand,form){ 99 var datas = $(".conditional_logic_data_js",form).attr("value"); 100 if( datas === undefined){ 101 var datas = $(".conditional_logic_data_js",form).val(); 102 } 103 if( datas !== undefined){ 104 datas = jQuery.parseJSON(datas); 105 var logic_field = datas; 106 var update = false; 107 $.each( datas, function( field_key, field_value ) { 108 update = true; 109 var new_key = field_key+"-"+id_rand; 110 var field_logic = []; 111 var field_value_condi = {}; 112 $.each( field_value.datas, function( index,field ) { 113 var name =field.conditional_logic_id+"-"+id_rand; 114 field_logic.push( {conditional_logic_id:name,conditional_logic_operator:field.conditional_logic_operator,conditional_logic_value:field.conditional_logic_value}); 115 }) 116 logic_field[new_key] = {display:field_value.display, trigger: field_value.trigger,"datas":field_logic}; 117 118 }); 119 if( update ){ 120 var datas = $(".conditional_logic_data_js",form).attr("value",JSON.stringify(logic_field)); 121 var datas = $(".conditional_logic_data_js",form).val(JSON.stringify(logic_field)); 122 } 123 } 124 } 125 function add_repeater_data(button, form){ 126 var start_field; 127 var id_rand = Math.floor(Math.random() * 10000); 128 var item = $('<div class="repeater-field-item"><div class="repeater-field-header"></div><div class="repeater-field-content"></div></div>'); 129 button.prevAll().each(function(index){ 130 var item = $(this).clone(); 131 if( item.hasClass("elementor-field-type-repeater_start") ) { 132 start_field = $(this); 133 return false; 134 } 135 }) 136 var html_field = get_repeater_data(button,form,id_rand); 137 var header = get_repeater_data_header(start_field); 138 item.find(".repeater-field-header").append(header); 139 item.find(".repeater-field-content").append(html_field); 140 button.find(".repeater-field-warp-item").append(item); 141 update_repeater_count_header(); 142 $( ".elementor-field-calculator",button ).each(function( index ) { 143 var formula = $(this).data("formula"); 144 var installed = $(this).data("installed"); 145 if( installed == "yes"){ 146 return; 147 } 148 var id_repeater = $(this).closest(".container-repeater-field").data("id"); 149 var datas = button.find(".elementor-field-repeater-data").attr("value"); 150 datas = JSON.parse(datas); 151 $.each( datas.fields, function( index,field ) { 152 var name = get_name(field); 153 formula = formula.replace(name,name+"-"+id_repeater); 154 }) 155 $(this).attr("data-formula",formula); 156 $(this).attr("installed","yes"); 157 }); 158 update_conditional_logic(id_rand,form); 159 $( "input" ).trigger( "done_load_repeater",[item] ); 160 if (typeof flatpickr !== "undefined") { 161 if(!elementor_repeater.wp_is_mobile){ 162 $(".elementor-time-field.flatpickr-input", html_field).flatpickr({ 163 enableTime: true, 164 noCalendar: true, 165 dateFormat: "H:i", 166 });
167 $(".elementor-date-field.flatpickr-input", html_field).flatpickr(); 168 } 169 } 170 } 171 function get_name(string) { 172 var name = string.match(/\[.*?\]/gm); 173 return name[0].replace(/\[|\]/gm, ''); 174 } 175 function get_repeater_data(step_field,form,id_rand){ 176 var text_html = repeater_decodeHtml(step_field.find(".elementor-field-repeater-data-html").val()); 177 var html_step = change_name_and_ids(text_html,step_field,form,id_rand); 178 return html_step; 179 } 180 function repeater_escapeHtml(str){ 181 var map = 182 { 183 '&': '&', 184 '<': '<', 185 '>': '>', 186 '"': '"', 187 "'": ''' 188 }; 189 return str.replace(/[&<>"']/g, function(m) {return map[m];}); 190 } 191 function repeater_decodeHtml(str){ 192 var map = 193 { 194 '&': '&', 195 '<': '<', 196 '>': '>', 197 '"': '"', 198 ''': "'" 199 }; 200 return str.replace(/&|<|>|"|'/g, function(m) {return map[m];}); 201 } 202 function get_repeater_data_name(type=1){ 203 var i = 1; 204 $(".elementor-field-type-repeater_start").each(function(){ 205 var installed = $(this).attr("data-intalled"); 206 if( installed != "ok" ){ 207 $(this).attr("data-intalled","ok"); 208 repeater_render = true; 209 var html_step = $("<div class='container-repeater-field'></div>"); 210 var names = []; 211 var step_field = ""; 212 var form =""; 213 var elements = $(this).nextAll(); 214 elements.each(function(index){ 215 var item = $(this).clone(); 216 if( item.hasClass("elementor-field-type-repeater") ) { 217 $(this).attr("data-id",i); 218 step_field = $(this); 219 form = step_field.closest(".elementor-widget-form"); 220 $(this).find(".elementor-field-repeater-data").attr("value",JSON.stringify({"count":1,"fields":names,"id":[]})); 221 return false; 222 } 223 $(this).remove(); 224 html_step.append(item); 225 var check_name = null; 226 if( item.find("input").attr("name") ) { 227 names.push(item.find("input").attr("name")); 228 }else if( item.find("textarea").attr("name") ){ 229 names.push(item.find("textarea").attr("name")); 230 }else if( item.find("select").attr("name") ){ 231 names.push(item.find("select").attr("name")); 232 }else{ 233 names.push(item.find("input").attr("name")); 234 } 235 }) 236 var text_html = "<div class='container-repeater-field'>"+html_step.html()+"</div>"; 237 text_html = repeater_escapeHtml(text_html);
238 step_field.find(".elementor-field-repeater-data-html").val(text_html); 239 var initial_rows = 0; 240 initial_rows = step_field.find(".elementor-field-repeater-end").data("initial_rows"); 241 var initial_rows_map_field = step_field.find(".elementor-field-repeater-end").data("initial_rows_map"); 242 243 244 if($("#form-field-"+initial_rows_map_field).length > 0){ 245 var initial_rows_map_number = $("#form-field-"+initial_rows_map_field).val(); 246 $("#form-field-"+initial_rows_map_field).attr("data-repeater",step_field.find(".elementor-field-repeater-end").data("map_id")); 247 $("#form-field-"+initial_rows_map_field).attr("repeater_initial_rows","ok"); 248 initial_rows = initial_rows_map_number; 249 step_field.find(".repeater-field-button-add").addClass("hidden"); 250 step_field.addClass("repeater-remove-toolbar"); 251 } 252 setTimeout(function() { 253 for (var j = 0; j < initial_rows; j++) { 254 add_repeater_data(step_field.closest(".elementor-field-type-repeater"),form); 255 } 256 }, 100); 257 i++; 258 } 259 }) 260 } 261 $("body").on("change","[repeater_initial_rows='ok']",function (e){ 262 var repeater_id = $(this).data("repeater"); 263 $("."+repeater_id).find(".repeater-field-item").remove(); 264 var number = $(this).val(); 265 if(number == ""){ 266 number = $(this).attr("value"); 267 } 268 for (let i = 0; i < number; i++) { 269 $("."+repeater_id).find(".repeater-field-button-add").click(); 270 } 271 }) 272 function get_repeater_data_header(start_field){ 273 var html_step = start_field.find(".repeater-field-header-data").val(); 274 return html_step; 275 } 276 function update_repeater_count_header(){ 277 $(".elementor-field-repeater-end").each(function(){ 278 var i = 1; 279 $(".repeater-field-item",$(this)).each(function(){ 280 $(this).find(".repeater-field-header-count").html(i); 281 i++; 282 }) 283 var datas = JSON.parse($(this).find(".elementor-field-repeater-data").attr("value")); 284 datas.count = i-1; 285 $(this).find(".elementor-field-repeater-data").attr("value",JSON.stringify(datas)); 286 }); 287 } 288 function check_max_row(step_field){ 289 var max = step_field.find(".elementor-field-repeater-end").data("limit"); 290 if(max == "" || max < 1){ 291 max = 999; 292 } 293 var number_item = $('.repeater-field-item',step_field).length; 294 if( number_item >= (max -1 ) ){ 295 step_field.find(".repeater-field-button-add").addClass("hidden"); 296 } 297 if( number_item >= max ){ 298 return false; 299 }else{ 300 return true; 301 } 302 } 303 function check_min_row(step_field){ 304 var min = step_field.find(".elementor-field-repeater-end").data("initial_rows"); 305 if(min == ""){ 306 min = 0; 307 } 308 var number_item = $('.repeater-field-item',step_field).length; 309 if( number_item <= min ){ 310 return false; 311 }else{ 312 return true; 313 } 314 } 315 function removeAR(arr) { 316 var what, a = arguments, L = a.length, ax; 317 while (L > 1 && arr.length) { 318 what = a[--L]; 319 while ((ax= arr.indexOf(what)) !== -1) { 320 arr.splice(ax, 1); 321 } 322 } 323 return arr; 324 } 325 $("body").on("click",".repeater-field-button-add",function(e){ 326 e.preventDefault(); 327 if( check_max_row($(this).closest(".elementor-field-type-repeater")) ){ 328 var form = $(this).closest(".elementor-widget-form"); 329 add_repeater_data($(this).closest(".elementor-field-type-repeater"),form); 330 }else{ 331 $(this).addClass('hidden'); 332 } 333 }) 334 $("body").on("click",".repeater-field-header-acctions-toogle",function(e){ 335 e.preventDefault(); 336 if( $(this).hasClass("icon-down-open")){ 337 $(this).removeClass("icon-down-open"); 338 $(this).addClass("icon-up-open"); 339 }else{ 340 $(this).addClass("icon-down-open"); 341 $(this).removeClass("icon-up-open"); 342 } 343 $(this).closest(".repeater-field-item").find(".repeater-field-content").slideToggle("slow"); 344 $(this).closest(".repeater-field-item").find(".repeater-field-header").toggleClass('repeater-content-show'); 345 }) 346 $("body").on("click",".repeater-field-header-acctions-remove",function(e){
347 e.preventDefault(); 348 $(this).closest(".elementor-field-type-repeater").find(".repeater-field-button-add").removeClass('hidden'); 349 if( check_min_row($(this).closest(".elementor-field-type-repeater")) ){ 350 var id = $(this).closest(".repeater-field-item").find(".container-repeater-field").data("id"); 351 var datas = JSON.parse($(this).closest(".elementor-field-type-repeater").find(".elementor-field-repeater-data").attr("value")); 352 var datas_ids = datas.id; 353 datas_ids = removeAR(datas_ids,id); 354 datas.id = datas_ids; 355 $(this).closest(".elementor-field-type-repeater").find(".elementor-field-repeater-data").attr("value",JSON.stringify(datas)); 356 $(this).closest(".repeater-field-item").remove(); 357 }else{ 358 } 359 update_repeater_count_header(); 360 }) 361 }) 362})(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.