PluginProbe
Repeater Fields for Gravity Forms / 2.0.5
Repeater Fields for Gravity Forms v2.0.5
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.0.5, at libs/wp_repeater.js

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