PluginProbe
Repeater Fields for Gravity Forms / 2.1.0
Repeater Fields for Gravity Forms v2.1.0
3.2.0 3.1.1 3.1.0 3.0.4 3.0.3 3.0.2 3.0.1 3.0.0 2.5.1 2.5.0 2.4.6 trunk 2.0.5 2.0.9 2.1.0 2.3.2 2.3.7 2.4.1 2.4.3 2.4.4 2.4.5
repeater-for-gravity-forms / libs / wp_repeater.js

wp_repeater.js in Repeater Fields for Gravity Forms 2.1.0, at libs/wp_repeater.js

635 lines 25.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function($) {
2 "use strict";
3 jQuery(document).ready(function($){
4 get_repeater_data_name();
5 var names_upload = [];
6 jQuery(document).on("gform_page_loaded", function (e, form_id) {
7 //jQuery(".gform-datepicker").datepicker('destroy');
8 get_repeater_data_name();
9 });
10 jQuery(document).on('gform_post_render', function(event, form_id, current_page){
11 //jQuery(".gform-datepicker").datepicker('destroy');
12 get_repeater_data_name();
13 });
14 var repeater_fields_htmls ={};
15 gform.addFilter( 'gform_file_upload_status_markup', function( statusMarkup, file, size, setrings, removeFileJs, up ) {
16 var id = up.settings.container.id;
17 var input = $('input[name="'+id+'"]');
18 var old_name = input.val();
19 var new_upload = file.name;
20 if(old_name == ""){
21 input.val(new_upload);
22 }else{
23 input.val(old_name+","+new_upload);
24 }
25 return statusMarkup;
26 } );
27 gform.addFilter( 'gform_file_upload_markup', function( html, file, up, strings, imagesUrl, response ) {
28 return html.replace("onclick", "data-onclick");;
29 } );
30 $("body").on("click",".gform_delete_file",function(e){
31 e.preventDefault();
32 var str =$(this).data("onclick");
33 const regex = /\((.*?)\)/gm;
34 var m="";
35 var a="";
36 while ((m = regex.exec(str)) !== null) {
37 // This is necessary to avoid infinite loops with zero-width matches
38 if (m.index === regex.lastIndex) {
39 regex.lastIndex++;
40 }
41 a =m[1].split(',');;
42 }
43 gformDeleteUploadedFileRepeater(a[0],a[1],$(this));
44 return;
45 })
46 function gformDeleteUploadedFileRepeater(formId, fieldId, deleteButton){
47 if(deleteButton.closest(".repeater-field-warp-item-data").length > 0) {
48 var rand_id = deleteButton.closest(".container-repeater-field").data("id");
49 var fileIndex = jQuery(deleteButton).parent().index();
50 var parent = jQuery("#field_" + formId + "_" + fieldId);
51 parent.find('input[type="file"],.validation_message,#extensions_message_' + formId + '_' + fieldId).removeClass("gform_hidden");
52 parent.find(".ginput_post_image_file").show();
53 //parent.find("input[type=\"text\"]").val('');
54 var filesJson = jQuery('#gform_uploaded_files_' + formId).val();
55 if(filesJson){
56 var files = jQuery.secureEvalJSON(filesJson);
57 if(files) {
58 var inputName = "input_" + fieldId;
59 var full_name = deleteButton.closest(".repeater-field-warp-item-data").find('input[name="gform_multifile_upload_'+formId+'_'+fieldId+'__'+rand_id+'"]').val();
60 if(full_name == ""){
61 full_name = [];
62 }else{
63 full_name = full_name.split(",");
64 }
65 var $multfile = parent.find("#gform_multifile_upload_" + formId + "_" + fieldId +"__"+rand_id );
66 var remove_name = deleteButton.closest(".ginput_preview").find(".gfield_fileupload_filename").html();
67 var index1 = full_name.indexOf(remove_name);
68 if (index1 !== -1) {
69 full_name.splice(index1, 1);
70 }
71 deleteButton.closest(".repeater-field-warp-item-data").find('input[name="gform_multifile_upload_'+formId+'_'+fieldId+'__'+rand_id+'"]').val(full_name.join(","));
72 deleteButton.closest(".ginput_preview").remove();
73 if( $multfile.length > 0 ) {
74 files[inputName].splice(fileIndex, 1);
75 var settings = $multfile.data('settings');
76 var max = settings.gf_vars.max_files;
77 jQuery("#" + settings.gf_vars.message_id +"__"+rand_id).html('');
78 if(files[inputName].length < max)
79 gfMultiFileUploader.toggleDisabled(settings, false);
80 } else {
81 files[inputName] = null;
82 }
83 jQuery('#gform_uploaded_files_' + formId).val(jQuery.toJSON(files));
84 }
85 }
86 }else{
87 var parent = jQuery("#field_" + formId + "_" + fieldId);
88 var fileIndex = jQuery(deleteButton).parent().index();
89 deleteButton.closest(".ginput_preview").remove();
90 //displaying single file upload field
91 parent.find('input[type="file"],.validation_message,#extensions_message_' + formId + '_' + fieldId).removeClass("gform_hidden");
92 //displaying post image label
93 parent.find(".ginput_post_image_file").show();
94 //clearing post image meta fields
95 parent.find("input[type=\"text\"]").val('');
96 //removing file from uploaded meta
97 var filesJson = jQuery('#gform_uploaded_files_' + formId).val();
98 if(filesJson){
99 var files = jQuery.secureEvalJSON(filesJson);
100 if(files) {
101 var inputName = "input_" + fieldId;
102 var $multfile = parent.find("#gform_multifile_upload_" + formId + "_" + fieldId );
103 if( $multfile.length > 0 ) {
104 files[inputName].splice(fileIndex, 1);
105 var settings = $multfile.data('settings');
106 var max = settings.gf_vars.max_files;
107 jQuery("#" + settings.gf_vars.message_id).html('');
108 if(files[inputName].length < max)
109 gfMultiFileUploader.toggleDisabled(settings, false);
110 } else {
111 files[inputName] = null;
112 }
113 jQuery('#gform_uploaded_files_' + formId).val(jQuery.toJSON(files));
114 }
115 }
116 }
117 }
118 var input_ids = [];
119 function change_name_and_ids(item , field_end = null, key = null){
120 if( key == null ){
121 var id_rand = Math.floor(Math.random() * 10000);
122 }else{
123 var id_rand = key;
124 }
125 var datas = JSON.parse(field_end.find(".gf-field-repeater-data").val());
126 var datas_ids = datas.id;
127 datas_ids.push(id_rand);
128 datas.id = datas_ids;
129 field_end.find(".gf-field-repeater-data").val(JSON.stringify(datas));
130 item = $(item);
131 item.attr("data-id",id_rand);
132 $(".gform_fileupload_multifile",item).each(function(){
133 var id = $(this).attr("id");
134 var container_item = $(this).closest(".gfield gfield--type-fileupload");
135 var settings = $(this).attr("data-settings");
136 settings = jQuery.parseJSON(settings);
137 $.each(settings, function( index, value ) {
138 switch(index) {
139 case "browse_button":
140 case "container":
141 case "drop_element":
142 case "filelist":
143 settings[index] = value + "__"+id_rand;
144 $("#"+value,item).attr("id",value + "__"+id_rand );
145 break;
146 case "multipart_params":
147 //settings["multipart_params"]["field_id"] = value.field_id + "__"+id_rand;
148 break;
149 }
150 });
151 item.append('<input type="hidden" name="'+id+'" class="agform_multifile_upload" />');
152 $(this).attr("id",id+"__"+id_rand);
153 $(this).attr("data-settings",JSON.stringify(settings));
154 names_upload.push(id+"__"+id_rand);
155 })
156 $("input",item).each(function(){
157 var name = $(this).attr("name");
158 if(name == "MAX_FILE_SIZE"){
159 return;
160 }
161 var type = $(this).attr("type");
162 var id = $(this).attr("id");
163 input_ids.push(id);
164 $(this).attr("name",name+"__"+id_rand);
165 $(this).attr("id",id+"-"+id_rand);
166 var value_check = localStorage.getItem(id+"-"+id_rand);
167 if( type == "checkbox" ){
168 if( value_check != null ){
169 $(this).attr("checked","checked");
170 }
171 } else if( type == "file" ){
172 $(this).attr("id",id+"-"+id_rand);
173 }else if( type == "radio" ){
174 $(this).attr("id",id+"-"+id_rand);
175 $(this).closest("div").find("label").attr("for",id+"-"+id_rand);
176 }
177 else{
178 if( value_check != null ){
179 $(this).val(value_check);
180 }
181 }
182 })
183 $("textarea",item).each(function(){
184 var name = $(this).attr("name");
185 var id = $(this).attr("id");
186 $(this).attr("name",name+"__"+id_rand);
187 $(this).attr("id",id+"-"+id_rand);
188 var value_check = localStorage.getItem(id+"-"+id_rand);
189 if( value_check != null ){
190 $(this).val(value_check);
191 }
192 })
193 $("select",item).each(function(){
194 var name = $(this).attr("name");
195 var id = $(this).attr("id");
196 $(this).attr("name",name+"__"+id_rand);
197 $(this).attr("id",id+"-"+id_rand);
198 var value_check = localStorage.getItem(id+"-"+id_rand);
199 if( value_check != null ){
200 $(this).val(value_check);
201 }
202 })
203 return item;
204 }
205 function add_repeater_data(button, key=null){
206 var start_field;
207 if(key == null){
208 var key = Math.floor(Math.random() * 10000);
209 }
210 var item = $('<div class="repeater-field-item"><div class="repeater-field-header"></div><div class="repeater-field-content"></div></div>');
211 button.prevAll().each(function(index){
212 var item = $(this).clone();
213 if( item.hasClass("gfield--type-repeater_start") ) {
214 start_field = $(this);
215 return false;
216 }
217 })
218 var html_field = get_repeater_data(button,key);
219 var header = get_repeater_data_header(start_field);
220 item.find(".repeater-field-header").append(header);
221 item.find(".repeater-field-content").append(html_field);
222 button.find(".repeater-field-warp-item").append(item);
223 update_repeater_count_header();
224 $( "input" ).trigger( "done_load_repeater" );
225 var j = 0;
226 $.each( names_upload, function( key, value ) {
227 gfMultiFileUploader.setup("#"+value);
228 names_upload.splice(j, 1);
229 j++;
230 });
231 var input_mask = yeeaddons_gf_repeater_data.input_mask;
232 $.each( input_ids, function( key_1, value_1 ) {
233 if(value_1 in input_mask){
234 $('#'+value_1+"-"+key).mask(input_mask[value_1]).bind('keypress', function(e){if(e.which == 13){jQuery(this).blur();} } )
235 }
236 });
237 conditional_logic_custom(key);
238 input_ids = [];
239 $( '.gform-datepicker' ).each( function() {
240 var $element = $( this );
241 initSingleDatepicker( $element );
242 $element.addClass( 'initialized' );
243 } );
244 }
245 function conditional_logic_custom(rand){
246 return;
247 var value_check = $("#input_1_13-"+rand).val();
248 if(value_check == "Other" || value_check == "other"){
249 $("#input_1_14-"+rand).closest(".gfield").addClass("hidden");
250 }else{
251 $("#input_1_14-"+rand).closest(".gfield").removeClass("hidden");
252 }
253 }
254 gform.addAction( 'gform_input_change', function( elem, formId, fieldId ) {
255 var datas = $(elem).attr("name").split("__");;
256 if( datas.length>1 ){
257 conditional_logic_custom(datas[1]);
258 }
259 }, 10 );
260 function get_repeater_data(step_field,key=null){
261 var data_html = step_field.find(".gf-field-repeater-data-html").val();
262 if(data_html == ""){
263 data_html = step_field.find(".gf-field-repeater-data-html").attr('value');
264 }
265 var html_step = change_name_and_ids(data_html,step_field,key);
266 return html_step;
267 }
268 function get_repeater_data_name(){
269 var i = 1;
270 $(".gfield--type-repeater_start").each(function(){
271 if($(this).data("installed") == "installed"){
272 return;
273 }
274 $(this).data("installed","installed");
275 $(this).addClass("installed");
276 var html_step = $("<div class='container-repeater-field'></div>");
277 var names = [];
278 var step_field = "";
279 var elements = $(this).nextAll();
280 var value = "";
281 elements.each(function(index){
282 var item = $(this).clone();
283 if( item.hasClass("gfield--type-repeater_end") ) {
284 $(this).attr("data-id",i);
285 value = $(this).find("input").val();
286 if(value == ""){
287 value = $(this).find("input").attr("value");
288 }
289 step_field = $(this);
290 $(this).find(".gf-field-repeater-data").val(JSON.stringify({"count":1,"fields":names,"id":[]}));
291 $(this).find(".gf-field-repeater-data").attr("value",JSON.stringify({"count":1,"fields":names,"id":[]}));
292 return false;
293 }
294 $(this).remove();
295 html_step.append(item);
296 var check_name = null;
297 if(item.find(".ginput_container_fileupload").length > 0 ){
298 var name = item.find("input[type=file]").attr("name");
299 if( name === undefined ){
300 name = item[0].id;
301 name = name.split("field");
302 names.push("gform_multifile_upload"+name[1]);
303 }else{
304 names.push(item.find("input[type=file]").attr("name"));
305 }
306 }else{
307 if( item.find("input").attr("name") ) {
308 names.push(item.find("input").attr("name"));
309 }else if( item.find("textarea").attr("name") ){
310 names.push(item.find("textarea").attr("name"));
311 }else if( item.find("select").attr("name") ){
312 names.push(item.find("select").attr("name"));
313 }else{
314 var type = item.find("input").attr("type");
315 names.push(item.find("input").attr("name"));
316 }
317 }
318 })
319 var text_html = "<div class='container-repeater-field'>"+html_step.html()+"</div>";
320 step_field.find(".gf-field-repeater-data-html").val(text_html);
321 step_field.find(".gf-field-repeater-data-html").attr("value",text_html);
322 var initial_rows = 1;
323 initial_rows = step_field.find(".repeater-field-warp-item-data").data("initial_rows");
324 var initial_rows_map_field = step_field.find(".repeater-field-warp-item-data").data("initial_rows_map");
325 var initial_rows_map_number = $("#"+initial_rows_map_field).val();
326 if(initial_rows_map_number == ""){
327 initial_rows_map_number = $("#"+initial_rows_map_field).attr("value");
328 }
329 if(initial_rows_map_number > 0){
330 $("#"+initial_rows_map_field).attr("data-repeater",step_field.find(".repeater-field-warp-item-data").data("map_id"));
331 $("#"+initial_rows_map_field).attr("repeater_initial_rows","ok");
332 initial_rows = initial_rows_map_number;
333 step_field.find(".gf-repeater-field-button-add").addClass("hidden");
334 step_field.addClass("repeater-remove-toolbar");
335 }
336 if( value != "" ){
337 value = JSON.parse(value);
338 initial_rows = value.count;
339 var data_arr_ids = value.id;
340 setTimeout(function() {
341 for (var j = 0; j < initial_rows; j++) {
342 add_repeater_data(step_field.closest(".gfield--type-repeater_end"),data_arr_ids[j]);
343 }
344 }, 100);
345 }else{
346 setTimeout(function() {
347 for (var j = 0; j < initial_rows; j++) {
348 add_repeater_data(step_field.closest(".gfield--type-repeater_end"));
349 }
350 }, 100);
351 }
352 i++;
353 })
354 }
355 $("body").on("change","[repeater_initial_rows='ok']",function (e){
356 var repeater_id = $(this).data("repeater");
357 $("#"+repeater_id).find(".repeater-field-item").remove();
358 var number = $(this).val();
359 if(number == ""){
360 number = $(this).attr("value");
361 }
362 for (let i = 0; i < number; i++) {
363 $("#"+repeater_id).find(".gf-repeater-field-button-add").click();
364 }
365 })
366 function get_repeater_data_header(start_field){
367 var html_step = start_field.find(".repeater-field-header-data").val();
368 if(html_step == ""){
369 html_step = start_field.find(".repeater-field-header-data").attr("value");
370 }
371 return html_step;
372 }
373 function update_repeater_count_header(){
374 $(".gfield--type-repeater_end").each(function(){
375 var i = 1;
376 $(".repeater-field-item",$(this)).each(function(){
377 $(this).find(".repeater-field-header-count").html(i);
378 i++;
379 })
380 var data_js = $(this).find(".gf-field-repeater-data").val();
381 if(data_js == ""){
382 $(this).find(".gf-field-repeater-data").attr("value");
383 }
384 var datas = JSON.parse(data_js);
385 datas.count = i-1;
386 $(this).find(".gf-field-repeater-data").val(JSON.stringify(datas));
387 $(this).find(".gf-field-repeater-data").attr("value",JSON.stringify(datas));
388 });
389 }
390 function check_max_row(step_field){
391 var max = step_field.find(".repeater-field-warp-item-data").data("limit");
392 var number_item = $('.repeater-field-item',step_field).length;
393 if( number_item >= max ){
394 return false;
395 }else{
396 return true;
397 }
398 }
399 function check_min_row(step_field){
400 var min = step_field.find(".repeater-field-warp-item-data").data("initial_rows");
401 var number_item = $('.repeater-field-item',step_field).length;
402 if( number_item <= min ){
403 return false;
404 }else{
405 return true;
406 }
407 }
408 function removeAR(arr) {
409 var what, a = arguments, L = a.length, ax;
410 while (L > 1 && arr.length) {
411 what = a[--L];
412 while ((ax= arr.indexOf(what)) !== -1) {
413 arr.splice(ax, 1);
414 }
415 }
416 return arr;
417 }
418 $("body").on("click",".gf-repeater-field-button-add",function(e){
419 e.preventDefault();
420 if( check_max_row($(this).closest(".gfield--type-repeater_end")) ){
421 add_repeater_data($(this).closest(".gfield--type-repeater_end"));
422 }else{
423 $(this).addClass('hidden');
424 }
425 })
426 $("body").on("click",".repeater-field-header-acctions-toogle",function(e){
427 e.preventDefault();
428 if( $(this).hasClass("icon-down-open")){
429 $(this).removeClass("icon-down-open");
430 $(this).addClass("icon-up-open");
431 }else{
432 $(this).addClass("icon-down-open");
433 $(this).removeClass("icon-up-open");
434 }
435 $(this).closest(".repeater-field-item").find(".repeater-field-content").slideToggle("slow");
436 $(this).closest(".repeater-field-item").find(".repeater-field-header").toggleClass('repeater-content-show');
437 })
438 $("body").on("click",".repeater-field-header-acctions-remove",function(e){
439 e.preventDefault();
440 $(this).closest(".gfield--type-repeater_end").find(".gf-repeater-field-button-add").removeClass('hidden');
441 if( check_min_row($(this).closest(".gfield--type-repeater_end")) ){
442 var id = $(this).closest(".repeater-field-item").find(".container-repeater-field").data("id");
443 var data_js = $(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").val();
444 if(data_js == ""){
445 data_js = $(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").attr("value");
446 }
447 var datas = JSON.parse(data_js);
448 var datas_ids = datas.id;
449 datas_ids = removeAR(datas_ids,id);
450 datas.id = datas_ids;
451 $(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").val(JSON.stringify(datas));
452 $(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").attr("value",JSON.stringify(datas));
453 $(this).closest(".repeater-field-item").remove();
454 }else{
455 }
456 update_repeater_count_header();
457 })
458 //date pick
459 function getDatepickerI18n() {
460 var i18n = gform_i18n.datepicker;
461 return {
462 dayNamesMin: [
463 i18n.days.sunday,
464 i18n.days.monday,
465 i18n.days.tuesday,
466 i18n.days.wednesday,
467 i18n.days.thursday,
468 i18n.days.friday,
469 i18n.days.saturday,
470 ],
471 monthNamesShort: [
472 i18n.months.january,
473 i18n.months.february,
474 i18n.months.march,
475 i18n.months.april,
476 i18n.months.may,
477 i18n.months.june,
478 i18n.months.july,
479 i18n.months.august,
480 i18n.months.september,
481 i18n.months.october,
482 i18n.months.november,
483 i18n.months.december,
484 ],
485 firstDay: i18n.firstDay,
486 iconText: i18n.iconText,
487 };
488 }
489 /**
490 * @function getDatepickerBaseOptions
491 * @description Return base options object that configures the datepicker.
492 * @param $element The datepicker trigger.
493 * @since 2.5
494 *
495 * @returns {{
496 * suppressDatePicker: boolean,
497 * changeMonth: boolean,
498 * changeYear: boolean,
499 * onClose: onClose,
500 * yearRange: string,
501 * dateFormat: string,
502 * showOn: string,
503 * dayNamesMin: *[],
504 * monthNamesShort: *[],
505 * beforeShow: (function(*, *): boolean),
506 * showOtherMonths: boolean
507 * }}
508 */
509 function getDatepickerBaseOptions( $element ) {
510 var i18n = getDatepickerI18n();
511 var isThemeDatepicker = $element.closest( '.gform_wrapper' ).length > 0;
512 var isPreview = $( '#preview_form_container' ).length > 0;
513 var isRTL = window.getComputedStyle($element[0], null).getPropertyValue('direction') === 'rtl';
514 var formTheme = isThemeDatepicker ? $element.closest( '.gform_wrapper' ).data( 'form-theme' ) : 'gravity-theme';
515 var formId = isThemeDatepicker ? $element.closest( '.gform_wrapper' ).attr( 'id' ).replace( 'gform_wrapper_', '' ) : '';
516 var formPageInstance = isThemeDatepicker ? $element.closest( '.gform_wrapper' ).attr( 'data-form-index' ) : '';
517 return {
518 yearRange: '-100:+20',
519 showOn: 'focus',
520 dateFormat: 'mm/dd/yy',
521 dayNamesMin: i18n.dayNamesMin,
522 monthNamesShort: i18n.monthNamesShort,
523 firstDay: i18n.firstDay,
524 changeMonth: true,
525 changeYear: true,
526 isRTL: isRTL,
527 showOtherMonths: isThemeDatepicker,
528 suppressDatePicker: false,
529 onClose: function() {
530 var self = this;
531 $element.focus();
532 this.suppressDatePicker = true;
533 setTimeout( function() {
534 self.suppressDatePicker = false;
535 }, 200 );
536 },
537 beforeShow: function( input, inst ) {
538 // Remove any classes that were added before as it could have been added to a different datepicker.
539 inst.dpDiv[0].classList.remove( 'gform-theme-datepicker' );
540 inst.dpDiv[0].classList.remove( 'gravity-theme' );
541 inst.dpDiv[0].classList.remove( 'gform-theme' );
542 inst.dpDiv[0].classList.remove( 'gform-legacy-datepicker' );
543 inst.dpDiv[0].classList.remove( 'gform-theme--framework' );
544 inst.dpDiv[0].classList.remove( 'gform-theme--foundation' );
545 inst.dpDiv[0].classList.remove( 'gform-theme--orbital' );
546 if ( isThemeDatepicker ) {
547 inst.dpDiv[ 0 ].classList.add( 'gform-theme-datepicker' );
548 $( inst.dpDiv[ 0 ] ).attr( 'data-parent-form', formId + '_' + formPageInstance );
549 }
550 if ( formTheme === undefined || formTheme === 'gravity-theme' ) {
551 $( inst.dpDiv[0] ).addClass( 'gravity-theme' );
552 } else if ( formTheme === 'legacy' ) {
553 $( inst.dpDiv[0] ).addClass( 'gform-legacy-datepicker' );
554 }
555 else {
556 $( inst.dpDiv[0] ).addClass( 'gform-theme--' + formTheme );
557 if ( formTheme === 'orbital' ) {
558 $( inst.dpDiv[0] ).addClass( 'gform-theme--framework' );
559 $( inst.dpDiv[0] ).addClass( 'gform-theme--foundation' );
560 }
561 }
562 if ( isRTL && isPreview ) {
563 var $inputContainer = $( input ).closest( '.gfield' );
564 var rightOffset = $( document ).outerWidth() - ( $inputContainer.offset().left + $inputContainer.outerWidth() );
565 inst.dpDiv[ 0 ].style.right = rightOffset + 'px';
566 }
567 return ! this.suppressDatePicker;
568 },
569 };
570 }
571 /**
572 * @function initSingleDatepicker
573 * @description Initialize a datepicker assigning various additional options based on the trigger element.
574 * @param $element The datepicker trigger.
575 * @since 2.4
576 */
577 function initSingleDatepicker( $element ) {
578 var i18n = getDatepickerI18n();
579 var inputId = $element.attr( 'id' ) ? $element.attr( 'id' ) : '';
580 var optionsObj = getDatepickerBaseOptions( $element );
581 if ( $element.hasClass( 'dmy' ) ) {
582 optionsObj.dateFormat = 'dd/mm/yy';
583 } else if ( $element.hasClass( 'dmy_dash' ) ) {
584 optionsObj.dateFormat = 'dd-mm-yy';
585 } else if ( $element.hasClass( 'dmy_dot' ) ) {
586 optionsObj.dateFormat = 'dd.mm.yy';
587 } else if ( $element.hasClass( 'ymd_slash' ) ) {
588 optionsObj.dateFormat = 'yy/mm/dd';
589 } else if ( $element.hasClass( 'ymd_dash' ) ) {
590 optionsObj.dateFormat = 'yy-mm-dd';
591 } else if ( $element.hasClass( 'ymd_dot' ) ) {
592 optionsObj.dateFormat = 'yy.mm.dd';
593 }
594 if ( $element.hasClass( 'gdatepicker_with_icon' ) ) {
595 optionsObj.showOn = 'both';
596 optionsObj.buttonImage = $element.parent().siblings( "[id^='gforms_calendar_icon_input']" ).val();
597 optionsObj.buttonImageOnly = true;
598 optionsObj.buttonText = i18n.iconText;
599 } else {
600 optionsObj.showOn = 'focus';
601 }
602 inputId = inputId.split( '_' );
603 // allow the user to override the datepicker options object
604 optionsObj = gform.applyFilters( 'gform_datepicker_options_pre_init', optionsObj, inputId[ 1 ], inputId[ 2 ], $element );
605 $element.datepicker( optionsObj );
606 // We give the input focus after selecting a date which differs from default Datepicker behavior; this prevents
607 // users from clicking on the input again to open the datepicker. Let's add a manual click event to handle this.
608 if ( $element.is( ':input' ) ) {
609 $element.click( function() {
610 $element.datepicker( 'show' );
611 } );
612 }
613 }
614 })
615 $(document).on("change",".gfield--type-repeater_end input,.gfield--type-repeater_end textarea,.gfield--type-repeater_end select",function(event) {
616 var id = $(this).attr("id");
617 if (typeof(Storage) !== "undefined") {
618 if ($(this).attr("name") != "" && typeof $(this).attr("name") != 'undefined') {
619 var type = $(this).attr("type");
620 var name = $(this).attr("id");
621 if( type == "checkbox" ) {
622 if( $("#"+name+":checked").length > 0 ) {
623 var value = $("#"+name+":checked").val();
624 localStorage.setItem(id, value);
625 }else{
626 localStorage.removeItem(id);
627 }
628 }else{
629 var value = $(this).val();
630 localStorage.setItem(id, value);
631 }
632 }
633 }
634 });
635 })(jQuery);