| 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, row_data = 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 |
|
| 312 |
function get_saved_field_val(fieldName) { |
| 313 |
if (!row_data || typeof row_data !== 'object') { |
| 314 |
return null; |
| 315 |
} |
| 316 |
var clean = fieldName.replace(/\[\]$/, ''); |
| 317 |
if (row_data[clean] !== undefined) { |
| 318 |
return row_data[clean]; |
| 319 |
} |
| 320 |
var withUnderscore = clean.replace(/\./g, '_'); |
| 321 |
if (row_data[withUnderscore] !== undefined) { |
| 322 |
return row_data[withUnderscore]; |
| 323 |
} |
| 324 |
for (var rk in row_data) { |
| 325 |
if (rk === clean || rk === withUnderscore || rk.replace(/\./g, '_') === withUnderscore) { |
| 326 |
return row_data[rk]; |
| 327 |
} |
| 328 |
} |
| 329 |
return null; |
| 330 |
} |
| 331 |
|
| 332 |
$(".gfield_visibility_visible", item).each(function () { |
| 333 |
var id = $(this).attr("id"); |
| 334 |
$(this).attr("id", id + "-" + id_rand); |
| 335 |
$(this).attr("data-js-reload", id + "-" + id_rand); |
| 336 |
}) |
| 337 |
$(".gform_fileupload_multifile", item).each(function () { |
| 338 |
var id = $(this).attr("id"); |
| 339 |
var container_item = $(this).closest(".gfield gfield--type-fileupload"); |
| 340 |
var settings = $(this).attr("data-settings"); |
| 341 |
settings = jQuery.parseJSON(settings); |
| 342 |
$.each(settings, function (index, value) { |
| 343 |
switch (index) { |
| 344 |
case "browse_button": |
| 345 |
case "container": |
| 346 |
case "drop_element": |
| 347 |
case "filelist": |
| 348 |
settings[index] = value + "__" + id_rand; |
| 349 |
$("#" + value, item).attr("id", value + "__" + id_rand); |
| 350 |
break; |
| 351 |
case "multipart_params": |
| 352 |
//settings["multipart_params"]["field_id"] = value.field_id + "__"+id_rand; |
| 353 |
break; |
| 354 |
} |
| 355 |
}); |
| 356 |
item.append('<input type="hidden" name="' + id + '" class="gform_multifile_upload" />'); |
| 357 |
$(this).attr("id", id + "__" + id_rand); |
| 358 |
$(this).attr("data-settings", JSON.stringify(settings)); |
| 359 |
names_upload.push(id + "__" + id_rand); |
| 360 |
}) |
| 361 |
$("input", item).each(function () { |
| 362 |
var name = $(this).attr("name"); |
| 363 |
if (typeof name !== 'string' || name == "MAX_FILE_SIZE") { |
| 364 |
return; |
| 365 |
} |
| 366 |
var type = $(this).attr("type"); |
| 367 |
var id = $(this).attr("id"); |
| 368 |
input_ids.push(id); |
| 369 |
var original_name = name; |
| 370 |
if (name != "" && name.endsWith('[]')) { |
| 371 |
name = name.replace(/\[\]$/, ''); |
| 372 |
$(this).attr("name", name + "__" + id_rand + "[]"); |
| 373 |
} else { |
| 374 |
$(this).attr("name", name + "__" + id_rand); |
| 375 |
} |
| 376 |
$(this).attr("id", id + "-" + id_rand); |
| 377 |
if ($(this).hasClass('gform-datepicker') || $(this).hasClass('datepicker')) { |
| 378 |
$(this).removeAttr('data-initialized').removeData('initialized').removeClass('hasDatepicker'); |
| 379 |
if (this.dataset) { |
| 380 |
delete this.dataset.initialized; |
| 381 |
delete this.dataset.toggleClickedBeforeInit; |
| 382 |
} |
| 383 |
var $toggleBtn = $(this).siblings('.gform-datepicker-toggle'); |
| 384 |
if (!$toggleBtn.length) { |
| 385 |
$toggleBtn = $(this).closest('.ginput_container_date').find('.gform-datepicker-toggle'); |
| 386 |
} |
| 387 |
if ($toggleBtn.length) { |
| 388 |
$toggleBtn.attr('id', 'datepicker_toggle_' + id + '-' + id_rand); |
| 389 |
$toggleBtn.attr('aria-controls', id + '-' + id_rand); |
| 390 |
} |
| 391 |
var $kbd = $(this).siblings('#keyboardHint_' + id); |
| 392 |
if (!$kbd.length) { |
| 393 |
$kbd = $(this).closest('.ginput_container_date').find('#keyboardHint_' + id); |
| 394 |
} |
| 395 |
if ($kbd.length) { |
| 396 |
$kbd.attr('id', 'keyboardHint_' + id + '-' + id_rand); |
| 397 |
} |
| 398 |
} |
| 399 |
var value_check = localStorage.getItem(id + "-" + id_rand); |
| 400 |
var saved_val = get_saved_field_val(name + "__" + id_rand); |
| 401 |
if (saved_val === null) { |
| 402 |
saved_val = get_saved_field_val(original_name + "__" + id_rand); |
| 403 |
} |
| 404 |
if (type == "checkbox") { |
| 405 |
$(this).closest("div").find("label").attr("for", id + "-" + id_rand); |
| 406 |
if (saved_val !== null) { |
| 407 |
var is_checked = false; |
| 408 |
if (Array.isArray(saved_val)) { |
| 409 |
is_checked = saved_val.indexOf($(this).val()) !== -1; |
| 410 |
} else { |
| 411 |
is_checked = ($(this).val() == saved_val); |
| 412 |
} |
| 413 |
if (is_checked) { |
| 414 |
$(this).prop("checked", true).attr("checked", "checked"); |
| 415 |
} else { |
| 416 |
$(this).prop("checked", false).removeAttr("checked"); |
| 417 |
} |
| 418 |
} else if (value_check != null) { |
| 419 |
$(this).prop("checked", true).attr("checked", "checked"); |
| 420 |
} |
| 421 |
} else if (type == "file") { |
| 422 |
$(this).attr("id", id + "-" + id_rand); |
| 423 |
if (saved_val && typeof saved_val === 'string' && saved_val.indexOf('http') === 0) { |
| 424 |
var $fileContainer = $(this).closest('.ginput_container_fileupload'); |
| 425 |
if ($fileContainer.length && !$fileContainer.find('.gf-repeater-saved-file').length) { |
| 426 |
var fileName = saved_val.split('/').pop(); |
| 427 |
$fileContainer.append('<div class="gf-repeater-saved-file" style="margin-top:5px;font-size:13px;">' + |
| 428 |
'<a href="' + encodeURI(saved_val) + '" target="_blank" rel="noopener">' + (fileName || saved_val) + '</a>' + |
| 429 |
'<input type="hidden" name="' + name + '__' + id_rand + '" value="' + saved_val + '" />' + |
| 430 |
'</div>'); |
| 431 |
} |
| 432 |
} |
| 433 |
} else if (type == "radio") { |
| 434 |
$(this).attr("id", id + "-" + id_rand); |
| 435 |
$(this).closest("div, li").find("label").attr("for", id + "-" + id_rand); |
| 436 |
if (saved_val !== null) { |
| 437 |
if ($(this).val() == saved_val) { |
| 438 |
$(this).prop("checked", true).attr("checked", "checked"); |
| 439 |
} else { |
| 440 |
$(this).prop("checked", false).removeAttr("checked"); |
| 441 |
} |
| 442 |
} else { |
| 443 |
var value_check = localStorage.getItem(name + "__" + id_rand); |
| 444 |
if (value_check != null) { |
| 445 |
var old_check = $(this).val(); |
| 446 |
if (old_check == value_check) { |
| 447 |
$(this).prop("checked", true).attr("checked", "checked"); |
| 448 |
} |
| 449 |
} |
| 450 |
} |
| 451 |
} |
| 452 |
else { |
| 453 |
// ensure the field label's "for" attribute corresponds with the field's ID |
| 454 |
$(this).closest("div").parent().find("label").attr("for", id + "-" + id_rand); |
| 455 |
if (saved_val !== null) { |
| 456 |
$(this).val(saved_val); |
| 457 |
} else if (value_check != null) { |
| 458 |
$(this).val(value_check); |
| 459 |
} |
| 460 |
} |
| 461 |
}) |
| 462 |
$("textarea", item).each(function () { |
| 463 |
var name = $(this).attr("name"); |
| 464 |
var id = $(this).attr("id"); |
| 465 |
$(this).attr("name", name + "__" + id_rand); |
| 466 |
$(this).attr("id", id + "-" + id_rand); |
| 467 |
// ensure the field label's "for" attribute corresponds with the field's ID |
| 468 |
$(this).closest("div").parent().find("label").attr("for", id + "-" + id_rand); |
| 469 |
var saved_val = get_saved_field_val(name + "__" + id_rand); |
| 470 |
if (saved_val !== null) { |
| 471 |
$(this).val(saved_val); |
| 472 |
} else { |
| 473 |
var value_check = localStorage.getItem(id + "-" + id_rand); |
| 474 |
if (value_check != null) { |
| 475 |
$(this).val(value_check); |
| 476 |
} |
| 477 |
} |
| 478 |
}) |
| 479 |
$("select", item).each(function () { |
| 480 |
var name = $(this).attr("name"); |
| 481 |
var id = $(this).attr("id"); |
| 482 |
if (name.includes("[")) { |
| 483 |
name = name.replace(/\[\]/g, ''); |
| 484 |
$(this).attr("name", name + "__" + id_rand + "[]"); |
| 485 |
} else { |
| 486 |
$(this).attr("name", name + "__" + id_rand); |
| 487 |
} |
| 488 |
$(this).attr("id", id + "-" + id_rand); |
| 489 |
// ensure the field label's "for" attribute corresponds with the field's ID |
| 490 |
$(this).closest("div").parent().find("label").attr("for", id + "-" + id_rand); |
| 491 |
var saved_val = get_saved_field_val(name + "__" + id_rand); |
| 492 |
if (saved_val !== null) { |
| 493 |
$(this).val(saved_val); |
| 494 |
} else { |
| 495 |
var value_check = localStorage.getItem(id + "-" + id_rand); |
| 496 |
if (value_check != null) { |
| 497 |
$(this).val(value_check); |
| 498 |
} |
| 499 |
} |
| 500 |
}) |
| 501 |
return item; |
| 502 |
} |
| 503 |
function add_repeater_data(button, key = null, row_data = null) { |
| 504 |
var start_field; |
| 505 |
if (key == null) { |
| 506 |
var key = Math.floor(Math.random() * 10000); |
| 507 |
} |
| 508 |
var item = $('<div class="repeater-field-item"><div class="repeater-field-header"></div><div class="repeater-field-content"></div></div>'); |
| 509 |
button.prevAll().each(function (index) { |
| 510 |
var item = $(this).clone(); |
| 511 |
if (item.hasClass("gfield--type-repeater_start")) { |
| 512 |
start_field = $(this); |
| 513 |
return false; |
| 514 |
} |
| 515 |
}) |
| 516 |
var html_field = get_repeater_data(button, key, row_data); |
| 517 |
var header = get_repeater_data_header(start_field); |
| 518 |
item.find(".repeater-field-header").append(header); |
| 519 |
item.find(".repeater-field-content").append(html_field); |
| 520 |
button.find(".repeater-field-warp-item").append(item); |
| 521 |
item.find("input[type=radio][checked], input[type=checkbox][checked]").prop("checked", true); |
| 522 |
update_repeater_count_header(); |
| 523 |
$("input").trigger("done_load_repeater"); |
| 524 |
var form_ids = button.attr("id").split("_"); |
| 525 |
if (yeeaddons_gf_repeater_data.pro == "ok") { |
| 526 |
var form_id = form_ids[1]; |
| 527 |
if (window["gf_form_conditional_logic"] !== undefined) { |
| 528 |
if (typeof window["gf_form_conditional_logic"][form_id] !== "undefined") { |
| 529 |
var dependents = window["gf_form_conditional_logic"][form_id].dependents; |
| 530 |
var dependents_new = dependents; |
| 531 |
var dependents_new_id = []; |
| 532 |
$.each(dependents, function (key_1, value) { |
| 533 |
var datas_logic = []; |
| 534 |
$.each(value, function (key_2, value_2) { |
| 535 |
datas_logic.push(value_2 + "-" + key); |
| 536 |
}) |
| 537 |
if (key_1.search("-") < 0) { |
| 538 |
dependents_new[key_1 + "-" + key] = datas_logic; |
| 539 |
dependents_new_id.push(key_1 + "-" + key); |
| 540 |
} else { |
| 541 |
dependents_new_id.push(key_1); |
| 542 |
} |
| 543 |
}); |
| 544 |
var fields = window["gf_form_conditional_logic"][form_id].fields; |
| 545 |
var fields_new = fields; |
| 546 |
$.each(fields, function (key_1, value) { |
| 547 |
var datas_logic = []; |
| 548 |
$.each(value, function (key_2, value_2) { |
| 549 |
datas_logic.push(value_2 + "-" + key); |
| 550 |
}) |
| 551 |
if (key_1.search("-") < 0) { |
| 552 |
fields_new[key_1 + "-" + key] = datas_logic; |
| 553 |
} |
| 554 |
}); |
| 555 |
var logic = window["gf_form_conditional_logic"][form_id].logic; |
| 556 |
//console.log(window["gf_form_conditional_logic"][form_id]); |
| 557 |
var logic_new = logic; |
| 558 |
$.each(logic, function (key_1, value) { |
| 559 |
if (key_1.search("-") < 0) { |
| 560 |
// use old and add new repeater |
| 561 |
logic_new[key_1 + "-" + key] = yeeaddons_change_id_logic(value, key); |
| 562 |
} else { |
| 563 |
//da them |
| 564 |
} |
| 565 |
}); |
| 566 |
var animation = window["gf_form_conditional_logic"][form_id].animation; |
| 567 |
var defaults = window["gf_form_conditional_logic"][form_id].defaults; |
| 568 |
window["gf_form_conditional_logic"][form_id] = { animation: animation, defaults: defaults, dependents: dependents_new, fields: fields_new, logic: logic_new, "ok": "ok" }; |
| 569 |
gf_apply_rules(form_id, dependents_new_id, true); |
| 570 |
} |
| 571 |
} |
| 572 |
} |
| 573 |
//end logic |
| 574 |
|
| 575 |
$.each(names_upload, function (key_1, value) { |
| 576 |
if ($("#" + value).length > 0) { |
| 577 |
gfMultiFileUploader.setup("#" + value); |
| 578 |
} |
| 579 |
}); |
| 580 |
names_upload = []; |
| 581 |
var input_mask = yeeaddons_gf_repeater_data.input_mask; |
| 582 |
$.each(input_ids, function (key_1, value_1) { |
| 583 |
if (value_1 in input_mask) { |
| 584 |
$('#' + value_1 + "-" + key).mask(input_mask[value_1]).bind('keypress', function (e) { if (e.which == 13) { jQuery(this).blur(); } }) |
| 585 |
} |
| 586 |
}); |
| 587 |
conditional_logic_custom(key); |
| 588 |
input_ids = []; |
| 589 |
$('.gform-datepicker').each(function () { |
| 590 |
var $element = $(this); |
| 591 |
if (typeof $.fn.datepicker === 'function') { |
| 592 |
// Legacy GF < 3.0: jQuery UI datepicker available |
| 593 |
if (!$element.hasClass('hasDatepicker')) { |
| 594 |
initSingleDatepicker($element); |
| 595 |
$element.addClass('initialized'); |
| 596 |
} |
| 597 |
} |
| 598 |
}); |
| 599 |
// GF 3.0+: Re-trigger datepicker initialization for the form |
| 600 |
// so GF's theme script loads the datepicker chunk and sets up delegation |
| 601 |
reinitGF3Datepicker(button); |
| 602 |
} |
| 603 |
/** |
| 604 |
* Re-trigger GF 3.0 datepicker initialization. |
| 605 |
* GF 3.0 uses lazy-loading: the datepicker chunk is only loaded when |
| 606 |
* gform/post_render fires and .gform-datepicker elements exist in the DOM. |
| 607 |
* Since the repeater removes original fields before GF checks for them, |
| 608 |
* we need to re-dispatch the event after creating new rows. |
| 609 |
*/ |
| 610 |
var _gf3DatepickerTriggered = {}; |
| 611 |
function reinitGF3Datepicker(el) { |
| 612 |
if (typeof $.fn.datepicker === 'function') { |
| 613 |
return; // Legacy jQuery UI datepicker is available, no need for GF 3.0 re-init |
| 614 |
} |
| 615 |
var $wrapper = el.closest('.gform_wrapper'); |
| 616 |
if (!$wrapper.length) return; |
| 617 |
var formId = parseInt($wrapper.attr('id').replace('gform_wrapper_', '')); |
| 618 |
if (!formId || isNaN(formId)) return; |
| 619 |
// Only trigger once per form per page load to avoid duplicate event listeners |
| 620 |
if (_gf3DatepickerTriggered[formId]) return; |
| 621 |
_gf3DatepickerTriggered[formId] = true; |
| 622 |
// Dispatch gform/post_render so GF's theme script detects datepicker fields |
| 623 |
// and lazy-loads the accessible datepicker chunk |
| 624 |
document.dispatchEvent(new CustomEvent('gform/post_render', { |
| 625 |
detail: { formId: formId, currentPage: 1 } |
| 626 |
})); |
| 627 |
} |
| 628 |
function yeeaddons_change_id_logic(value, key) { |
| 629 |
var field_rules_inner = []; |
| 630 |
if (value && value.field && Array.isArray(value.field.rules)) { // added this line to fix js issue in add more to autofill multiple data |
| 631 |
$.each(value.field.rules, function (key_2, value_2) { |
| 632 |
if (value_2.fieldId.search("-") < 0) { |
| 633 |
var field_id_1 = value_2.fieldId + "-" + key; |
| 634 |
} |
| 635 |
field_rules_inner.push({ fieldId: field_id_1, operator: value_2.operator, value: value_2.value }); |
| 636 |
}) |
| 637 |
var rules = field_rules_inner; |
| 638 |
var field = { actionType: value.field.actionType, enabled: value.field.enabled, logicType: value.field.logicType, rules: rules }; |
| 639 |
return { field: field, nextButton: value.nextButton, section: value.section }; |
| 640 |
} else { |
| 641 |
return value; |
| 642 |
} |
| 643 |
|
| 644 |
} |
| 645 |
function conditional_logic_custom(rand) { |
| 646 |
return; |
| 647 |
var value_check = $("#input_1_13-" + rand).val(); |
| 648 |
if (value_check == "Other" || value_check == "other") { |
| 649 |
$("#input_1_14-" + rand).closest(".gfield").addClass("hidden"); |
| 650 |
} else { |
| 651 |
$("#input_1_14-" + rand).closest(".gfield").removeClass("hidden"); |
| 652 |
} |
| 653 |
} |
| 654 |
gform.addAction('gform_input_change', function (elem, formId, fieldId) { |
| 655 |
var datas = $(elem).attr("name").split("__");; |
| 656 |
if (datas.length > 1) { |
| 657 |
conditional_logic_custom(datas[1]); |
| 658 |
} |
| 659 |
}, 10); |
| 660 |
function get_repeater_data(step_field, key = null, row_data = null) { |
| 661 |
var data_html = step_field.find(".gf-field-repeater-data-html").val(); |
| 662 |
if (data_html == "") { |
| 663 |
data_html = step_field.find(".gf-field-repeater-data-html").attr('value'); |
| 664 |
} |
| 665 |
var html_step = change_name_and_ids(data_html, step_field, key, row_data); |
| 666 |
return html_step; |
| 667 |
} |
| 668 |
function get_repeater_data_name() { |
| 669 |
var i = 1; |
| 670 |
$(".gfield--type-repeater_start").each(function () { |
| 671 |
if ($(this).data("installed") == "installed") { |
| 672 |
return; |
| 673 |
} |
| 674 |
$(this).data("installed", "installed"); |
| 675 |
$(this).addClass("installed"); |
| 676 |
var html_step = $("<div class='container-repeater-field'></div>"); |
| 677 |
var names = []; |
| 678 |
var step_field = ""; |
| 679 |
var elements = $(this).nextAll(); |
| 680 |
var value = ""; |
| 681 |
elements.each(function (index) { |
| 682 |
var item = $(this).clone(); |
| 683 |
if (item.hasClass("gfield--type-repeater_end")) { |
| 684 |
$(this).attr("data-id", i); |
| 685 |
value = $(this).find("input").val(); |
| 686 |
if (value == "") { |
| 687 |
value = $(this).find("input").attr("value"); |
| 688 |
} |
| 689 |
step_field = $(this); |
| 690 |
$(this).find(".gf-field-repeater-data").val(JSON.stringify({ "count": 1, "fields": names, "id": [] })); |
| 691 |
$(this).find(".gf-field-repeater-data").attr("value", JSON.stringify({ "count": 1, "fields": names, "id": [] })); |
| 692 |
return false; |
| 693 |
} |
| 694 |
$(this).remove(); |
| 695 |
html_step.append(item); |
| 696 |
var check_name = null; |
| 697 |
if (item.find(".ginput_container_fileupload").length > 0) { |
| 698 |
var name = item.find("input[type=file]").attr("name"); |
| 699 |
if (name === undefined) { |
| 700 |
name = item[0].id; |
| 701 |
name = name.split("field"); |
| 702 |
names.push("gform_multifile_upload" + name[1]); |
| 703 |
} else { |
| 704 |
names.push(item.find("input[type=file]").attr("name")); |
| 705 |
} |
| 706 |
} else { |
| 707 |
if (item.find("input").attr("name")) { |
| 708 |
var custom_n = item.find("input").attr("name"); |
| 709 |
custom_n = custom_n.replace(/\[\]$/, ''); |
| 710 |
names.push(custom_n); |
| 711 |
} else if (item.find("textarea").attr("name")) { |
| 712 |
names.push(item.find("textarea").attr("name")); |
| 713 |
} else if (item.find("select").attr("name")) { |
| 714 |
names.push(item.find("select").attr("name")); |
| 715 |
} else { |
| 716 |
var type = item.find("input").attr("type"); |
| 717 |
names.push(item.find("input").attr("name")); |
| 718 |
} |
| 719 |
} |
| 720 |
}) |
| 721 |
var text_html = "<div class='container-repeater-field'>" + html_step.html() + "</div>"; |
| 722 |
step_field.find(".gf-field-repeater-data-html").val(text_html); |
| 723 |
step_field.find(".gf-field-repeater-data-html").attr("value", text_html); |
| 724 |
var initial_rows = 1; |
| 725 |
initial_rows = step_field.find(".repeater-field-warp-item-data").data("initial_rows"); |
| 726 |
var initial_rows_map_field_check = step_field.find(".repeater-field-warp-item-data").data("initial_rows_map_check"); |
| 727 |
if (initial_rows_map_field_check != "" && initial_rows_map_field_check !== undefined) { |
| 728 |
var initial_rows_map_field = step_field.find(".repeater-field-warp-item-data").data("initial_rows_map"); |
| 729 |
var initial_rows_map_number = $("#" + initial_rows_map_field).val(); |
| 730 |
if (initial_rows_map_number == "") { |
| 731 |
initial_rows_map_number = $("#" + initial_rows_map_field).attr("value"); |
| 732 |
} |
| 733 |
if (initial_rows_map_number == "") { |
| 734 |
initial_rows_map_number = 0; |
| 735 |
} |
| 736 |
$("#" + initial_rows_map_field).attr("data-repeater", step_field.find(".repeater-field-warp-item-data").data("map_id")); |
| 737 |
$("#" + initial_rows_map_field).attr("repeater_initial_rows", "ok"); |
| 738 |
initial_rows = initial_rows_map_number; |
| 739 |
step_field.find(".gf-repeater-field-button-add").addClass("hidden"); |
| 740 |
step_field.addClass("repeater-remove-toolbar"); |
| 741 |
} |
| 742 |
if (initial_rows === undefined || initial_rows === "") { |
| 743 |
initial_rows = 1; |
| 744 |
} |
| 745 |
if (value != "") { |
| 746 |
try { |
| 747 |
var parsed_val = typeof value === "string" ? JSON.parse(value) : value; |
| 748 |
initial_rows = parsed_val.count !== undefined ? parsed_val.count : (parsed_val.id ? parsed_val.id.length : 1); |
| 749 |
var data_arr_ids = parsed_val.id || []; |
| 750 |
var saved_values = parsed_val.saved_values || null; |
| 751 |
setTimeout(function () { |
| 752 |
for (var j = 0; j < initial_rows; j++) { |
| 753 |
var row_id = data_arr_ids[j] !== undefined ? data_arr_ids[j] : null; |
| 754 |
var row_data = (saved_values && row_id && saved_values[row_id]) ? saved_values[row_id] : null; |
| 755 |
add_repeater_data(step_field.closest(".gfield--type-repeater_end"), row_id, row_data); |
| 756 |
} |
| 757 |
}, 100); |
| 758 |
} catch (e) { |
| 759 |
setTimeout(function () { |
| 760 |
for (var j = 0; j < initial_rows; j++) { |
| 761 |
add_repeater_data(step_field.closest(".gfield--type-repeater_end")); |
| 762 |
} |
| 763 |
}, 100); |
| 764 |
} |
| 765 |
} else { |
| 766 |
setTimeout(function () { |
| 767 |
for (var j = 0; j < initial_rows; j++) { |
| 768 |
add_repeater_data(step_field.closest(".gfield--type-repeater_end")); |
| 769 |
} |
| 770 |
}, 100); |
| 771 |
} |
| 772 |
i++; |
| 773 |
}) |
| 774 |
} |
| 775 |
$("body").on("change", "[repeater_initial_rows='ok']", function (e) { |
| 776 |
var repeater_id = $(this).data("repeater"); |
| 777 |
$("#" + repeater_id).find(".repeater-field-item").remove(); |
| 778 |
var number = $(this).val(); |
| 779 |
if (number == "") { |
| 780 |
number = $(this).attr("value"); |
| 781 |
} |
| 782 |
for (let i = 0; i < number; i++) { |
| 783 |
$("#" + repeater_id).find(".gf-repeater-field-button-add").click(); |
| 784 |
} |
| 785 |
}) |
| 786 |
function get_repeater_data_header(start_field) { |
| 787 |
var html_step = start_field.find(".repeater-field-header-data").val(); |
| 788 |
if (html_step == "") { |
| 789 |
html_step = start_field.find(".repeater-field-header-data").attr("value"); |
| 790 |
} |
| 791 |
return html_step; |
| 792 |
} |
| 793 |
function update_repeater_count_header() { |
| 794 |
$(".gfield--type-repeater_end").each(function () { |
| 795 |
var i = 1; |
| 796 |
$(".repeater-field-item", $(this)).each(function () { |
| 797 |
$(this).find(".repeater-field-header-count").html(i); |
| 798 |
i++; |
| 799 |
}) |
| 800 |
var data_js = $(this).find(".gf-field-repeater-data").val(); |
| 801 |
if (data_js == "") { |
| 802 |
$(this).find(".gf-field-repeater-data").attr("value"); |
| 803 |
} |
| 804 |
var datas = JSON.parse(data_js); |
| 805 |
datas.count = i - 1; |
| 806 |
$(this).find(".gf-field-repeater-data").val(JSON.stringify(datas)); |
| 807 |
$(this).find(".gf-field-repeater-data").attr("value", JSON.stringify(datas)); |
| 808 |
}); |
| 809 |
} |
| 810 |
function check_max_row(step_field) { |
| 811 |
var max = step_field.find(".repeater-field-warp-item-data").data("limit"); |
| 812 |
var number_item = $('.repeater-field-item', step_field).length; |
| 813 |
if (number_item >= max) { |
| 814 |
return false; |
| 815 |
} else { |
| 816 |
return true; |
| 817 |
} |
| 818 |
} |
| 819 |
function check_min_row(step_field) { |
| 820 |
var min = step_field.find(".repeater-field-warp-item-data").data("initial_rows"); |
| 821 |
var number_item = $('.repeater-field-item', step_field).length; |
| 822 |
if (number_item <= min) { |
| 823 |
return false; |
| 824 |
} else { |
| 825 |
return true; |
| 826 |
} |
| 827 |
} |
| 828 |
function removeAR(arr) { |
| 829 |
var what, a = arguments, L = a.length, ax; |
| 830 |
while (L > 1 && arr.length) { |
| 831 |
what = a[--L]; |
| 832 |
while ((ax = arr.indexOf(what)) !== -1) { |
| 833 |
arr.splice(ax, 1); |
| 834 |
} |
| 835 |
} |
| 836 |
return arr; |
| 837 |
} |
| 838 |
$("body").on("click", ".gf-repeater-field-button-add", function (e) { |
| 839 |
e.preventDefault(); |
| 840 |
if (check_max_row($(this).closest(".gfield--type-repeater_end"))) { |
| 841 |
add_repeater_data($(this).closest(".gfield--type-repeater_end")); |
| 842 |
} else { |
| 843 |
$(this).addClass('hidden'); |
| 844 |
} |
| 845 |
}) |
| 846 |
$("body").on("click", ".repeater-field-header-acctions-toogle", function (e) { |
| 847 |
e.preventDefault(); |
| 848 |
if ($(this).hasClass("icon-down-open")) { |
| 849 |
$(this).removeClass("icon-down-open"); |
| 850 |
$(this).addClass("icon-up-open"); |
| 851 |
} else { |
| 852 |
$(this).addClass("icon-down-open"); |
| 853 |
$(this).removeClass("icon-up-open"); |
| 854 |
} |
| 855 |
$(this).closest(".repeater-field-item").find(".repeater-field-content").slideToggle("slow"); |
| 856 |
$(this).closest(".repeater-field-item").find(".repeater-field-header").toggleClass('repeater-content-show'); |
| 857 |
}) |
| 858 |
$("body").on("click", ".repeater-field-header-acctions-remove", function (e) { |
| 859 |
e.preventDefault(); |
| 860 |
$(this).closest(".gfield--type-repeater_end").find(".gf-repeater-field-button-add").removeClass('hidden'); |
| 861 |
if (check_min_row($(this).closest(".gfield--type-repeater_end"))) { |
| 862 |
var id = $(this).closest(".repeater-field-item").find(".container-repeater-field").data("id"); |
| 863 |
var data_js = $(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").val(); |
| 864 |
if (data_js == "") { |
| 865 |
data_js = $(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").attr("value"); |
| 866 |
} |
| 867 |
var datas = JSON.parse(data_js); |
| 868 |
var datas_ids = datas.id; |
| 869 |
datas_ids = removeAR(datas_ids, id); |
| 870 |
datas.id = datas_ids; |
| 871 |
$(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").val(JSON.stringify(datas)); |
| 872 |
$(this).closest(".gfield--type-repeater_end").find(".gf-field-repeater-data").attr("value", JSON.stringify(datas)); |
| 873 |
$(this).closest(".repeater-field-item").remove(); |
| 874 |
} else { |
| 875 |
} |
| 876 |
update_repeater_count_header(); |
| 877 |
}) |
| 878 |
//date pick |
| 879 |
function getDatepickerI18n() { |
| 880 |
var i18n = gform_i18n.datepicker; |
| 881 |
return { |
| 882 |
dayNamesMin: [ |
| 883 |
i18n.days.sunday, |
| 884 |
i18n.days.monday, |
| 885 |
i18n.days.tuesday, |
| 886 |
i18n.days.wednesday, |
| 887 |
i18n.days.thursday, |
| 888 |
i18n.days.friday, |
| 889 |
i18n.days.saturday, |
| 890 |
], |
| 891 |
monthNamesShort: [ |
| 892 |
i18n.months.january, |
| 893 |
i18n.months.february, |
| 894 |
i18n.months.march, |
| 895 |
i18n.months.april, |
| 896 |
i18n.months.may, |
| 897 |
i18n.months.june, |
| 898 |
i18n.months.july, |
| 899 |
i18n.months.august, |
| 900 |
i18n.months.september, |
| 901 |
i18n.months.october, |
| 902 |
i18n.months.november, |
| 903 |
i18n.months.december, |
| 904 |
], |
| 905 |
firstDay: i18n.firstDay, |
| 906 |
iconText: i18n.iconText, |
| 907 |
}; |
| 908 |
} |
| 909 |
/** |
| 910 |
* @function getDatepickerBaseOptions |
| 911 |
* @description Return base options object that configures the datepicker. |
| 912 |
* @param $element The datepicker trigger. |
| 913 |
* @since 2.5 |
| 914 |
* |
| 915 |
* @returns {{ |
| 916 |
* suppressDatePicker: boolean, |
| 917 |
* changeMonth: boolean, |
| 918 |
* changeYear: boolean, |
| 919 |
* onClose: onClose, |
| 920 |
* yearRange: string, |
| 921 |
* dateFormat: string, |
| 922 |
* showOn: string, |
| 923 |
* dayNamesMin: *[], |
| 924 |
* monthNamesShort: *[], |
| 925 |
* beforeShow: (function(*, *): boolean), |
| 926 |
* showOtherMonths: boolean |
| 927 |
* }} |
| 928 |
*/ |
| 929 |
function getDatepickerBaseOptions($element) { |
| 930 |
var i18n = getDatepickerI18n(); |
| 931 |
var isThemeDatepicker = $element.closest('.gform_wrapper').length > 0; |
| 932 |
var isPreview = $('#preview_form_container').length > 0; |
| 933 |
var isRTL = window.getComputedStyle($element[0], null).getPropertyValue('direction') === 'rtl'; |
| 934 |
var formTheme = isThemeDatepicker ? $element.closest('.gform_wrapper').data('form-theme') : 'gravity-theme'; |
| 935 |
var formId = isThemeDatepicker ? $element.closest('.gform_wrapper').attr('id').replace('gform_wrapper_', '') : ''; |
| 936 |
var formPageInstance = isThemeDatepicker ? $element.closest('.gform_wrapper').attr('data-form-index') : ''; |
| 937 |
return { |
| 938 |
yearRange: '-100:+20', |
| 939 |
showOn: 'focus', |
| 940 |
dateFormat: 'mm/dd/yy', |
| 941 |
dayNamesMin: i18n.dayNamesMin, |
| 942 |
monthNamesShort: i18n.monthNamesShort, |
| 943 |
firstDay: i18n.firstDay, |
| 944 |
changeMonth: true, |
| 945 |
changeYear: true, |
| 946 |
isRTL: isRTL, |
| 947 |
showOtherMonths: isThemeDatepicker, |
| 948 |
suppressDatePicker: false, |
| 949 |
onClose: function () { |
| 950 |
var self = this; |
| 951 |
$element.focus(); |
| 952 |
this.suppressDatePicker = true; |
| 953 |
setTimeout(function () { |
| 954 |
self.suppressDatePicker = false; |
| 955 |
}, 200); |
| 956 |
}, |
| 957 |
beforeShow: function (input, inst) { |
| 958 |
// Remove any classes that were added before as it could have been added to a different datepicker. |
| 959 |
inst.dpDiv[0].classList.remove('gform-theme-datepicker'); |
| 960 |
inst.dpDiv[0].classList.remove('gravity-theme'); |
| 961 |
inst.dpDiv[0].classList.remove('gform-theme'); |
| 962 |
inst.dpDiv[0].classList.remove('gform-legacy-datepicker'); |
| 963 |
inst.dpDiv[0].classList.remove('gform-theme--framework'); |
| 964 |
inst.dpDiv[0].classList.remove('gform-theme--foundation'); |
| 965 |
inst.dpDiv[0].classList.remove('gform-theme--orbital'); |
| 966 |
if (isThemeDatepicker) { |
| 967 |
inst.dpDiv[0].classList.add('gform-theme-datepicker'); |
| 968 |
$(inst.dpDiv[0]).attr('data-parent-form', formId + '_' + formPageInstance); |
| 969 |
} |
| 970 |
if (formTheme === undefined || formTheme === 'gravity-theme') { |
| 971 |
$(inst.dpDiv[0]).addClass('gravity-theme'); |
| 972 |
} else if (formTheme === 'legacy') { |
| 973 |
$(inst.dpDiv[0]).addClass('gform-legacy-datepicker'); |
| 974 |
} |
| 975 |
else { |
| 976 |
$(inst.dpDiv[0]).addClass('gform-theme--' + formTheme); |
| 977 |
if (formTheme === 'orbital') { |
| 978 |
$(inst.dpDiv[0]).addClass('gform-theme--framework'); |
| 979 |
$(inst.dpDiv[0]).addClass('gform-theme--foundation'); |
| 980 |
} |
| 981 |
} |
| 982 |
if (isRTL && isPreview) { |
| 983 |
var $inputContainer = $(input).closest('.gfield'); |
| 984 |
var rightOffset = $(document).outerWidth() - ($inputContainer.offset().left + $inputContainer.outerWidth()); |
| 985 |
inst.dpDiv[0].style.right = rightOffset + 'px'; |
| 986 |
} |
| 987 |
return !this.suppressDatePicker; |
| 988 |
}, |
| 989 |
}; |
| 990 |
} |
| 991 |
/** |
| 992 |
* @function initSingleDatepicker |
| 993 |
* @description Initialize a datepicker assigning various additional options based on the trigger element. |
| 994 |
* @param $element The datepicker trigger. |
| 995 |
* @since 2.4 |
| 996 |
*/ |
| 997 |
function initSingleDatepicker($element) { |
| 998 |
var i18n = getDatepickerI18n(); |
| 999 |
var inputId = $element.attr('id') ? $element.attr('id') : ''; |
| 1000 |
var optionsObj = getDatepickerBaseOptions($element); |
| 1001 |
if ($element.hasClass('dmy')) { |
| 1002 |
optionsObj.dateFormat = 'dd/mm/yy'; |
| 1003 |
} else if ($element.hasClass('dmy_dash')) { |
| 1004 |
optionsObj.dateFormat = 'dd-mm-yy'; |
| 1005 |
} else if ($element.hasClass('dmy_dot')) { |
| 1006 |
optionsObj.dateFormat = 'dd.mm.yy'; |
| 1007 |
} else if ($element.hasClass('ymd_slash')) { |
| 1008 |
optionsObj.dateFormat = 'yy/mm/dd'; |
| 1009 |
} else if ($element.hasClass('ymd_dash')) { |
| 1010 |
optionsObj.dateFormat = 'yy-mm-dd'; |
| 1011 |
} else if ($element.hasClass('ymd_dot')) { |
| 1012 |
optionsObj.dateFormat = 'yy.mm.dd'; |
| 1013 |
} |
| 1014 |
if ($element.hasClass('gdatepicker_with_icon')) { |
| 1015 |
optionsObj.showOn = 'both'; |
| 1016 |
optionsObj.buttonImage = $element.parent().siblings("[id^='gforms_calendar_icon_input']").val(); |
| 1017 |
optionsObj.buttonImageOnly = true; |
| 1018 |
optionsObj.buttonText = i18n.iconText; |
| 1019 |
} else { |
| 1020 |
optionsObj.showOn = 'focus'; |
| 1021 |
} |
| 1022 |
inputId = inputId.split('_'); |
| 1023 |
// allow the user to override the datepicker options object |
| 1024 |
optionsObj = gform.applyFilters('gform_datepicker_options_pre_init', optionsObj, inputId[1], inputId[2], $element); |
| 1025 |
if (typeof $element.datepicker === 'function') { |
| 1026 |
$element.datepicker(optionsObj); |
| 1027 |
// We give the input focus after selecting a date which differs from default Datepicker behavior; this prevents |
| 1028 |
// users from clicking on the input again to open the datepicker. Let's add a manual click event to handle this. |
| 1029 |
if ($element.is(':input')) { |
| 1030 |
$element.click(function () { |
| 1031 |
$element.datepicker('show'); |
| 1032 |
}); |
| 1033 |
} |
| 1034 |
} |
| 1035 |
} |
| 1036 |
}) |
| 1037 |
$(document).on("change", ".gfield--type-repeater_end input,.gfield--type-repeater_end textarea,.gfield--type-repeater_end select", function (event) { |
| 1038 |
var id = $(this).attr("id"); |
| 1039 |
if (typeof (Storage) !== "undefined") { |
| 1040 |
if ($(this).attr("name") != "" && typeof $(this).attr("name") != 'undefined') { |
| 1041 |
var type = $(this).attr("type"); |
| 1042 |
var name = $(this).attr("id"); |
| 1043 |
if (type == "checkbox") { |
| 1044 |
if ($("#" + name + ":checked").length > 0) { |
| 1045 |
var value = $("#" + name + ":checked").val(); |
| 1046 |
localStorage.setItem(id, value); |
| 1047 |
} else { |
| 1048 |
localStorage.removeItem(id); |
| 1049 |
} |
| 1050 |
} else if (type == "radio") { |
| 1051 |
var id = $(this).attr("name"); |
| 1052 |
var value = $(this).val(); |
| 1053 |
localStorage.setItem(id, value); |
| 1054 |
} |
| 1055 |
else { |
| 1056 |
var value = $(this).val(); |
| 1057 |
localStorage.setItem(id, value); |
| 1058 |
} |
| 1059 |
} |
| 1060 |
} |
| 1061 |
}); |
| 1062 |
})(jQuery); |