/home/techb158/primomovers.ca/wp-content/plugins/everest-forms/assets/js/admin
Edit: /home/techb158/primomovers.ca/wp-content/plugins/everest-forms/assets/js/admin/form-builder.js (276772B)
/* global evf_data, jconfirm, PerfectScrollbar, evfSetClipboard, evfClearClipboard */
(function ($, evf_data) {
var $builder;
var evfStyleTabBaseline = null;
var EVFPanelBuilder = {
/**
* Start the panel builder.
*/
init: function () {
$(document).ready(function ($) {
if (!$('evf-panel-integrations-button a').hasClass('active')) {
$('#everest-forms-panel-integrations')
.find('.everest-forms-panel-sidebar a')
.first()
.addClass('active');
if (
$('#everest-forms-panel-integrations')
.find('.everest-forms-panel-sidebar a')
.hasClass('active')
) {
$('#everest-forms-panel-integrations')
.find('.everest-forms-panel-sidebar a')
.next('.everest-forms-active-connections')
.first()
.addClass('active');
}
$('.everest-forms-panel-content')
.find('.evf-panel-content-section')
.first()
.addClass('active');
}
//To remove script tag.
$(document).on(
'input change',
'.everest-forms-field-option-row-choices input[name$="[label]"]',
function (e) {
var $value = $(this).val();
$(this).val(
$value.replace(/<\s*script/gi, '').replace(/\s+on\w+\s*=/gi, ' '),
);
},
);
$(document).on(
'input change',
'input[name$="[required-field-message]"]',
function (e) {
var $value = $(this).val();
const htmlTagPattern = /<[^>]*>/;
const htmlEntityPattern = /&[a-zA-Z0-9#]+;/;
if (htmlTagPattern.test($value) || htmlEntityPattern.test($value)) {
$(this).val('');
} else {
$(this).val(
$value
.replace(/<\s*script/gi, '')
.replace(/\s+on\w+\s*=/gi, ' '),
);
}
},
);
$(document).on(
'click',
'.back-button, [href*="evf-builder"]:not([href*="form_id"])',
function (e) {
if (!window.location.search.includes('form_id')) {
return;
}
e.preventDefault();
window.location.href =
window.location.origin +
window.location.pathname +
'?page=evf-builder';
},
);
/**
* Disable row when form is disabled.
*
* @since 3.2.0
*/
$('.wp-list-table .everest-forms-toggle-form input').each(function () {
if (!$(this).prop('checked')) {
$(this)
.closest('tr')
.find('td')
.not('.has-row-actions, .column-enabled')
.addClass('evf-disable-row');
} else {
$(this)
.closest('tr')
.find('td')
.not('.has-row-actions, .column-enabled')
.removeClass('evf-disable-row');
}
});
});
$(document).ready(function ($) {
if ('1' === $('.everest-forms-min-max-date-format input').val()) {
$('.everest-forms-min-date')
.addClass('flatpickr-field')
.flatpickr({
disableMobile: true,
onChange: function (selectedDates, dateStr, instance) {
$('.everest-forms-min-date').val(dateStr);
},
onOpen: function (selectedDates, dateStr, instance) {
instance.set('maxDate', $('.everest-forms-max-date').val());
},
});
$('.everest-forms-max-date')
.addClass('flatpickr-field')
.flatpickr({
disableMobile: true,
onChange: function (selectedDates, dateStr, instance) {
$('.everest-forms-max-date').val(dateStr);
},
onOpen: function (selectedDates, dateStr, instance) {
instance.set('minDate', $('.everest-forms-min-date').val());
},
});
}
$('.everest-forms-min-max-date-format').each(function () {
if ($(this).find('input[type="checkbox"]').is(':checked')) {
$(this)
.next('.everest-forms-min-max-date-range-format')
.removeClass('everest-forms-hidden');
$(this)
.next()
.next('.everest-forms-min-max-date-option')
.removeClass('everest-forms-hidden');
if (
$(this)
.next('.everest-forms-min-max-date-range-format')
.find('input[type="checkbox"]')
.is(':checked')
) {
$(this)
.next()
.next()
.next('.everest-forms-min-max-date-range-option')
.removeClass('everest-forms-hidden');
$(this)
.next()
.next('.everest-forms-min-max-date-option')
.addClass('everest-forms-hidden');
}
} else {
$(this)
.next()
.next()
.next('.everest-forms-min-max-date-range-option')
.addClass('everest-forms-hidden');
$(this)
.next('.everest-forms-min-max-date-range-format')
.addClass('everest-forms-hidden');
$(this)
.next()
.next('.everest-forms-min-max-date-option')
.addClass('everest-forms-hidden');
}
});
$('.everest-forms-row-option select.evf-field-show-hide').each(
function () {
$(this).find('[selected="selected"]').prop('selected', true);
},
);
});
if (
$('#everest-forms-builder').find('.everest-forms-field-file-upload')
.length > 0
) {
if (!evf_data.is_pro) {
$('#everest-forms-add-fields-file-upload').addClass(
'evf-one-time-draggable-field',
);
}
}
if (
$('#everest-forms-builder').find(
'.everest-forms-field-payment-gateway-selector',
).length > 0
) {
$('#everest-forms-add-fields-payment-gateway-selector').addClass(
'evf-one-time-draggable-field',
);
}
EVFPanelBuilder.syncPaymentMethodDependentFields();
// Keep Payment Gateway field availability in sync with Payments tab toggles.
$(document).on(
'change click',
[
'#everest-forms-panel-field-paymentsstripe-enable_stripe',
'#everest-forms-panel-field-paypal-enable_paypal',
// Razorpay toggle id varies by version/addon; support both.
'#everest-forms-panel-field-paymentsrazorpay-enable_razorpay',
'#everest-forms-panel-field-razorpay-enable_razorpay',
'input[name*="[razorpay]"][name*="enable_razorpay"]',
'#everest-forms-panel-field-authorize_net-enable_authorize_net',
'#everest-forms-panel-field-square-enable_square',
'#everest-forms-panel-field-paymentsmollie-enable_mollie',
].join(','),
function () {
EVFPanelBuilder.syncPaymentMethodDependentFields();
},
);
// Hard-block enabling any payment gateway when Payment Gateway field is present.
// Some addons use custom toggle wrappers that can still flip even if the underlying checkbox is disabled,
// so we intercept the interaction and immediately revert.
(function () {
var blockedSelectors = [
'#everest-forms-panel-field-paymentsstripe-enable_stripe',
'#everest-forms-panel-field-paypal-enable_paypal',
// Razorpay toggle id varies by version/addon; support both.
'#everest-forms-panel-field-paymentsrazorpay-enable_razorpay',
'#everest-forms-panel-field-razorpay-enable_razorpay',
'input[name*="[razorpay]"][name*="enable_razorpay"]',
'#everest-forms-panel-field-authorize_net-enable_authorize_net',
'#everest-forms-panel-field-square-enable_square',
'#everest-forms-panel-field-paymentsmollie-enable_mollie',
];
// Capture-phase blocker: prevents addon handlers from running at all,
// avoiding a brief UI flash (settings rows showing) before our popup appears.
// We also guard "change" to catch programmatic enables.
if (!window.__evfPgwPaymentsToggleCaptureBound) {
window.__evfPgwPaymentsToggleCaptureBound = true;
function evfPgwFieldPresent() {
return (
$('#everest-forms-builder')
.find('.everest-forms-field-payment-gateway-selector')
.length > 0
);
}
function evfFindBlockedRootFromEvent(evt) {
if (!evt || !evt.target || !evt.target.closest) {
return null;
}
return evt.target.closest(blockedSelectors.join(','));
}
function evfFindCheckbox($root) {
if (!$root || !$root.length) {
return $();
}
if ($root.is('input[type="checkbox"]')) {
return $root;
}
var $in = $root.find('input[type="checkbox"]').first();
if ($in.length) {
return $in;
}
return $root.closest('li').find('input[type="checkbox"]').first();
}
function evfShowPopup() {
var title = 'Field Unavailable';
var closeText = (evf_data && evf_data.i18n_close) || 'Close';
var content =
'Payment Gateway is currently in use. Remove Payment Gateway to enable this field.';
if (typeof $.confirm === 'function') {
$.confirm({
title: title,
content: content,
buttons: {
close: {
text: closeText,
},
},
});
} else {
window.alert(content);
}
}
function evfBlockEnable(evt) {
if (!evfPgwFieldPresent()) {
return;
}
var root = evfFindBlockedRootFromEvent(evt);
if (!root) {
return;
}
var $checkbox = evfFindCheckbox($(root));
// Only show notice when enabling (unchecked -> checked).
// If already checked, user is disabling; allow silently.
if ($checkbox.length && $checkbox.is(':checked')) {
return;
}
evt.preventDefault();
evt.stopPropagation();
if ($checkbox.length) {
$checkbox.prop('checked', false);
}
evfShowPopup();
}
['pointerdown', 'mousedown', 'click'].forEach(function (type) {
document.addEventListener(type, evfBlockEnable, true);
});
// Catch programmatic enables (change fires after state flips).
document.addEventListener(
'change',
function (evt) {
if (!evfPgwFieldPresent()) {
return;
}
var root = evfFindBlockedRootFromEvent(evt);
if (!root) {
return;
}
var $checkbox = evfFindCheckbox($(root));
if ($checkbox.length && $checkbox.is(':checked')) {
evt.preventDefault();
evt.stopPropagation();
$checkbox.prop('checked', false);
evfShowPopup();
}
},
true,
);
}
// Note: we intentionally rely on the capture-phase blocker above.
// A bubble-phase handler can run after the checkbox state flips, which would show the
// notice when DISABLING. Capture-phase guarantees we only block ENABLE attempts.
})();
if (!$('evf-panel-payments-button a').hasClass('active')) {
$('#everest-forms-panel-payments')
.find('.everest-forms-panel-sidebar a')
.first()
.addClass('active');
$('.everest-forms-panel-content')
.find('.evf-payment-setting-content')
.first()
.addClass('active');
}
// Copy shortcode from the builder.
$(document.body)
.find('#copy-shortcode')
.on('click', this.copyShortcode)
.on('aftercopy', this.copySuccess)
.on('aftercopyfailure', this.copyFail);
// Copy shortcode from form list table.
$(document.body)
.find('.evf-copy-shortcode')
.each(function () {
$(this)
.on('click', EVFPanelBuilder.copyShortcode)
.on('aftercopy', EVFPanelBuilder.copySuccess)
.on('aftercopyfailure', EVFPanelBuilder.copyFail);
});
// Document ready.
$(document).ready(EVFPanelBuilder.ready);
// Page load.
$(window).on('load', EVFPanelBuilder.load);
// Initialize builder UI fields.
$(document.body)
.on('evf-init-builder-fields', function () {
EVFPanelBuilder.bindFields();
})
.trigger('evf-init-builder-fields');
// Adjust builder width.
$(document.body)
.on('adjust_builder_width', function () {
var adminMenuWidth = $('#adminmenuwrap').width();
$('#everest-forms-builder-form').css({
width: 'calc(100% - ' + adminMenuWidth + 'px)',
});
})
.trigger('adjust_builder_width');
$(document.body).on('click', '#collapse-button', function () {
$('#everest-forms-builder-form').width('');
$(document.body).trigger('adjust_builder_width');
});
$(window)
.on('resize orientationchange', function () {
var resizeTimer;
clearTimeout(resizeTimer);
resizeTimer = setTimeout(function () {
$('#everest-forms-builder').width('');
$(document.body).trigger('adjust_builder_width');
}, 250);
})
.trigger('resize');
EVFPanelBuilder.bindPrivacyPolicyActions();
$(document.body).on(
'evf_field_drop_complete',
function (e, field_type, dragged_field_id) {
EVFPanelBuilder.bindEditMetaKey(dragged_field_id);
// Keep Payment Gateway ↔ Payments tab constraints in sync after any field drop.
if (EVFPanelBuilder.syncPaymentMethodDependentFields) {
EVFPanelBuilder.syncPaymentMethodDependentFields();
}
// Set defaults in privacy policy field.
if ('privacy-policy' === field_type) {
var consent_message = evf_data.i18n_privacy_policy_consent_message;
$('#everest-forms-field-' + dragged_field_id)
.find('.evf-privacy-policy-consent-message')
.html(consent_message);
$('#everest-forms-field-option-' + dragged_field_id)
.find('.evf-privacy-policy-consent-message')
.val(consent_message);
$(
'.everest-forms-field-options #everest-forms-field-option-row-' +
dragged_field_id +
'-required',
)
.find('input')
.click();
}
if ('country' === field_type) {
$(
'#everest-forms-field-option-row-' +
dragged_field_id +
'-default',
)
.find('select.evf-select2-multiple > option')
.prop('selected', true);
}
// Payment Gateway field: server-rendered field-map options use saved form data;
// repopulate from the builder canvas so existing fields appear without reload.
if ('payment-gateway-selector' === field_type) {
EVFPanelBuilder.refreshFieldMapSelectsInContainer(
'#everest-forms-field-option-' + dragged_field_id,
dragged_field_id,
);
}
},
);
// Rating point validation error tips.
$(document.body)
.on('blur', '.evf-number-of-stars[type=number]', function () {
$('.evf_error_tip').fadeOut('100', function () {
$(this).remove();
});
})
.on('change click', '.evf-number-of-stars[type=number]', function (e) {
var number_of_stars = parseInt($(this).val(), 10);
if (number_of_stars > 100) {
$(this).val('100');
EVFPanelBuilder.livePreviewNumberOfRating($(this));
}
})
.on('keyup click', '.evf-number-of-stars[type=number]', function () {
var number_of_stars = parseInt($(this).val(), 10);
if (number_of_stars > 100) {
$(document.body).triggerHandler('evf_add_error_tip', [
$(this),
'i18n_field_rating_greater_than_max_value_error',
evf_data,
]);
} else {
$(document.body).triggerHandler('evf_remove_error_tip', [
$(this),
'i18n_field_rating_greater_than_max_value_error',
]);
}
});
// Live effect for Rating field Number of Stars option.
$(document).on(
'keyup mouseup',
'.everest-forms-field-option-row-number_of_stars input',
function () {
EVFPanelBuilder.livePreviewNumberOfRating(this);
},
);
// Live effect for Rating field icon option.
$(document).on(
'change',
'.everest-forms-field-option-row-rating-icon input[type=radio]',
function () {
var $this = $(this),
value = $this.val(),
id = $this.parent().data('field-id'),
icon_color = $('#everest-forms-field-' + id + ' .rating-icon')
.find('svg')
.first()
.css('fill');
($icons = $('#everest-forms-field-' + id + ' .rating-icon')),
(iconClass =
'
');
if ('heart' === value) {
iconClass =
'
';
} else if ('thumb' === value) {
iconClass =
'
';
} else if ('smiley' === value) {
iconClass =
'
';
} else if ('bulb' === value) {
iconClass =
'
';
}
$icons.html(iconClass);
},
);
// Live effect for Rating field icon color option.
$(document).ready(function ($) {
$(
'.everest-forms-field-option-row-icon_color input.colorpicker',
).wpColorPicker({
change: function (event) {
var $this = $(this),
value = $this.val(),
id = $this
.closest('.everest-forms-field-option-row')
.data('field-id'),
$icons = $('#everest-forms-field-' + id + ' .rating-icon svg');
$icons.css('fill', value);
},
});
});
$(document).on('click', '.evf-edit-meta-key-icon', function () {
var $wrapper = $(this).closest('.evf-meta-key-input-wrapper'),
$input = $wrapper.find('.evf-input-meta-key'),
$original_value = $(this).data('meta_key');
$input.prop('readonly', false).focus();
$(document).find('.evf-meta-key-copy-btn').hide();
$(this).hide();
if ($wrapper.find('.evf-meta-key-actions').length === 0) {
$wrapper.append(`
`);
}
if ($wrapper.find('.evf-meta-key-warning').length === 0) {
$wrapper.after(`
`);
}
$(document).on('click', '.evf-cancel-meta-key-icon', function () {
var $wrapper = $(this).closest('.evf-meta-key-input-wrapper'),
$input = $wrapper.find('.evf-input-meta-key'),
originalValue = $(this).data('original_value');
$(document).find('.evf-meta-key-copy-btn').show();
$input.val(originalValue);
$input.prop('readonly', true);
$wrapper.find('.evf-meta-key-actions').remove();
$wrapper.find('.evf-edit-meta-key-icon').show();
$wrapper.next('.evf-meta-key-warning').remove();
});
$(document).on('click', '.evf-save-meta-key-icon', function () {
var $wrapper = $(this).closest('.evf-meta-key-input-wrapper'),
$input = $wrapper.find('.evf-input-meta-key');
$(document).find('.evf-meta-key-copy-btn').show();
$input.prop('readonly', true);
$wrapper.find('.evf-meta-key-actions').remove();
$wrapper.find('.evf-edit-meta-key-icon').show();
$wrapper.next('.evf-meta-key-warning').remove();
});
});
},
/**
* Copy shortcode.
*
* @param {Object} evt Copy event.
*/
copyShortcode: function (evt) {
evfClearClipboard();
evfSetClipboard(
$(this).closest('.evf-shortcode-field').find('input').val(),
$(this),
);
evt.preventDefault();
},
/**
* Display a "Copied!" tip when success copying.
*/
copySuccess: function () {
$(this)
.tooltipster('content', $(this).attr('data-copied'))
.trigger('mouseenter')
.on('mouseleave', function () {
var $this = $(this);
setTimeout(function () {
$this.tooltipster('content', $this.attr('data-tip'));
}, 1000);
});
},
/**
* Displays the copy error message when failure copying.
*/
copyFail: function () {
$(this).closest('.evf-shortcode-field').find('input').focus().select();
},
/**
* Page load.
*
* @since 1.0.0
*/
load: function () {
$('.everest-forms-overlay').fadeOut();
},
/**
* Document ready.
*
* @since 1.0.0
*/
ready: function () {
// Cache builder element.
$builder = $('#everest-forms-builder');
// Bind all actions.
EVFPanelBuilder.bindUIActions();
// Bind edit form actions.
EVFPanelBuilder.bindEditActions();
// Snapshot the just-loaded (saved) form state, to detect unsaved changes later.
EVFPanelBuilder.captureStyleTabBaseline();
// jquery-confirm defaults.
jconfirm.defaults = {
closeIcon: true,
backgroundDismiss: true,
escapeKey: true,
animationBounce: 1,
useBootstrap: false,
theme: 'modern',
boxWidth: '400px',
columnClass: 'evf-responsive-class',
};
// Enable Perfect Scrollbar.
if ('undefined' !== typeof PerfectScrollbar) {
var tab_content = $('.everest-forms-tab-content'),
evf_panel = $('.everest-forms-panel');
if (tab_content.length >= 1) {
window.evf_tab_scroller = new PerfectScrollbar(
'.everest-forms-tab-content',
{
suppressScrollX: true,
},
);
}
evf_panel.each(function () {
var section_panel = $(this);
var panel_id = section_panel.attr('id');
if (section_panel.find('.everest-forms-panel-sidebar').length >= 1) {
window.evf_setting_scroller = new PerfectScrollbar(
'#' + panel_id + ' .everest-forms-panel-sidebar',
);
}
});
}
// Enable Limit length.
$builder.on(
'change',
'.everest-forms-field-option-row-limit_enabled input',
function (event) {
EVFPanelBuilder.updateTextFieldsLimitControls(
$(event.target)
.parents('.everest-forms-field-option-row-limit_enabled')
.data().fieldId,
event.target.checked,
);
},
);
$builder.on(
'change',
'.everest-forms-field-option-row-min_length_enabled input',
function (event) {
EVFPanelBuilder.updateTextFieldsMinLengthControls(
$(event.target)
.parents('.everest-forms-field-option-row-min_length_enabled')
.data().fieldId,
event.target.checked,
);
},
);
// Enable enhanced select.
$builder.on(
'change',
'.everest-forms-field-option-select .everest-forms-field-option-row-enhanced_select input',
function (event) {
EVFPanelBuilder.enhancedSelectFieldStyle(
$(event.target)
.parents('.everest-forms-field-option-row-enhanced_select')
.data().fieldId,
event.target.checked,
);
},
);
// Enable Multiple options.
$builder.on(
'click',
'.everest-forms-field-option-row-choices .everest-forms-btn-group span',
function (event) {
if (
$(this).hasClass('upgrade-modal') &&
'checkbox' === $(this).data('type')
) {
$(this).parent().find('span').addClass('is-active');
$(this).removeClass('is-active');
EVFPanelBuilder.updateEnhandedSelectField(
$(event.target)
.parents('.everest-forms-field-option-row-choices')
.data().fieldId,
false,
);
} else {
$(this).parent().find('span').removeClass('is-active');
$(this).addClass('is-active');
EVFPanelBuilder.updateEnhandedSelectField(
$(event.target)
.parents('.everest-forms-field-option-row-choices')
.data().fieldId,
'multiple' === $(this).data('selection'),
);
}
// Show 'Select All' Checkbox for Dropdown field only if multiple selection is active
if (
'multiple' === $(this).data('selection') &&
'checkbox' === $(this).data('type') &&
$(this).hasClass('is-active')
) {
var $field_id = $(this).parent().parent().data('field-id');
$(
'#everest-forms-field-option-row-' + $field_id + '-select_all',
).show();
} else {
var $field_id = $(this).parent().parent().data('field-id');
$(
'#everest-forms-field-option-row-' + $field_id + '-select_all',
).hide();
}
},
);
// By default hide the 'Select All' checkbox for Dropdown field
$(document.body).on(
'click',
'.everest-forms-field, .everest-forms-field-select[data-field-type="select"]',
function () {
$builder
.find(
'.everest-forms-field-option-row-choices .everest-forms-btn-group span',
)
.each(function () {
var $field_id = $(this).parent().parent().data('field-id');
if (
'multiple' === $(this).data('selection') &&
'checkbox' === $(this).data('type') &&
$(this).hasClass('is-active')
) {
$('#everest-forms-field-option-' + $field_id + '-select_all')
.parent()
.parent()
.parent()
.show();
} else {
$('#everest-forms-field-option-' + $field_id + '-select_all')
.parent()
.parent()
.parent()
.hide();
}
});
},
);
// Search fields input.
$builder.on('keyup', '.everest-forms-search-fields', function () {
var searchTerm = $(this).val().toLowerCase();
// Show/hide fields.
$('.evf-registered-item').each(function () {
var $this = $(this);
(field_type = $this.data('field-type')),
(field_label = $this.text().toLowerCase());
if (
field_type.search(searchTerm) > -1 ||
field_label.search(searchTerm) > -1
) {
$this.addClass('evf-searched-item');
$this.show();
} else {
$this.removeClass('evf-searched-item');
$this.hide();
}
});
// Show/hide field group.
$('.everest-forms-add-fields-group').each(function () {
var count = $(this).find(
'.evf-registered-item.evf-searched-item',
).length;
if (0 >= count) {
$(this).hide();
} else {
$(this).show();
}
});
// Show/hide fields not found indicator.
if ($('.evf-registered-item.evf-searched-item').length) {
$('.everest-forms-fields-not-found').addClass('hidden');
} else {
$('.everest-forms-fields-not-found').removeClass('hidden');
}
});
// Collapse the form builder
$builder.on('click', '#evf-collapse', function (event) {
event.preventDefault();
var $this = $(this);
if ($this.hasClass('open')) {
$this.removeClass('open').addClass('close');
$this
.closest('.everest-forms-panel-sidebar-content')
.removeClass('collapsed');
} else {
$this.removeClass('close').addClass('open');
$this
.closest('.everest-forms-panel-sidebar-content')
.addClass('collapsed');
}
});
// Action available for each binding.
$(document).trigger('everest_forms_ready');
},
/**
* Update text fields limit controls.
*
* @since 1.5.10
*
* @param {number} fieldId Field ID.
* @param {bool} checked Whether an option is checked or not.
*/
updateTextFieldsLimitControls: function (fieldId, checked) {
if (!checked) {
$(
'#everest-forms-field-option-row-' + fieldId + '-limit_controls',
).addClass('everest-forms-hidden');
} else {
$(
'#everest-forms-field-option-row-' + fieldId + '-limit_controls',
).removeClass('everest-forms-hidden');
}
},
/**
* Update text fields min length controls.
*
* @since 1.5.10
*
* @param {number} fieldId Field ID.
* @param {bool} checked Whether an option is checked or not.
*/
updateTextFieldsMinLengthControls: function (fieldId, checked) {
if (!checked) {
$(
'#everest-forms-field-option-row-' + fieldId + '-min_length_controls',
).addClass('everest-forms-hidden');
} else {
$(
'#everest-forms-field-option-row-' + fieldId + '-min_length_controls',
).removeClass('everest-forms-hidden');
}
},
/**
* Enhanced select fields style.
*
* @since 1.7.1
*
* @param {number} fieldId Field ID.
* @param {bool} checked Whether an option is checked or not.
*/
enhancedSelectFieldStyle: function (fieldId, checked) {
var $primary = $('#everest-forms-field-' + fieldId + ' .primary-input'),
isEnhanced = $(
'#everest-forms-field-option-' + fieldId + '-enhanced_select',
).is(':checked');
if (checked && isEnhanced && $primary.prop('multiple')) {
$primary.addClass('evf-enhanced-select');
$(document.body).trigger('evf-enhanced-select-init');
} else {
$primary.removeClass('evf-enhanced-select enhanced');
$primary.filter('.select2-hidden-accessible').selectWoo('destroy');
}
},
/**
* Update enhanced select field component.
*
* @since 1.7.1
*
* @param {number} fieldId Field ID.
* @param {bool} isMultiple Whether an option is multiple or not.
*/
updateEnhandedSelectField: function (fieldId, isMultiple) {
var $primary = $('#everest-forms-field-' + fieldId + ' .primary-input'),
$placeholder = $primary.find('.placeholder'),
$hiddenField = $(
'#everest-forms-field-option-' + fieldId + '-multiple_choices',
),
$optionChoicesItems = $(
'#everest-forms-field-option-row-' +
fieldId +
'-choices input.default',
),
selectedChoices = $optionChoicesItems.filter(':checked');
// Update hidden field value.
$hiddenField.val(isMultiple ? 1 : 0);
// Add/remove a `multiple` attribute.
$primary.prop('multiple', isMultiple);
// Change a `Choices` fields type:
// radio - needed for single selection
// checkbox - needed for multiple selection
$optionChoicesItems.prop('type', isMultiple ? 'checkbox' : 'radio');
// For single selection we can choose only one.
if (!isMultiple && selectedChoices.length) {
$optionChoicesItems.prop('checked', false);
$(selectedChoices.get(0)).prop('checked', true);
}
// Toggle selection for a placeholder.
if ($placeholder.length && isMultiple) {
$placeholder.prop('selected', !isMultiple);
}
// Update a primary field.
EVFPanelBuilder.enhancedSelectFieldStyle(fieldId, isMultiple);
},
/**
* Element bindings.
*
* @since 1.0.0
*/
bindUIActions: function () {
EVFPanelBuilder.bindDefaultTabs();
EVFPanelBuilder.checkEmptyGrid();
EVFPanelBuilder.bindFields();
EVFPanelBuilder.bindFormPreview();
EVFPanelBuilder.bindFormPreviewWithKeyEvent();
EVFPanelBuilder.bindFormEntriesWithKeyEvent();
EVFPanelBuilder.bindGridSwitcher();
EVFPanelBuilder.bindFieldSettings();
EVFPanelBuilder.bindFieldDelete();
EVFPanelBuilder.bindFieldDeleteWithKeyEvent();
EVFPanelBuilder.bindFieldMultiSelect();
EVFPanelBuilder.bindCloneField();
EVFPanelBuilder.bindSaveOption();
EVFPanelBuilder.bindEmbedOption();
EVFPanelBuilder.bindSaveOptionWithKeyEvent();
EVFPanelBuilder.bindOpenShortcutKeysModalWithKeyEvent();
EVFPanelBuilder.bindLayoutContainers();
EVFPanelBuilder.bindAddRowColumnPicker();
EVFPanelBuilder.bindAddNewRow();
EVFPanelBuilder.bindRemoveRow();
EVFPanelBuilder.bindFormSettings();
EVFPanelBuilder.bindFormEmail();
EVFPanelBuilder.bindFormSmsNotifications();
EVFPanelBuilder.bindFormConversational();
EVFPanelBuilder.bindFormIntegrations();
EVFPanelBuilder.bindFormPayment();
EVFPanelBuilder.choicesInit();
EVFPanelBuilder.bindToggleHandleActions();
EVFPanelBuilder.bindLabelEditInputActions();
EVFPanelBuilder.bindSyncedInputActions();
EVFPanelBuilder.init_datepickers();
EVFPanelBuilder.init_payment_subscription_plan_field();
EVFPanelBuilder.bindBulkOptionActions();
EVFPanelBuilder.bindAkismetInit();
EVFPanelBuilder.bindFormSubmissionMinWaitingTime();
EVFPanelBuilder.bindEditMetaKey();
// Fields Panel.
EVFPanelBuilder.bindUIActionsFields();
if (evf_data.tab === 'field-options') {
$('.evf-panel-field-options-button').trigger('click');
}
$(document.body).on(
'everest-forms-field-drop',
'.evf-registered-buttons .evf-registered-item',
function () {
EVFPanelBuilder.fieldDrop($(this).clone());
},
);
$(document.body).on(
'click',
'.evf-registered-buttons .evf-registered-item:not(.upgrade-modal):not(.evf-upgrade-addon):not(.enable-stripe-model):not(.enable-authorize-net-model):not(.enable-payment-subscription-plan):not(.everest-forms-pro-is_square_install):not(.enable-square-model):not(.evf-one-time-draggable-field):not(.recaptcha_empty_key_validate):not(.hcaptcha_empty_key_validate):not(.turnstile_empty_key_validate)',
function () {
EVFPanelBuilder.fieldDrop($(this).clone());
},
);
EVFPanelBuilder.bindRowFieldPopover();
},
/**
* Bind user action handlers for the Add Bulk Options feature.
*/
bindBulkOptionActions: function () {
// Toggle `Bulk Add` option.
$(document.body).on('click', '.evf-toggle-bulk-options', function (e) {
e.preventDefault();
var $panel = $(this)
.closest('.everest-forms-field-option')
.find('.everest-forms-field-option-row-add_bulk_options');
if ($panel.hasClass('everest-forms-hidden')) {
$panel.stop(true, true).removeClass('everest-forms-hidden').hide().slideDown();
} else {
$panel.stop(true, true).slideUp(function () {
$(this).addClass('everest-forms-hidden').css('display', '');
});
}
});
// Toggle presets list.
$(document.body).on('click', '.evf-toggle-presets-list', function (e) {
e.preventDefault();
$(this)
.closest('.everest-forms-field-option')
.find('.everest-forms-field-option-row .evf-options-presets')
.removeAttr('hidden')
.slideToggle();
});
// Add custom list of options.
$(document.body).on('click', '.evf-add-bulk-options', function (e) {
var $option_row = $(this).closest('.everest-forms-field-option-row');
var field_id = $option_row.data('field-id');
if ($option_row.length) {
var $choices = $option_row
.closest('.everest-forms-field-option')
.find('.everest-forms-field-option-row-choices .evf-choices-list');
var $bulk_options_container = $option_row.find(
'textarea#everest-forms-field-option-' +
field_id +
'-add_bulk_options',
);
var options_texts = $bulk_options_container
.val()
.replace(/<\s*script/gi, '')
.replace(/\s+on\w+\s*=/gi, ' ')
.split('\n');
EVFPanelBuilder.addBulkOptions(options_texts, $choices);
$bulk_options_container.val('');
}
});
// Add presets of options.
$(document.body).on('click', '.evf-options-preset-label', function (e) {
var $option_row = $(this).closest('.everest-forms-field-option-row');
var field_id = $option_row.data('field-id');
if ($option_row.length) {
var options_texts = $(this)
.closest('.evf-options-preset')
.find('.evf-options-preset-value')
.val();
$option_row
.find(
'textarea#everest-forms-field-option-' +
field_id +
'-add_bulk_options',
)
.val(options_texts);
$(this).closest('.evf-options-presets').slideUp();
}
});
//Add toggle option for password validation and strength meter.
$(document.body).on(
'click',
'.everest-forms-field-option-row-password_strength',
function () {
if ($(this).find('[type="checkbox"]:first').prop('checked')) {
$(this)
.next()
.find('[type="checkbox"]:first')
.prop('checked', false);
// $(this).prev().find('.everest-forms-inner-options').hide();
}
},
);
$(document.body).on(
'click',
'.everest-forms-field-option-row-password_validation',
function () {
if ($(this).find('[type="checkbox"]:first').prop('checked')) {
$(this)
.prev()
.find('[type="checkbox"]:first')
.prop('checked', false);
$(this)
.prev()
.find('.everest-forms-inner-options')
.addClass('everest-forms-hidden');
}
},
);
},
/**
* Add a list of options at once.
*
* @param {Array
} options_texts List of options to add.
* @param {object} $choices_container Options container where the options should be added.
*/
addBulkOptions: function (options_texts, $choices_container) {
options_texts.forEach(function (option_text) {
if ('' !== option_text) {
var $add_button = $choices_container.find('li').last().find('a.add');
EVFPanelBuilder.choiceAdd(null, $add_button, option_text.trim());
}
});
},
/**
* Initialize date pickers like min/max date, disable dates etc.
*
* @since 1.6.6
*/
init_datepickers: function () {
var date_format = $('.everest-forms-disable-dates').data('date-format'),
selection_mode = 'multiple';
// Initialize "Disable dates" option's date pickers that hasn't been initialized.
$('.everest-forms-disable-dates').each(function () {
if (!$(this).get(0)._flatpickr) {
$(this).flatpickr({
dateFormat: date_format,
mode: selection_mode,
});
}
});
// Reformat the selected dates input value for `Disable dates` option when the date format changes.
$(document.body).on('change', '.evf-date-format', function (e) {
var $disable_dates = $(
'.everest-forms-field-option:visible .everest-forms-disable-dates',
),
flatpicker = $disable_dates.get(0)._flatpickr,
selectedDates = flatpicker.selectedDates,
date_format = $(this).val(),
formatedDates = [];
selectedDates.forEach(function (date) {
formatedDates.push(flatpickr.formatDate(date, date_format));
});
flatpicker.set('dateFormat', date_format);
$disable_dates.val(formatedDates.join(', '));
});
// Clear disabled dates.
$(document.body).on('click', '.evf-clear-disabled-dates', function () {
$('.everest-forms-field-option:visible .everest-forms-disable-dates')
.get(0)
._flatpickr.clear();
});
// Triggring Setting Toggler.
$('.everest-forms-field-date-time').each(function () {
var id = $(this).attr('data-field-id');
EVFPanelBuilder.dateSettingToggler(
id,
$('#everest-forms-field-option-' + id + '-datetime_style').val(),
);
});
if ($('.everest-forms-slot-booking input').is(':checked')) {
//checked and hide past dates.
disable_past_date = $(document).find(
'.everest-forms-past-date-disable-format input',
);
required = $(document).find(
'.everest-forms-field-option-row-required input',
);
disable_past_date.attr('checked', true);
required.prop('checked', true);
disable_past_date.parent().parent().parent().hide();
}
},
/**
* Normalize a date to local midnight for day comparisons.
*
* @param {Date} date Input date.
* @return {Date}
*/
normalize_subscription_expiry_day: function (date) {
var normalized = new Date(date.getTime());
normalized.setHours(0, 0, 0, 0);
return normalized;
},
/**
* Whether a calendar day falls inside the active trial window (not past dates).
*
* @param {jQuery} $li Plan choice row.
* @param {Date} dayDate Calendar day.
* @return {boolean}
*/
is_subscription_expiry_trial_day: function ($li, dayDate) {
if (
!dayDate ||
!$li ||
!$li.length ||
!$li.find('.evf-enable-trial-period').is(':checked')
) {
return false;
}
var today = new Date();
today.setHours(0, 0, 0, 0);
var trialMin =
EVFPanelBuilder.get_subscription_expiry_min_date($li);
var day = EVFPanelBuilder.normalize_subscription_expiry_day(dayDate);
return (
day.getTime() >= today.getTime() &&
day.getTime() < trialMin.getTime()
);
},
/**
* First allowed expiry date for a plan choice (matches SubscriptionSchedule billing_start_date).
*
* @param {jQuery} $li Plan choice row.
* @return {Date} Midnight local date.
*/
get_subscription_expiry_min_date: function ($li) {
var min = new Date();
min.setHours(0, 0, 0, 0);
if (!$li || !$li.length) {
return min;
}
if (!$li.find('.evf-enable-trial-period').is(':checked')) {
return min;
}
var count = parseInt(
$li.find('.evf-spt-panel--trial input[type="number"]').val(),
10,
);
if (isNaN(count) || count < 1) {
count = 1;
}
var period =
$li.find('.evf-spt-panel--trial select').val() || 'day';
switch (period) {
case 'week':
min.setDate(min.getDate() + count * 7);
break;
case 'month':
min.setMonth(min.getMonth() + count);
break;
case 'year':
min.setFullYear(min.getFullYear() + count);
break;
case 'day':
default:
min.setDate(min.getDate() + count);
break;
}
return min;
},
/**
* Show or hide expiry hint when trial blocks early dates.
*
* @param {jQuery} $li Plan choice row.
* @param {Date} minDate First selectable expiry date.
*/
sync_subscription_expiry_trial_hint: function ($li, minDate) {
var $detail = $li.find('.evf-spt-panel--expiry .evf-spt-panel-detail');
var $hint = $detail.find('.evf-expiry-trial-hint');
if (!$hint.length) {
$hint = $(
'',
);
$detail.append($hint);
}
if (!$li.find('.evf-enable-trial-period').is(':checked')) {
$hint.hide().text('');
return;
}
var label =
typeof flatpickr !== 'undefined'
? flatpickr.formatDate(minDate, 'Y-m-d')
: minDate.toISOString().slice(0, 10);
var template =
(evf_data && evf_data.i18n_expiry_trial_min_date) ||
'Expiry must be on or after the trial ends (%s).';
$hint.text(template.replace('%s', label)).show();
},
/**
* Anchor element for positioning the expiry calendar under the date input.
*
* @param {jQuery} $input Expiry date input.
* @return {HTMLElement}
*/
get_subscription_expiry_picker_anchor: function ($input) {
var $anchor = $input.closest('.evf-spt-panel-detail');
if (!$anchor.length) {
$anchor = $input.closest('.evf-general-setting-field');
}
if (!$anchor.length) {
$anchor = $input.parent();
}
return $anchor[0];
},
/**
* Close open subscription expiry flatpickr calendars.
*
* @param {HTMLElement|null} exceptInput Optional input to keep open.
*/
close_subscription_expiry_pickers: function (exceptInput) {
$('.evf-radio-subscription-expiry-input').each(function () {
if (exceptInput && this === exceptInput) {
return;
}
if (this._flatpickr && this._flatpickr.isOpen) {
this._flatpickr.close();
}
$(this).removeClass('active');
});
},
/**
* Clear subscription plan expiry date input and flatpickr state.
*
* @param {jQuery} $li Plan choice row.
*/
clear_subscription_plan_expiry_date: function ($li) {
var $expiryInput = $li.find('.evf-radio-subscription-expiry-input');
$expiryInput.val('');
if ($expiryInput.length && $expiryInput[0]._flatpickr) {
$expiryInput[0]._flatpickr.clear();
}
},
/**
* Toggle flatpickr when the expiry input is clicked.
*
* @param {object} instance Flatpickr instance.
*/
bind_subscription_expiry_picker_toggle: function (instance) {
var $input = $(instance.input);
$input.off('click.evfExpiryPicker').on('click.evfExpiryPicker', function (e) {
e.preventDefault();
e.stopPropagation();
if (instance.isOpen) {
instance.close();
return;
}
EVFPanelBuilder.close_subscription_expiry_pickers(instance.input);
instance.open();
});
},
/**
* Update minDate on open expiry pickers after trial settings change.
*
* @param {jQuery} $scope Optional plan choice row.
*/
update_subscription_expiry_min_dates: function ($scope) {
var $inputs =
$scope && $scope.length
? $scope.find('.evf-radio-subscription-expiry-input')
: $(
'.everest-forms-field-option-payment-subscription-plan .evf-radio-subscription-expiry-input',
);
$inputs.each(function () {
var el = this;
var $li = $(el).closest('li');
if (!el._flatpickr) {
return;
}
var minDate =
EVFPanelBuilder.get_subscription_expiry_min_date($li);
el._flatpickr.set('minDate', minDate);
EVFPanelBuilder.sync_subscription_expiry_trial_hint(
$li,
minDate,
);
if (
el._flatpickr.selectedDates[0] &&
el._flatpickr.selectedDates[0] < minDate
) {
el._flatpickr.clear();
}
el._flatpickr.redraw();
});
},
/**
* Flatpickr for subscription plan expiry date (builder only).
*
* @param {jQuery} $scope Optional container (plan choice row).
*/
init_subscription_expiry_date_pickers: function ($scope) {
var $inputs =
$scope && $scope.length
? $scope.find('.evf-radio-subscription-expiry-input')
: $(
'.everest-forms-field-option-payment-subscription-plan:visible .evf-radio-subscription-expiry-input',
);
var blockedTitle =
(evf_data && evf_data.i18n_expiry_trial_blocked_day) ||
'This date is within the trial period and cannot be used as the expiry date.';
$inputs.each(function () {
var $input = $(this);
var el = this;
var $li = $input.closest('li');
var savedDate = $.trim($input.val());
var dateFormat = $input.data('date-format') || 'Y-m-d';
if (el._flatpickr && !el._flatpickr.config.static) {
el._flatpickr.destroy();
}
if (el._flatpickr) {
var minDate =
EVFPanelBuilder.get_subscription_expiry_min_date($li);
el._flatpickr.set('minDate', minDate);
if (savedDate) {
el._flatpickr.setDate(savedDate, false);
if (el._flatpickr.selectedDates[0]) {
$input.val(
el._flatpickr.formatDate(
el._flatpickr.selectedDates[0],
dateFormat,
),
);
} else {
$input.val(savedDate);
}
}
EVFPanelBuilder.sync_subscription_expiry_trial_hint(
$li,
minDate,
);
el._flatpickr.redraw();
EVFPanelBuilder.bind_subscription_expiry_picker_toggle(
el._flatpickr,
);
return;
}
var $anchor = $(EVFPanelBuilder.get_subscription_expiry_picker_anchor($input));
$anchor.addClass('evf-subscription-expiry-picker-anchor');
$input.flatpickr({
dateFormat: dateFormat,
defaultDate: savedDate || null,
disableMobile: true,
allowInput: false,
clickOpens: false,
closeOnSelect: true,
static: true,
position: 'below',
animate: true,
minDate:
EVFPanelBuilder.get_subscription_expiry_min_date($li),
monthSelectorType: 'dropdown',
onOpen: function (selectedDates, dateStr, instance) {
$(instance.input).addClass('active');
},
onClose: function (selectedDates, dateStr, instance) {
$(instance.input).removeClass('active');
},
onDayCreate: function (dObj, dStr, fp, dayElem) {
var $choiceLi = $(fp.input).closest('li');
var dayDate = dayElem.dateObj;
dayElem.classList.remove('evf-expiry-trial-blocked');
dayElem.removeAttribute('title');
if (
EVFPanelBuilder.is_subscription_expiry_trial_day(
$choiceLi,
dayDate,
)
) {
dayElem.classList.add('evf-expiry-trial-blocked');
dayElem.setAttribute('title', blockedTitle);
}
},
onChange: function (selectedDates, dateStr, instance) {
var trialMin =
EVFPanelBuilder.get_subscription_expiry_min_date(
$(instance.input).closest('li'),
);
if (
selectedDates[0] &&
selectedDates[0] < trialMin
) {
instance.clear();
$(instance.input).val('');
return;
}
$(instance.input).val(dateStr).trigger('change');
},
onReady: function (selectedDates, dateStr, instance) {
var $choiceLi = $(instance.input).closest('li');
var trialMin =
EVFPanelBuilder.get_subscription_expiry_min_date(
$choiceLi,
);
var storedDate = $.trim($(instance.input).val());
if (instance.calendarContainer) {
instance.calendarContainer.classList.add(
'evf-subscription-expiry-calendar',
);
}
EVFPanelBuilder.bind_subscription_expiry_picker_toggle(
instance,
);
EVFPanelBuilder.sync_subscription_expiry_trial_hint(
$choiceLi,
trialMin,
);
if (storedDate) {
instance.setDate(storedDate, false);
$(instance.input).val(
instance.formatDate(
instance.selectedDates[0],
instance.config.dateFormat,
),
);
}
if (
instance.selectedDates[0] &&
instance.selectedDates[0] < trialMin
) {
instance.clear();
$(instance.input).val('');
}
},
});
});
},
/**
* For the subscription plan field.
*
* @since 3.0.9
*/
init_payment_subscription_plan_field: function () {
EVFPanelBuilder.init_subscription_expiry_date_pickers();
$('.everest-forms-field-payment-subscription-plan').each(function () {
var fieldId = $(this).data('field-id');
if (fieldId) {
EVFPanelBuilder.subscriptionPlanChoiceUpdate(fieldId);
}
});
// Tab switching — delegated so it works for dynamically added choices.
$(document.body).on(
'click',
'.evf-spt-tab',
function () {
EVFPanelBuilder.close_subscription_expiry_pickers();
var $tab = $(this);
var $planTabs = $tab.closest('.evf-subscription-plan-tabs');
var targetTab = $tab.data('tab');
$tab.closest('.evf-spt-strip')
.find('.evf-spt-tab')
.removeClass('evf-spt-tab--active');
$tab.addClass('evf-spt-tab--active');
$planTabs.find('.evf-spt-panel').hide();
$planTabs.find('.evf-spt-panel--' + targetTab).show();
if ('expiry' === targetTab) {
EVFPanelBuilder.init_subscription_expiry_date_pickers(
$tab.closest('li'),
);
}
},
);
// Trial toggle — dim inputs and update dot indicator.
$(document.body).on(
'change',
'.evf-enable-trial-period',
function () {
var $li = $(this).closest('li');
var isChecked = $(this).is(':checked');
$li.find('.evf-spt-panel--trial .evf-spt-panel-detail').toggle(isChecked);
$li.find('.evf-spt-tab--trial .evf-spt-dot').toggle(isChecked);
EVFPanelBuilder.update_subscription_expiry_min_dates($li);
},
);
// Trial length/period — block expiry dates that fall inside the trial window.
$(document.body).on(
'change input',
'.evf-spt-panel--trial input[type="number"], .evf-spt-panel--trial select',
function () {
EVFPanelBuilder.update_subscription_expiry_min_dates(
$(this).closest('li'),
);
},
);
// Expiry toggle — dim inputs, close calendar, update dot indicator.
$(document.body).on(
'change',
'.evf-enable-expiry-date',
function () {
var $li = $(this).closest('li');
var isChecked = $(this).is(':checked');
$li.find('.evf-spt-panel--expiry .evf-spt-panel-detail').toggle(isChecked);
$li.find('.evf-spt-tab--expiry .evf-spt-dot').toggle(isChecked);
if (isChecked) {
EVFPanelBuilder.init_subscription_expiry_date_pickers($li);
} else {
EVFPanelBuilder.clear_subscription_plan_expiry_date($li);
EVFPanelBuilder.close_subscription_expiry_pickers();
}
},
);
// Update builder preview when recurring interval or period changes.
$(document.body).on(
'change input',
'.evf-spt-panel--recurring input[type="number"], .evf-spt-panel--recurring select',
function () {
var fieldId = $(this).closest('.evf-choices-list').data('field-id');
if (fieldId) {
EVFPanelBuilder.subscriptionPlanChoiceUpdate(fieldId);
}
},
);
// Update builder preview when trial toggle, count, or period changes.
$(document.body).on(
'change input',
'.evf-enable-trial-period, .evf-spt-panel--trial input[type="number"], .evf-spt-panel--trial select',
function () {
var fieldId = $(this).closest('.evf-choices-list').data('field-id');
if (fieldId) {
EVFPanelBuilder.subscriptionPlanChoiceUpdate(fieldId);
}
},
);
// Update builder preview when expiry toggle or date changes.
$(document.body).on(
'change',
'.evf-enable-expiry-date, .evf-radio-subscription-expiry-input',
function () {
var fieldId = $(this).closest('.evf-choices-list').data('field-id');
if (fieldId) {
EVFPanelBuilder.subscriptionPlanChoiceUpdate(fieldId);
}
},
);
$(document.body).on('evf_after_field_append', function (e, element_id) {
var $field = $('#' + element_id);
var field_type = $field.attr('data-field-type');
if ('payment-subscription-plan' === field_type) {
var isRecurringEnable = $(
'#everest-forms-panel-field-paypal-recurring',
);
$('#everest-forms-panel-field-paypal-interval_count-wrap').hide();
$('#everest-forms-panel-field-paypal-period-wrap').hide();
$('#everest-forms-panel-field-stripe-plan_name-wrap').hide();
$('#everest-forms-panel-field-stripe-interval_count-wrap').hide();
$('#everest-forms-panel-field-stripe-period-wrap').hide();
$('#everest-forms-panel-field-mollie-subscription_description-wrap').hide();
$('#everest-forms-panel-field-mollie-interval_count-wrap').hide();
$('#everest-forms-panel-field-mollie-interval-wrap').hide();
}
EVFPanelBuilder.syncPaymentMethodDependentFields();
EVFPanelBuilder.refreshFieldMapSelectsFromField('add', element_id);
});
$(document.body).on('evf_before_field_deleted', function (e, element_id) {
EVFPanelBuilder.refreshFieldMapSelectsFromField(
'remove',
element_id,
);
var $field = $('#everest-forms-field-' + element_id);
var field_type = $field.attr('data-field-type');
if ('payment-subscription-plan' === field_type) {
$('#everest-forms-panel-field-paypal-interval_count-wrap').show();
$('#everest-forms-panel-field-paypal-period-wrap').show();
$('#everest-forms-panel-field-stripe-plan_name-wrap').hide();
$('#everest-forms-panel-field-stripe-interval_count-wrap').hide();
$('#everest-forms-panel-field-stripe-period-wrap').hide();
$('#everest-forms-panel-field-mollie-subscription_description-wrap').show();
$('#everest-forms-panel-field-mollie-interval_count-wrap').show();
$('#everest-forms-panel-field-mollie-interval-wrap').show();
}
// Run after DOM removal to accurately detect selector presence.
setTimeout(function () {
EVFPanelBuilder.syncPaymentMethodDependentFields();
}, 0);
});
var isRecurringEnable = $('#everest-forms-panel-field-paypal-recurring');
var wrapper = $('.everest-forms-field-wrap');
if (
$(wrapper).find('.everest-forms-field-payment-subscription-plan')
.length > 0
) {
if ($(isRecurringEnable).is(':checked')) {
$('#everest-forms-panel-field-paypal-interval_count-wrap').hide();
$('#everest-forms-panel-field-paypal-period-wrap').hide();
$('#everest-forms-panel-field-stripe-plan_name-wrap').hide();
$('#everest-forms-panel-field-stripe-interval_count-wrap').hide();
$('#everest-forms-panel-field-stripe-period-wrap').hide();
}
$(isRecurringEnable).on('click', function (e) {
$('#everest-forms-panel-field-paypal-interval_count-wrap').hide();
$('#everest-forms-panel-field-paypal-period-wrap').hide();
$('#everest-forms-panel-field-stripe-plan_name-wrap').hide();
$('#everest-forms-panel-field-stripe-interval_count-wrap').hide();
$('#everest-forms-panel-field-stripe-period-wrap').hide();
});
}
var isStripeRecurringEnable = $(
'#everest-forms-panel-field-stripe-recurring',
);
var wrapper = $('.everest-forms-field-wrap');
if (
$(wrapper).find('.everest-forms-field-payment-subscription-plan')
.length > 0
) {
if ($(isStripeRecurringEnable).is(':checked')) {
$('#everest-forms-panel-field-stripe-plan_name-wrap').hide();
$('#everest-forms-panel-field-stripe-interval_count-wrap').hide();
$('#everest-forms-panel-field-stripe-period-wrap').hide();
}
$('#everest-forms-panel-field-mollie-subscription_description-wrap').hide();
$('#everest-forms-panel-field-mollie-interval_count-wrap').hide();
$('#everest-forms-panel-field-mollie-interval-wrap').hide();
}
$(isStripeRecurringEnable).on('click', function (e) {
if (
$(this).is(':checked') &&
$(wrapper).find('.everest-forms-field-payment-subscription-plan')
.length > 0
) {
$('#everest-forms-panel-field-stripe-plan_name-wrap').hide();
$('#everest-forms-panel-field-stripe-interval_count-wrap').hide();
$('#everest-forms-panel-field-stripe-period-wrap').hide();
}
});
},
/**
* Form edit title actions.
*
* @since 1.6.0
*/
bindEditActions: function () {
// Delegates event to toggleEditTitle() on clicking.
$('#edit-form-name').on('click', function (e) {
e.stopPropagation();
if ('' !== $('#evf-edit-form-name').val().trim()) {
EVFPanelBuilder.toggleEditTitle(e);
}
});
// Apply the title change to form name field.
$('#evf-edit-form-name')
.on('change keypress', function (e) {
var $this = $(this);
e.stopPropagation();
if (13 === e.which && '' !== $(this).val().trim()) {
EVFPanelBuilder.toggleEditTitle(e);
}
if ('' !== $this.val().trim()) {
$('#everest-forms-panel-field-settings-form_title').val(
$this.val().trim(),
);
}
})
.on('click', function (e) {
e.stopPropagation();
});
// In case the user goes out of focus from title edit state.
$(document)
.not($('.everest-forms-title-desc'))
.on('click', function (e) {
var field = $('#evf-edit-form-name');
e.stopPropagation();
// Only allow flipping state if currently editing.
if (
!field.prop('disabled') &&
field.val() &&
'' !== field.val().trim()
) {
EVFPanelBuilder.toggleEditTitle(e);
}
});
},
// Toggles edit state.
toggleEditTitle: function (event) {
var $el = $('#edit-form-name'),
$input_title = $el.siblings('#evf-edit-form-name');
event.preventDefault();
// Toggle disabled property.
$input_title.prop('disabled', function (_, val) {
return !val;
});
if (!$input_title.hasClass('everst-forms-name-editing')) {
$input_title.focus();
}
$input_title.toggleClass('everst-forms-name-editing');
},
//--------------------------------------------------------------------//
// Fields Panel
//--------------------------------------------------------------------//
/**
* Creates a object from form elements.
*
* @since 1.6.0
*/
formObject: function (el) {
var form = jQuery(el),
fields = form.find('[name]'),
json = {},
arraynames = {};
for (var v = 0; v < fields.length; v++) {
var field = jQuery(fields[v]),
name = field.prop('name').replace(/\]/gi, '').split('['),
value = field.val(),
lineconf = {};
if (
(field.is(':radio') || field.is(':checkbox')) &&
!field.is(':checked')
) {
continue;
}
for (var i = name.length - 1; i >= 0; i--) {
var nestname = name[i];
if (typeof nestname === 'undefined') {
nestname = '';
}
if (nestname.length === 0) {
lineconf = [];
if (typeof arraynames[name[i - 1]] === 'undefined') {
arraynames[name[i - 1]] = 0;
} else {
arraynames[name[i - 1]] += 1;
}
nestname = arraynames[name[i - 1]];
}
if (i === name.length - 1) {
if (value) {
if (value === 'true') {
value = true;
} else if (value === 'false') {
value = false;
} else if (
!isNaN(parseFloat(value)) &&
parseFloat(value).toString() === value
) {
value = parseFloat(value);
} else if (
typeof value === 'string' &&
(value.substr(0, 1) === '{' || value.substr(0, 1) === '[')
) {
try {
value = JSON.parse(value);
} catch (e) {}
} else if (
typeof value === 'object' &&
value.length &&
field.is('select')
) {
var new_val = {};
for (var i = 0; i < value.length; i++) {
new_val['n' + i] = value[i];
}
value = new_val;
}
}
lineconf[nestname] = value;
} else {
var newobj = lineconf;
lineconf = {};
lineconf[nestname] = newobj;
}
}
$.extend(true, json, lineconf);
}
return json;
},
/**
* Element bindings for Fields panel.
*
* @since 1.2.0
*/
bindUIActionsFields: function () {
// Add new field choice.
$builder.on(
'click',
'.everest-forms-field-option-row-choices .add',
function (event) {
EVFPanelBuilder.choiceAdd(event, $(this));
},
);
// Delete field choice.
$builder.on(
'click',
'.everest-forms-field-option-row-choices .remove',
function (event) {
EVFPanelBuilder.choiceDelete(event, $(this));
},
);
// Field choices defaults - (before change).
$builder.on(
'mousedown',
'.everest-forms-field-option-row-choices input[type=radio]',
function () {
var $this = $(this);
if ($this.is(':checked')) {
$this.attr('data-checked', '1');
} else {
$this.attr('data-checked', '0');
}
},
);
// Field choices defaults.
$builder.on(
'click',
'.everest-forms-field-option-row-choices input[type=radio]',
function () {
var $this = $(this),
list = $this.parent().parent();
$this
.parent()
.parent()
.find('input[type=radio]')
.not(this)
.prop('checked', false);
if ($this.attr('data-checked') === '1') {
$this.prop('checked', false);
$this.attr('data-checked', '0');
}
EVFPanelBuilder.choiceUpdate(
list.data('field-type'),
list.data('field-id'),
);
},
);
// Field choices update preview area.
$builder.on(
'change',
'.everest-forms-field-option-row-choices input[type=checkbox]',
function (e) {
var list = $(this).parent().parent();
EVFPanelBuilder.choiceUpdate(
list.data('field-type'),
list.data('field-id'),
);
},
);
// Updates field choices text in almost real time.
$builder.on(
'keyup paste focusout',
'.everest-forms-field-option-row-choices input.label, .everest-forms-field-option-row-choices input.value',
function (e) {
var list = $(this).parent().parent().parent();
EVFPanelBuilder.choiceUpdate(
list.data('field-type'),
list.data('field-id'),
);
},
);
// Field choices display value toggle.
$builder.on(
'change',
'.everest-forms-field-option-row-show_values input',
function (e) {
$(this)
.closest('.everest-forms-field-option')
.find('.everest-forms-field-option-row-choices ul')
.toggleClass('show-values');
},
);
// Field image choices toggle.
$builder.on(
'change',
'.everest-forms-field-option-row-choices_images input',
function () {
var $this = $(this),
field_id = $this.parent().parent().parent().data('field-id'),
$fieldOptions = $('#everest-forms-field-option-' + field_id),
$columnOptions = $(
'#everest-forms-field-option-' + field_id + '-input_columns',
),
type = $('#everest-forms-field-option-' + field_id)
.find('.everest-forms-field-option-hidden-type')
.val();
$this.parent().find('.notice').toggleClass('hidden');
$fieldOptions
.find('.everest-forms-field-option-row-choices ul')
.toggleClass('show-images');
// Trigger columns changes.
if ($this.is(':checked')) {
$columnOptions.val('inline').trigger('change');
} else {
$columnOptions.val('').trigger('change');
}
EVFPanelBuilder.choiceUpdate(type, field_id);
},
);
// Upload or add an image.
$builder.on(
'click',
'.everest-forms-attachment-media-view .upload-button',
function (event) {
var $el = $(this),
$wrapper,
file_frame;
event.preventDefault();
// If the media frame already exists, reopen it.
if (file_frame) {
file_frame.open();
return;
}
// Create the media frame.
file_frame = wp.media.frames.everestforms_media_frame = wp.media({
title: evf_data.i18n_upload_image_title,
className: 'media-frame everest-forms-media-frame',
frame: 'select',
multiple: false,
library: {
type: 'image',
},
button: {
text: evf_data.i18n_upload_image_button,
},
});
// When an image is selected, run a callback.
file_frame.on('select', function () {
var attachment = file_frame
.state()
.get('selection')
.first()
.toJSON();
if ($el.hasClass('button-add-media')) {
$el.hide();
$wrapper = $el.parent();
} else {
$wrapper = $el.parent().parent().parent();
}
$wrapper.find('.source').val(attachment.url);
$wrapper.find('.attachment-thumb').remove();
$wrapper
.find('.thumbnail-image')
.prepend(
'
',
);
$wrapper.find('.actions').show();
$builder.trigger('everestFormsImageUploadAdd', [$el, $wrapper]);
});
// Finally, open the modal.
file_frame.open();
},
);
// Remove and uploaded image.
$builder.on(
'click',
'.everest-forms-attachment-media-view .remove-button',
function (event) {
event.preventDefault();
var $container = $(this).parent().parent();
$container.find('.attachment-thumb').remove();
$container.parent().find('.source').val('');
$container.parent().find('.button-add-media').show();
$builder.trigger('everestFormsImageUploadRemove', [
$(this),
$container,
]);
},
);
// Field choices image upload add/remove image.
$builder.on(
'everestFormsImageUploadAdd everestFormsImageUploadRemove',
function (event, $this, $container) {
var $el = $container.closest('.evf-choices-list'),
type = $el.data('field-type'),
field_id = $el.data('field-id');
EVFPanelBuilder.choiceUpdate(type, field_id);
},
);
// Toggle Layout advanced field option.
$builder.on(
'change',
'.everest-forms-field-option-row-input_columns select',
function () {
var $this = $(this),
value = $this.val(),
field_id = $this.parent().data('field-id'),
css_class = '';
if ('inline' === value) {
css_class = 'everest-forms-list-inline';
} else if ('' !== value) {
css_class = 'everest-forms-list-' + value + '-columns';
}
$('#everest-forms-field-' + field_id)
.removeClass(
'everest-forms-list-inline everest-forms-list-2-columns everest-forms-list-3-columns',
)
.addClass(css_class);
},
);
// Field sidebar tab toggle.
$builder.on('click', '.everest-forms-fields-tab a', function (e) {
e.preventDefault();
EVFPanelBuilder.fieldTabChoice($(this).attr('id'));
});
// Dragged field and hover over tab buttons - multipart.
$(document).on(
'mouseenter',
'.everest-forms-tabs li[class*="part_"]',
function () {
if (
false === $(this).hasClass('active') &&
($(document)
.find('.everest-forms-field')
.hasClass('ui-sortable-helper') ||
$(document)
.find('.evf-registered-buttons button.evf-registered-item')
.hasClass('field-dragged'))
) {
$(this).find('a').trigger('click');
}
},
);
// Display toggle for "Address" field hidden option.
$builder.on(
'change',
'.everest-forms-field-option-address input.hide',
function () {
var $this = $(this),
id = $this.parent().parent().data('field-id'),
subfield = $this.parent().parent().data('subfield');
$('#everest-forms-field-' + id)
.find('.everest-forms-' + subfield)
.toggleClass('hidden');
},
);
// Real-time updates for "Show Label" field option.
$builder.on(
'input',
'.everest-forms-field-option-row-label input',
function () {
var $this = $(this),
value = $this
.val()
.replace(/<\s*script/gi, '')
.replace(/\s+on\w+\s*=/gi, ' '),
id = $this.parent().data('field-id'),
$label = $('#everest-forms-field-' + id).find('.label-title .text');
if ($label.hasClass('nl2br')) {
$label.html(value.replace(/\n/g, '
'));
} else if ('private-note' === $label.prevObject.data('field-type')) {
value = value + ' (Admin Only)';
$label.html(value);
} else {
$label.html(value);
}
},
);
$builder.on(
'change',
'.everest-forms-field-option-row-enable_prepopulate input',
function (event) {
var id = $(this).parent().parent().parent().data('field-id');
$('#everest-forms-field-' + id).toggleClass('parameter_name');
// Toggle "Parameter Name" option.
if ($(event.target).is(':checked')) {
$(
'#everest-forms-field-option-row-' + id + '-parameter_name',
).show();
} else {
$(
'#everest-forms-field-option-row-' + id + '-parameter_name',
).hide();
}
},
);
$builder.on(
'change',
'.everest-forms-field-option-row-enable_regex_validation input',
function (event) {
var id = $(this).parent().parent().parent().data('field-id');
$('#everest-forms-field-' + id).toggleClass('regex_value');
// Toggle "Parameter Name" option.
if ($(event.target).is(':checked')) {
$('#everest-forms-field-option-row-' + id + '-regex_value').show();
$(
'#everest-forms-field-option-row-' + id + '-regex_message',
).show();
} else {
$('#everest-forms-field-option-row-' + id + '-regex_value').hide();
$(
'#everest-forms-field-option-row-' + id + '-regex_message',
).hide();
}
},
);
// Real-time updates for "Description" field option.
$builder.on(
'input',
'.everest-forms-field-option-row-description textarea',
function () {
var $this = $(this);
var id = $this.parent().data('field-id');
var $desc = $('#everest-forms-field-' + id).find('.description');
var value = $this.val();
// Sanitize the user input to prevent script injection, iframe injection, and remove event handlers
value = value
.replace(/<\s*script/gi, '')
.replace(/<\s*iframe/gi, '')
.replace(/\s+on\w+\s*=/gi, ' ');
if ($desc.hasClass('nl2br')) {
$desc.html(value.replace(/\n/g, '
'));
} else {
$desc.html(value);
}
},
);
// Real-time updates for "Required" field option.
$builder.on(
'change',
'.everest-forms-field-option-row-required input',
function (event) {
var id = $(this).parent().parent().parent().data('field-id');
$('#everest-forms-field-' + id).toggleClass('required');
// Toggle "Required Field Message Setting" option.
if ($(event.target).is(':checked')) {
$(
'#everest-forms-field-option-row-' +
id +
'-required_field_message_setting',
).show();
if (
$(
'#everest-forms-field-option-' +
id +
'-required_field_message_setting-individual',
).is(':checked')
) {
$(
'#everest-forms-field-option-row-' +
id +
'-required-field-message',
).show();
}
} else {
$(
'#everest-forms-field-option-row-' +
id +
'-required_field_message_setting',
).hide();
$(
'#everest-forms-field-option-row-' +
id +
'-required-field-message',
).hide();
//unchecked the slot booking if date is not required.
slot_booking = $(document).find(
'.everest-forms-slot-booking input',
);
slot_booking.prop('checked', false);
//show pass date input if hidden.
$(document)
.find('.everest-forms-past-date-disable-format input')
.parent()
.parent()
.parent()
.show();
}
},
);
$builder.on(
'change',
'.everest-forms-field-option-row-required_field_message_setting input',
function (event) {
var id = $(this).parent().parent().parent().parent().data('field-id');
$('#everest-forms-field-' + id).toggleClass(
'required_field_message_setting',
);
// Toggle "Required Field Message" option.
if ('individual' === $(this).val()) {
$(
'#everest-forms-field-option-row-' +
id +
'-required-field-message',
).show();
} else {
$(
'#everest-forms-field-option-row-' +
id +
'-required-field-message',
).hide();
}
},
);
// Real-time updates for "Confirmation" field option.
$builder.on(
'change',
'.everest-forms-field-option-row-confirmation input',
function (event) {
var id = $(this).parent().parent().parent().data('field-id');
// Toggle "Confirmation" field option.
if ($(event.target).is(':checked')) {
$('#everest-forms-field-' + id)
.find('.everest-forms-confirm')
.removeClass('everest-forms-confirm-disabled')
.addClass('everest-forms-confirm-enabled');
$('#everest-forms-field-option-' + id)
.removeClass('everest-forms-confirm-disabled')
.addClass('everest-forms-confirm-enabled');
} else {
$('#everest-forms-field-' + id)
.find('.everest-forms-confirm')
.removeClass('everest-forms-confirm-enabled')
.addClass('everest-forms-confirm-disabled');
$('#everest-forms-field-option-' + id)
.removeClass('everest-forms-confirm-enabled')
.addClass('everest-forms-confirm-disabled');
}
},
);
// Real-time updates for slot booking
$builder.on(
'change',
'.everest-forms-slot-booking input',
function (event) {
if ($(this).is(':checked')) {
disable_past_date = $(document).find(
'.everest-forms-past-date-disable-format input',
);
required = $(document).find(
'.everest-forms-field-option-row-required input',
);
//checked the required if it is not checked.
if (required.is(':not(:checked)')) {
required.prop('checked', true);
}
if (disable_past_date.is(':not(:checked)')) {
disable_past_date.prop('checked', true);
}
disable_past_date.parent().parent().parent().hide();
} else {
disable_past_date.parent().parent().parent().show();
}
},
);
// Real-time updates for "Placeholder" field option.
$builder.on(
'input',
'.everest-forms-field-option-row-placeholder input',
function (e) {
var $this = $(this),
value = $this.val(),
id = $this.parent().data('field-id'),
$primary = $('#everest-forms-field-' + id).find(
'.widefat:not(.secondary-input)',
);
if ($primary.is('select')) {
if (!value.length) {
$primary.find('.placeholder').remove();
} else {
if ($primary.find('.placeholder').length) {
$primary.find('.placeholder').text(value);
} else {
$primary.prepend(
'',
);
}
$primary.data('placeholder', value);
if ($primary.hasClass('enhanced')) {
$primary
.parent()
.find('.select2-search__field')
.prop('placeholder', value);
}
}
} else {
$primary.attr('placeholder', value);
}
},
);
// Real-time updates for "Address Placeholder" field options.
$builder.on(
'input',
'.everest-forms-field-option-address input.placeholder',
function (e) {
var $this = $(this),
value = $this.val(),
id = $this.parent().parent().data('field-id'),
subfield = $this.parent().parent().data('subfield');
$('#everest-forms-field-' + id)
.find('.everest-forms-' + subfield + ' input')
.attr('placeholder', value);
},
);
// Real-time updates for "Confirmation Placeholder" field option.
$builder.on(
'input',
'.everest-forms-field-option-row-confirmation_placeholder input',
function () {
var $this = $(this),
value = $this.val(),
id = $this.parent().data('field-id');
$('#everest-forms-field-' + id)
.find('.secondary-input')
.attr('placeholder', value);
},
);
// Real-time updates for "Authorize.Net Card Number Placeholder" field option.
$builder.on(
'input',
'.everest-forms-field-option-row-card_number_placeholder input',
function () {
var $this = $(this),
value = $this.val(),
id = $this.parent().data('field-id');
$('#everest-forms-field-' + id)
.find('.everest-forms-authorize-net-card-number input')
.attr('placeholder', value);
},
);
// Real-time updates for "Authorize.Net CVC Placeholder" field option.
$builder.on(
'input',
'.everest-forms-field-option-row-cvc_placeholder input',
function () {
var $this = $(this),
value = $this.val(),
id = $this.parent().data('field-id');
$('#everest-forms-field-' + id)
.find('.everest-forms-authorize-net-cvc input')
.attr('placeholder', value);
},
);
// Real-time updates for "Hide Label" field option.
$builder.on(
'change',
'.everest-forms-field-option-row-label_hide input',
function () {
var id = $(this).parent().parent().parent().data('field-id');
$('#everest-forms-field-' + id).toggleClass('label_hide');
},
);
// Real-time updates for Sub Label visbility field option.
$builder.on(
'change',
'.everest-forms-field-option-row-sublabel_hide input',
function () {
var id = $(this).parent().parent().parent().data('field-id');
$('#everest-forms-field-' + id).toggleClass('sublabel_hide');
},
);
// Real-time updates for Date/Time and Name "Format" option.
$builder.on(
'change',
'.everest-forms-field-option-row-datetime_format select, .everest-forms-field-option-row-phone_format select, .everest-forms-field-option-row-item_price select, .everest-forms-field-option-row-format select',
function (e) {
var $this = $(this),
value = $this.val(),
id = $this.parent().data('field-id');
$('#everest-forms-field-' + id)
.find('.format-selected')
.removeClass()
.addClass('format-selected format-selected-' + value);
$('#everest-forms-field-option-' + id)
.find('.format-selected')
.removeClass()
.addClass('format-selected format-selected-' + value);
},
);
// Setting options toggler.
$builder.on(
'change',
'.everest-forms-field-option-row-datetime_style select',
function () {
EVFPanelBuilder.dateSettingToggler(
$(this).parent().attr('data-field-id'),
$(this).val(),
);
},
);
// Enable Min Max Toggler.
$(
'.everest-forms-field-option-row-time_interval_format [id*=enable_min_max_time]',
).each(function () {
if ($(this).prop('checked')) {
$(this)
.parent()
.parent()
.find('.input-group-col-2')
.has(' [id*=min_time_hour]')
.show();
$(this)
.parent()
.parent()
.find('.input-group-col-2')
.has(' [id*=max_time_hour]')
.show();
$(this)
.parent()
.parent()
.find('.input-group-col-2')
.has(' [for*=select_min_time]')
.show();
$(this)
.parent()
.parent()
.find('.input-group-col-2')
.has('[for*=select_max_time]')
.show();
} else {
$(this)
.parent()
.parent()
.find('.input-group-col-2')
.has('[id*=min_time_hour]')
.hide();
$(this)
.parent()
.parent()
.find('.input-group-col-2')
.has('[id*=max_time_hour]')
.hide();
$(this).parent().parent().find('[for*=select_min_time]').hide();
$(this).parent().parent().find('[for*=select_max_time]').hide();
}
});
$builder.on(
'click',
'.everest-forms-field-option-row-time_interval_format [id*=enable_min_max_time]',
function () {
if ($(this).prop('checked')) {
$(this)
.parent()
.parent()
.find('.input-group-col-2')
.has(' [id*=min_time_hour]')
.show();
$(this)
.parent()
.parent()
.find('.input-group-col-2')
.has(' [id*=max_time_hour]')
.show();
$(this).parent().parent().find('[for*=select_min_time]').show();
$(this).parent().parent().find('[for*=select_max_time]').show();
} else {
$(this)
.parent()
.parent()
.find('.input-group-col-2')
.has('[id*=min_time_hour]')
.hide();
$(this)
.parent()
.parent()
.find('.input-group-col-2')
.has('[id*=max_time_hour]')
.hide();
$(this).parent().parent().find('[for*=select_min_time]').hide();
$(this).parent().parent().find('[for*=select_max_time]').hide();
}
},
);
// Time interval changes.
$builder.on(
'change',
'.everest-forms-field-option-row-time_interval_format select[id*=time_format]',
function () {
min_hour = $(this)
.parent()
.siblings('.input-group-col-2')
.find('[id*=min_time_hour]');
max_hour = $(this)
.parent()
.siblings('.input-group-col-2')
.find('[id*=max_time_hour]');
var selected_min = min_hour.find('option:selected').val();
var selected_max = max_hour.find('option:selected').val();
var options = '',
a,
h;
for (i = 0; i <= 23; i++) {
if ($(this).val() === 'H:i') {
options +=
'';
} else {
a = ' PM';
if (i < 12) {
a = ' AM';
h = i;
} else {
h = i - 12;
}
if (h == 0) {
h = 12;
}
options += '';
}
}
min_hour.html(options);
max_hour.html(options);
min_hour
.find('option[value=' + selected_min + ']')
.prop('selected', true);
max_hour
.find('option[value=' + selected_max + ']')
.prop('selected', true);
},
);
},
/**
* Setting options for Date Picker and Dropdown Toggler.
*/
dateSettingToggler: function (id, type) {
if (type == 'picker') {
// Picker Date Setting Control
$('#everest-forms-field-option-row-' + id + '-placeholder').show();
$('#everest-forms-field-option-' + id + '-disable_dates').show();
$(
'label[for=everest-forms-field-option-' + id + '-disable_dates]',
).show();
$('#everest-forms-field-option-' + id + '-date_mode-range')
.parents()
.find('everest-forms-checklist')
.show();
$('.everest-forms-field-option-row-date_format .time_interval').show();
$('#everest-forms-field-option-' + id + '-date_localization').show();
$(
'label[for=everest-forms-field-option-' + id + '-date_localization]',
).show();
$('#everest-forms-field-option-' + id + '-date_default')
.parent()
.parent()
.parent()
.show();
$('#everest-forms-field-option-' + id + '-past_date_disable')
.parent()
.parent()
.parent()
.show();
$('#everest-forms-field-option-' + id + '-enable_min_max')
.parent()
.parent()
.parent()
.show();
//Check if min max date enabled.
if (
$('#everest-forms-field-option-' + id + '-enable_min_max').prop(
'checked',
)
) {
$('#everest-forms-field-option-' + id + '-set_date_range')
.parent()
.show();
if (
$('#everest-forms-field-option-' + id + '-set_date_range').prop(
'checked',
)
) {
$(
'#everest-forms-field-option-row-' +
id +
'-date_format .everest-forms-min-max-date-range-option',
).removeClass('everest-forms-hidden');
} else {
$(
'#everest-forms-field-option-row-' +
id +
'-date_format .everest-forms-min-max-date-option',
).removeClass('everest-forms-hidden');
}
}
$('#everest-forms-field-option-' + id + '-time_interval').show();
$('#everest-forms-field-option-' + id + '-enable_min_max_time')
.parent()
.parent()
.parent()
.hide();
$(
'label[for=everest-forms-field-option-' +
id +
'-enable_min_max_time]',
).hide();
$(
'label[for=everest-forms-field-option-' + id + '-select_min_time]',
).hide();
$(
'label[for=everest-forms-field-option-' + id + '-select_max_time]',
).hide();
$('#everest-forms-field-option-' + id + '-min_time_hour')
.parent()
.hide();
$('#everest-forms-field-option-' + id + '-max_time_hour')
.parent()
.hide();
} else {
// Dropdown Date Setting Control
$('#everest-forms-field-option-' + id + '-date_mode-range')
.parents()
.find('everest-forms-checklist')
.hide();
$('#everest-forms-field-option-' + id + '-date_default')
.parent()
.parent()
.parent()
.hide();
$('#everest-forms-field-option-' + id + '-past_date_disable')
.parent()
.parent()
.parent()
.hide();
$('#everest-forms-field-option-row-' + id + '-placeholder').hide();
$('#everest-forms-field-option-' + id + '-enable_min_max')
.parent()
.parent()
.parent()
.hide();
$(
'#everest-forms-field-option-row-' +
id +
'-date_format .everest-forms-min-max-date-option',
).addClass('everest-forms-hidden');
$('#everest-forms-field-option-' + id + '-set_date_range')
.parent()
.parent()
.parent()
.hide();
$(
'#everest-forms-field-option-row-' +
id +
'-date_format .everest-forms-min-max-date-range-option',
).addClass('everest-forms-hidden');
$('#everest-forms-field-option-' + id + '-disable_dates').hide();
$(
'label[for=everest-forms-field-option-' + id + '-disable_dates]',
).hide();
$(
'.everest-forms-field-option-row-date_format .everest-forms-checklist',
).hide();
$('.everest-forms-field-option-row-date_format .time_interval').hide();
$('#everest-forms-field-option-' + id + '-date_localization').hide();
$(
'label[for=everest-forms-field-option-' + id + '-date_localization]',
).hide();
$('#everest-forms-field-option-' + id + '-time_interval').hide();
$('#everest-forms-field-option-' + id + '-enable_min_max_time')
.parent()
.parent()
.parent()
.show();
$(
'label[for=everest-forms-field-option-' +
id +
'-enable_min_max_time]',
).show();
//Check if min max time enabled.
if (
$('#everest-forms-field-option-' + id + '-enable_min_max_time').prop(
'checked',
)
) {
$(
'label[for=everest-forms-field-option-' + id + '-select_min_time]',
).show();
$(
'label[for=everest-forms-field-option-' + id + '-select_max_time]',
).show();
$('#everest-forms-field-option-' + id + '-min_time_hour')
.parent()
.show();
$('#everest-forms-field-option-' + id + '-max_time_hour')
.parent()
.show();
}
}
},
/**
* Make field choices sortable.
*
* @since 1.0.0
*
* @param {string} selector Selector.
*/
choicesInit: function (selector) {
selector = selector || '.everest-forms-field-option-row-choices ul';
$(selector).sortable({
items: 'li',
axis: 'y',
handle: '.sort',
scrollSensitivity: 40,
stop: function (event) {
var field_id = $(event.target).attr('data-field-id'),
type = $('#everest-forms-field-option-' + field_id)
.find('.everest-forms-field-option-hidden-type')
.val();
EVFPanelBuilder.choiceUpdate(type, field_id);
},
});
},
/**
* Add new field choice.
*
* @since 1.6.0
*/
choiceAdd: function (event, el, value) {
if (event && event.preventDefault) {
event.preventDefault();
}
var $this = $(el),
$parent = $this.parent(),
checked = $parent.find('input.default').is(':checked'),
fieldID = $this
.closest('.everest-forms-field-option-row-choices')
.data('field-id'),
nextID = $parent.parent().attr('data-next-id'),
type = $parent.parent().data('field-type'),
$choice = $parent.clone().insertAfter($parent);
$choice.attr('data-key', nextID);
$choice
.find('input.label')
.val(value)
.attr(
'name',
'form_fields[' + fieldID + '][choices][' + nextID + '][label]',
);
$choice
.find('input.value')
.val(value)
.attr(
'name',
'form_fields[' + fieldID + '][choices][' + nextID + '][value]',
);
$choice
.find('input.source')
.val('')
.attr(
'name',
'form_fields[' + fieldID + '][choices][' + nextID + '][image]',
);
$choice
.find('input.default')
.attr(
'name',
'form_fields[' + fieldID + '][choices][' + nextID + '][default]',
)
.prop('checked', false);
$choice.find('.attachment-thumb').remove();
$choice.find('.button-add-media').show();
if ( 'payment-subscription-plan' === type ) {
var oldChoiceKey = $parent.data( 'key' );
$choice.find( 'input, select' ).each( function () {
var name = $( this ).attr( 'name' );
if ( name && name.indexOf( '[choices][' + oldChoiceKey + '][' ) !== -1 ) {
$( this ).attr( 'name', name.replace(
'[choices][' + oldChoiceKey + '][',
'[choices][' + nextID + ']['
) );
}
} );
$choice.find( '.evf-enable-trial-period' ).prop( 'checked', false );
$choice.find( '.evf-enable-expiry-date' ).prop( 'checked', false );
$choice.find( '[name*="[subscription_expiry_date]"]' ).val( '' );
$choice.find( '.evf-spt-panel-detail' ).hide();
$choice.find( '.evf-spt-dot' ).hide();
}
if (checked === true) {
$parent.find('input.default').prop('checked', true);
}
nextID++;
$parent.parent().attr('data-next-id', nextID);
$builder.trigger('everestFormsChoiceAdd');
EVFPanelBuilder.choiceUpdate(type, fieldID);
},
/**
* Delete field choice.
*
* @since 1.6.0
*/
choiceDelete: function (event, el) {
event.preventDefault();
var $this = $(el),
$list = $this.parent().parent(),
total = $list.find('li').length;
if (total < 2) {
$.alert({
title: false,
content: evf_data.i18n_field_error_choice,
icon: 'dashicons dashicons-info',
type: 'blue',
buttons: {
ok: {
text: evf_data.i18n_ok,
btnClass: 'btn-confirm',
keys: ['enter'],
},
},
});
} else {
$this.parent().remove();
EVFPanelBuilder.choiceUpdate(
$list.data('field-type'),
$list.data('field-id'),
);
$builder.trigger('everestFormsChoiceDelete');
}
},
/**
* Update field choices in preview area, for the Fields panel.
*
* @since 1.6.0
*/
choiceUpdate: function (type, id) {
var $fieldOptions = $('#everest-forms-field-option-' + id);
$primary = $('#everest-forms-field-' + id + ' .primary-input');
// Radio and Checkbox use _ template.
if (
'radio' === type ||
'checkbox' === type ||
'payment-multiple' === type ||
'payment-checkbox' === type
) {
var choices = [],
formData = EVFPanelBuilder.formObject($fieldOptions),
settings = formData.form_fields[id];
// Order of choices for a specific field.
$('#everest-forms-field-option-' + id)
.find('.evf-choices-list li')
.each(function () {
choices.push($(this).data('key'));
});
var tmpl = wp.template('everest-forms-field-preview-choices'),
type =
'checkbox' === type || 'payment-checkbox' === type
? 'checkbox'
: 'radio';
data = {
type: type,
order: choices,
settings: settings,
amountFilter: EVFPanelBuilder.amountFilter,
};
$('#everest-forms-field-' + id)
.find('ul.primary-input')
.replaceWith(tmpl(data));
return;
}
if ('payment-subscription-plan' === type) {
EVFPanelBuilder.subscriptionPlanChoiceUpdate(id);
return;
}
var new_choice;
if ('select' === type) {
new_choice = '';
$primary.find('option').not('.placeholder').remove();
}
$(
'#everest-forms-field-option-row-' +
id +
'-choices .evf-choices-list li',
).each(function (index) {
var $this = $(this),
label = $this
.find('input.label')
.val()
.replace(/<\s*script/gi, '')
.replace(/\s+on\w+\s*=/gi, ' '),
selected = $this.find('input.default').is(':checked'),
choice = $(new_choice.replace('{label}', label));
$('#everest-forms-field-' + id + ' .primary-input').append(choice);
if (!label) {
return;
}
if (true === selected) {
switch (type) {
case 'select':
choice.prop('selected', true);
break;
case 'radio':
case 'checkbox':
choice.find('input').prop('checked', true);
break;
}
}
});
},
amountFilter: function (data, amount) {
if ('right' === data.currency_symbol_pos) {
return amount + ' ' + data.currency_symbol;
} else {
return data.currency_symbol + ' ' + amount;
}
},
/**
* Re-render the builder canvas preview for a subscription plan field.
*
* @param {string|number} fieldId The field ID.
*/
subscriptionPlanChoiceUpdate: function (fieldId) {
var $optionsList = $('#everest-forms-field-option-row-' + fieldId + '-choices .evf-choices-list');
var $preview = $('#everest-forms-field-' + fieldId + ' .primary-input');
if (!$preview.length) {
return;
}
var periodSingular = { day: 'day', week: 'week', month: 'month', year: 'year' };
var periodPlural = { day: 'days', week: 'weeks', month: 'months', year: 'years' };
var html = '';
$optionsList.find('li').each(function () {
var $li = $(this);
var label = $li.find('input.label').val() || '';
var rawAmount = $li.find('input.value').val() || '0';
var iCount = parseInt($li.find('input[name*="[interval_count]"]').val(), 10) || 1;
var rPeriod = $li.find('select[name*="[recurring_period]"]').val() || 'month';
var trialOn = $li.find('.evf-enable-trial-period').is(':checked');
var tCount = parseInt($li.find('input[name*="[trail_interval_count]"]').val(), 10) || 1;
var tPeriod = $li.find('select[name*="[trail_recurring_period]"]').val() || 'week';
var isDefault = $li.find('input.default').is(':checked');
var pStr = iCount > 1
? (iCount + ' ' + (periodPlural[rPeriod] || rPeriod))
: (periodSingular[rPeriod] || rPeriod);
var periodSuffix = '/' + pStr;
var amountStr = EVFPanelBuilder.amountFilter(evf_data, rawAmount);
var mainHtml = ''
+ '' + $('').text(label).html() + ''
+ '' + $('').text(amountStr + periodSuffix).html() + ''
+ '';
var metaParts = [];
if (trialOn) {
var tStr = tCount + ' ' + (tCount > 1 ? (periodPlural[tPeriod] || tPeriod) : (periodSingular[tPeriod] || tPeriod));
metaParts.push($('').text(tStr + ' free trial').html());
}
var metaHtml = metaParts.length
? '' + metaParts.join(' · ') + ''
: '';
var liHtml = '';
var itemClass = isDefault ? 'everest-forms-selected' : '';
html += '' + liHtml + '';
});
$preview.html(html);
},
bindFormSettings: function () {
$('body').on('click', '.evf-setting-panel', function (e) {
if ($(this).hasClass('upgrade-addons-settings')) {
return;
}
var data_setting_section = $(this).attr('data-section');
$('.evf-setting-panel').removeClass('active');
$('.everest-forms-active-email').removeClass('active');
$('.everest-forms-active-sms-notifications').removeClass('active');
$('.everest-forms-active-conversational-forms').removeClass('active');
$('.evf-content-section').removeClass('active');
$(this).addClass('active');
$('.evf-content-' + data_setting_section + '-settings').addClass(
'active',
);
e.preventDefault();
});
$('.evf-setting-panel').eq(0).trigger('click');
},
bindFormEmail: function () {
$('body').on(
'click',
'.everest-forms-panel-sidebar-section-email',
function (e) {
$(this).siblings('.everest-forms-active-email').removeClass('active');
$(this).next('.everest-forms-active-email').addClass('active');
var container = $(this)
.siblings('.everest-forms-active-email.active')
.find('.everest-forms-active-email-connections-list li');
if (container.length) {
container.children('.user-nickname').first().trigger('click');
}
e.preventDefault();
},
);
},
bindFormSmsNotifications: function () {
$('body').on(
'click',
'.everest-forms-panel-sidebar-section-sms-notifications',
function (e) {
$(this)
.siblings('.everest-forms-active-sms-notifications')
.removeClass('active');
$(this)
.next('.everest-forms-active-sms-notifications')
.addClass('active');
var container = $(this)
.siblings('.everest-forms-active-sms-notifications.active')
.find(
'.everest-forms-active-sms-notifications-connections-list li',
);
if (container.length) {
container.children('.user-nickname').first().trigger('click');
}
e.preventDefault();
},
);
},
bindFormConversational: function () {
$('body').on(
'click',
'.everest-forms-panel-sidebar-section-conversational-forms ',
function (e) {
var $this = $(this);
$(this)
.siblings('.everest-forms-active-conversational-forms')
.removeClass('active');
$(this)
.next('.everest-forms-active-conversational-forms')
.addClass('active');
var container = $(this).siblings(
'.everest-forms-active-conversational-forms.active',
);
if (container.length) {
container.children('.evf-content-tab ').trigger('click');
}
e.preventDefault();
},
);
},
bindFormIntegrations: function () {
$('body').on('click', '.evf-integrations-panel', function (e) {
if ($(this).hasClass('upgrade-addons-settings')) {
e.preventDefault();
return;
}
if ($(this).hasClass('evf-addon-install-trigger')) {
e.preventDefault();
return;
}
var data_setting_section = $(this).attr('data-section');
$('.evf-integrations-panel').removeClass('active');
$('#everest-forms-panel-integrations')
.find('.evf-panel-content-section')
.removeClass('active');
$(this).addClass('active');
$(this)
.parent()
.find('.everest-forms-active-connections')
.removeClass('active');
$(this).next('.everest-forms-active-connections').addClass('active');
var container = $(this)
.siblings('.everest-forms-active-connections.active')
.find('.everest-forms-active-connections-list li');
if (container.length) {
container.children('.user-nickname').first().trigger('click');
}
$('.evf-panel-content-section-' + data_setting_section).addClass(
'active',
);
e.preventDefault();
});
$('.evf-setting-panel').eq(0).trigger('click');
},
bindFormPayment: function () {
$('body').on('click', '.evf-payments-panel', function (e) {
if ($(this).hasClass('upgrade-addons-settings')) {
e.preventDefault();
return;
}
var data_setting_section = $(this).attr('data-section');
$('.evf-payments-panel').removeClass('active');
$(this).siblings().removeClass('icon active');
$(this).addClass('active');
$(this)
.parents('#everest-forms-panel-payments')
.find('.evf-payment-setting-content')
.removeClass('active')
.hide();
$('.evf-content-' + data_setting_section + '-settings')
.addClass('active')
.show();
e.preventDefault();
});
$('.evf-setting-panel').eq(0).trigger('click');
},
removeRow: function (row) {
$.each(row.find('.everest-forms-field'), function () {
var field_id = $(this).attr('data-field-id'),
field_type = $(this).attr('data-field-type'),
field_options = $('#everest-forms-field-option-' + field_id);
// Trigger before-delete event so addons can react.
$(document.body).trigger('evf_before_field_deleted', [field_id]);
// Remove conditional logic references for this field.
EVFPanelBuilder.conditionalLogicRemoveField(field_id);
EVFPanelBuilder.conditionalLogicRemoveFieldIntegration(field_id);
EVFPanelBuilder.paymentFieldRemoveFromQuantity(field_id);
EVFPanelBuilder.oneTimeDraggableRemoveField(field_type);
$(this).remove();
field_options.remove();
});
row.remove();
},
bindRemoveRow: function () {
$('body').on('click', '.evf-delete-row', function () {
var $this = $(this),
total_rows = $('.evf-admin-row').length,
current_row = $this.closest('.evf-admin-row'),
row_id = current_row.attr('data-row-id'),
current_part = $this
.parents('.evf-admin-field-container')
.attr('data-current-part'),
multipart_active = $('#everest-forms-builder').hasClass(
'multi-part-activated',
);
if (current_part && multipart_active) {
total_rows = $('#part_' + current_part).find('.evf-admin-row').length;
}
if (total_rows < 2) {
$.alert({
title: evf_data.i18n_row_locked,
content: evf_data.i18n_single_row_locked_msg,
icon: 'dashicons dashicons-info',
type: 'blue',
buttons: {
confirm: {
text: evf_data.i18n_close,
btnClass: 'btn-confirm',
keys: ['enter'],
},
},
});
} else {
$.confirm({
title: false,
content: evf_data.i18n_delete_row_confirm,
type: 'red',
closeIcon: false,
backgroundDismiss: false,
icon: 'dashicons dashicons-warning',
buttons: {
confirm: {
text: evf_data.i18n_ok,
btnClass: 'btn-confirm',
keys: ['enter'],
action: function () {
EVFPanelBuilder.removeRow(current_row);
$('.everest-forms-fields-tab')
.find('a')
.removeClass('active');
$('.everest-forms-fields-tab')
.find('a')
.first()
.addClass('active');
$('.everest-forms-add-fields').show();
$('#everest-forms-row-option-row_' + row_id).remove();
},
},
cancel: {
text: evf_data.i18n_cancel,
},
},
});
}
});
},
/**
* Row/canvas zones where layout presets can be dropped (main wrapper or multi-part #part_*).
*
* @return {jQuery}
*/
getLayoutDropZones: function () {
var $collection = $();
$('.evf-admin-field-wrapper').each(function () {
var $w = $(this);
var $parts = $w.children('[id^="part_"]');
if ($parts.length) {
$collection = $collection.add($parts);
} else {
$collection = $collection.add($w);
}
});
return $collection;
},
/**
* Add a new row with a specific column layout.
*
* @param {number} columns Number of columns (1–4).
* @param {jQuery|null} $afterRow Insert after this row.
* @param {jQuery|null} $beforeRow Insert before this row (takes precedence over $afterRow).
* @param {jQuery|null} $dropContext Element inside the builder (e.g. drop zone) to resolve multi-part wrapper.
*/
addLayoutContainer: function (columns, $afterRow, $beforeRow, $dropContext) {
var wrapper = $('.evf-admin-field-wrapper');
if ($dropContext && $dropContext.length) {
var current_part = $dropContext
.closest('.evf-admin-field-container')
.attr('data-current-part');
if (current_part) {
var $partWrap = wrapper.find('#part_' + current_part);
if ($partWrap.length) {
wrapper = $partWrap;
}
}
}
var row_ids = $('.evf-admin-row')
.map(function () {
return $(this).data('row-id');
})
.get(),
max_row_id = row_ids.length ? Math.max.apply(Math, row_ids) : 0,
row_clone = $('.evf-admin-row').eq(0).clone(),
total_rows =
parseInt($('.evf-add-row').first().attr('data-total-rows'), 10) || 0;
var current_part = $('.evf-admin-field-container').attr('data-current-part');
if (current_part) {
wrapper = $('.evf-admin-field-wrapper').find('#part_' + current_part);
}
max_row_id++;
total_rows++;
row_clone.find('.evf-admin-grid').html('');
row_clone.attr('data-row-id', max_row_id);
$('.evf-add-row').attr('data-total-rows', total_rows);
$('.evf-add-row').attr('data-next-row-id', max_row_id);
if ($beforeRow && $beforeRow.length) {
$beforeRow.before(row_clone);
} else if ($afterRow && $afterRow.length) {
$afterRow.after(row_clone);
} else {
wrapper.append(row_clone);
}
row_clone
.find('.evf-grid-selector[data-evf-grid="' + columns + '"]')
.trigger('click');
EVFPanelBuilder.bindFields();
EVFPanelBuilder.checkEmptyGrid();
if ($('.everest-forms-row-options').length) {
var _row_id = max_row_id,
_evf_data = window.evf_data;
$.ajax({
url: _evf_data.ajax_url,
type: 'POST',
data: {
action: 'everest_forms_new_row',
security: _evf_data.evf_add_row_nonce,
form_id: _evf_data.form_id,
row_id: _row_id,
},
success: function (xhr) {
if (true === xhr.success && 'undefined' !== typeof xhr.data.html) {
$(document)
.find('.everest-forms-row-option-group')
.append(xhr.data.html);
EVFPanelBuilder.conditionalLogicAppendRow(_row_id);
$(
'#everest-forms-panel-field-form_rows-connection_row_' +
_row_id +
'-conditional_logic_status',
).prop('checked', false);
}
},
});
}
$('html, body').animate({ scrollTop: row_clone.offset().top - 100 }, 400);
},
bindLayoutContainers: function () {
$('body').on('click', '.evf-layout-container-btn', function () {
var columns = parseInt($(this).data('columns'), 10),
$fieldContainer = $('.evf-admin-field-container:visible').first();
if (!$fieldContainer.length) {
$fieldContainer = $('.evf-admin-field-container').first();
}
var wrapper = $('.evf-admin-field-wrapper'),
current_part = $fieldContainer.attr('data-current-part');
if (current_part) {
var $partWrap = wrapper.find('#part_' + current_part);
if ($partWrap.length) {
wrapper = $partWrap;
}
}
var $lastRow = wrapper.children('.evf-admin-row').last();
if ($lastRow.length) {
EVFPanelBuilder.addLayoutContainer(
columns,
$lastRow,
null,
$fieldContainer,
);
} else {
EVFPanelBuilder.addLayoutContainer(
columns,
null,
null,
$fieldContainer,
);
}
});
},
bindAddRowColumnPicker: function () {
if (!$('#evf-add-row-picker').length) {
var $pickerGrid = $('').css({
display: 'grid',
'grid-template-columns': 'repeat(4, 1fr)',
gap: '6px',
});
$('.evf-layout-container-btn').each(function () {
var $btn = $(this),
cols = parseInt($btn.data('columns'), 10),
label = $btn.text().trim(),
svgHtml = $btn.find('svg').prop('outerHTML') || '';
var $pickerBtn = $('')
.attr('data-columns', cols)
.css({
display: 'flex',
'flex-direction': 'column',
'align-items': 'center',
'justify-content': 'center',
padding: '10px 8px',
border: '1px solid #edeff7',
'border-radius': '4px',
cursor: 'pointer',
'font-size': '11px',
'text-align': 'center',
background: '#fbfbfd',
color: '#383838',
gap: '4px',
'min-width': '80px',
transition: 'border-color .12s,color .12s,background .12s',
})
.append(
$('')
.css({ display: 'block', 'line-height': '1' })
.html(svgHtml),
)
.append($('').text(label));
$pickerGrid.append($pickerBtn);
});
$('body').append(
$('')
.css({
display: 'none',
position: 'fixed',
background: '#fff',
border: '1px solid #edeff7',
'border-radius': '8px',
'box-shadow': '0 8px 24px rgba(0,0,0,.08)',
'z-index': '999999',
padding: '10px',
overflow: 'visible',
})
.append(
'',
)
.append($pickerGrid),
);
$('head').append(
'',
);
$('#evf-add-row-picker svg').css({
width: '24px',
height: '24px',
display: 'block',
});
}
// Intercept Add Row click (non-repeater) before bindAddNewRow fires.
$('body').on(
'click',
'.evf-add-row:not(.repeater-row) span',
function (e) {
e.stopImmediatePropagation();
var $span = $(this),
$picker = $('#evf-add-row-picker'),
$arrow = $('#evf-add-row-picker-arrow');
if ($picker.is(':visible')) {
$picker.hide();
return;
}
var offset = $span.offset(),
scrollLeft = $(window).scrollLeft(),
scrollTop = $(window).scrollTop(),
spanCX = offset.left - scrollLeft + $span.outerWidth() / 2,
margin = 8;
$picker.show();
var pickerH = $picker.outerHeight(),
pickerW = $picker.outerWidth(),
top = offset.top - scrollTop - pickerH - 8,
flipped = false;
if (top < margin) {
top = offset.top - scrollTop + $span.outerHeight() + 8;
flipped = true;
}
var left = spanCX - pickerW / 2;
left = Math.min(
Math.max(margin, left),
window.innerWidth - pickerW - margin,
);
// Arrow: points toward the button
var arrowX = spanCX - left - 7;
arrowX = Math.min(Math.max(14, arrowX), pickerW - 28);
if (flipped) {
// Picker is below button — arrow at top pointing up toward button
$arrow
.addClass('evf-arrow-down')
.css({ top: '-8px', bottom: 'auto', left: arrowX + 'px' });
} else {
// Picker is above button — arrow at bottom pointing down toward button
$arrow
.removeClass('evf-arrow-down')
.css({ bottom: '-8px', top: 'auto', left: arrowX + 'px' });
}
$picker.css({ top: top, left: left });
},
);
$(document.body).on(
'click',
'#evf-add-row-picker button[data-columns]',
function () {
var cols = parseInt($(this).data('columns'), 10);
$('#evf-add-row-picker').hide();
var $fieldContainer = $('.evf-admin-field-container:visible').first();
if (!$fieldContainer.length) {
$fieldContainer = $('.evf-admin-field-container').first();
}
var wrapper = $('.evf-admin-field-wrapper'),
current_part = $fieldContainer.attr('data-current-part');
if (current_part) {
var $partWrap = wrapper.find('#part_' + current_part);
if ($partWrap.length) {
wrapper = $partWrap;
}
}
var $lastRow = wrapper.children('.evf-admin-row').last();
if ($lastRow.length) {
EVFPanelBuilder.addLayoutContainer(
cols,
$lastRow,
null,
$fieldContainer,
);
} else {
EVFPanelBuilder.addLayoutContainer(
cols,
null,
null,
$fieldContainer,
);
}
},
);
$(document.body)
.on(
'mouseenter',
'#evf-add-row-picker button[data-columns]',
function () {
$(this).css({
'border-color': '#8c64c6',
color: '#8c64c6',
background: '#fff',
});
},
)
.on(
'mouseleave',
'#evf-add-row-picker button[data-columns]',
function () {
$(this).css({
'border-color': '#edeff7',
color: '#383838',
background: '#fbfbfd',
});
},
);
$(document).on('click.evf-add-row-picker', function (e) {
if (!$(e.target).closest('#evf-add-row-picker, .evf-add-row').length) {
$('#evf-add-row-picker').hide();
}
});
},
bindAddNewRow: function () {
$('body').on('click', '.evf-add-row span', function () {
$('#add-fields').trigger('click');
var $this = $(this),
wrapper = $('.evf-admin-field-wrapper'),
row_ids = $('.evf-admin-row')
.map(function () {
return $(this).data('row-id');
})
.get(),
max_row_id = Math.max.apply(Math, row_ids),
row_clone = $('.evf-admin-row').eq(0).clone(),
total_rows = $this.parent().attr('data-total-rows'),
current_part = $this
.parents('.evf-admin-field-container')
.attr('data-current-part');
max_row_id++;
total_rows++;
if (current_part) {
wrapper = $('.evf-admin-field-wrapper').find('#part_' + current_part);
}
// Row clone.
row_clone.find('.evf-admin-grid').html('');
row_clone.attr('data-row-id', max_row_id);
// Row infos.
$this.parent().attr('data-total-rows', total_rows);
$this.parent().attr('data-next-row-id', max_row_id);
if (
0 < $('.everest-forms-row-options').length &&
false === $this.closest('.evf-add-row').hasClass('repeater-row')
) {
row_clone.find('div').hide();
row_clone
.css({
padding: '40px',
})
.append(
'',
);
// Row append.
wrapper.append(row_clone);
// Initialize fields UI.
EVFPanelBuilder.bindFields();
EVFPanelBuilder.checkEmptyGrid();
var row_id = row_clone.attr('data-row-id'),
evf_data = window.evf_data;
$.ajax({
url: evf_data.ajax_url,
type: 'POST',
data: {
action: 'everest_forms_new_row',
security: evf_data.evf_add_row_nonce,
form_id: evf_data.form_id,
row_id: row_id,
},
success: function (xhr) {
if (true === xhr.success) {
if ('undefined' !== typeof xhr.data.html) {
$(document)
.find('.everest-forms-row-option-group')
.append(xhr.data.html);
EVFPanelBuilder.conditionalLogicAppendRow(row_id);
// Disable conditional logic by default.
$(
'#everest-forms-panel-field-form_rows-connection_row_' +
row_id +
'-conditional_logic_status',
).prop('checked', false);
}
}
},
}).always(function () {
row_clone.css({ padding: 0 });
row_clone.find('div').show();
row_clone.find('.evf-toggle-row-content').css('display', 'none');
row_clone.find('i').remove();
// Trigger event after row add.
$this.trigger('everest-forms-after-add-row', row_clone);
});
} else {
// Row append.
wrapper.append(row_clone);
// Initialize fields UI.
EVFPanelBuilder.bindFields();
EVFPanelBuilder.checkEmptyGrid();
// Trigger event after row add.
$this.trigger('everest-forms-after-add-row', row_clone);
}
});
},
bindCloneField: function () {
$('body').on(
'click',
'.everest-forms-preview .everest-forms-field .everest-forms-field-duplicate',
function () {
var $field = $(this).closest('.everest-forms-field');
if ($field.hasClass('no-duplicate')) {
$.alert({
title: evf_data.i18n_field_locked,
content: evf_data.i18n_field_locked_msg,
icon: 'dashicons dashicons-info',
type: 'blue',
buttons: {
confirm: {
text: evf_data.i18n_close,
btnClass: 'btn-confirm',
keys: ['enter'],
},
},
});
} else {
$.confirm({
title: false,
content: evf_data.i18n_duplicate_field_confirm,
type: 'orange',
closeIcon: false,
backgroundDismiss: false,
icon: 'dashicons dashicons-warning',
buttons: {
confirm: {
text: evf_data.i18n_ok,
btnClass: 'btn-confirm',
keys: ['enter'],
action: function () {
EVFPanelBuilder.cloneFieldAction($field);
},
},
cancel: {
text: evf_data.i18n_cancel,
},
},
});
}
},
);
$('body').on('click', '.evf-admin-row .evf-duplicate-row', function () {
var $row = $(this).closest('.evf-admin-row');
if ($row.find('.everest-forms-field').hasClass('no-duplicate')) {
$.alert({
title: evf_data.i18n_field_locked,
content: evf_data.i18n_row_locked_msg,
icon: 'dashicons dashicons-info',
type: 'blue',
buttons: {
confirm: {
text: evf_data.i18n_close,
btnClass: 'btn-confirm',
keys: ['enter'],
},
},
});
} else {
$.confirm({
title: false,
content: evf_data.i18n_duplicate_row_confirm,
type: 'orange',
closeIcon: false,
backgroundDismiss: false,
icon: 'dashicons dashicons-warning',
buttons: {
confirm: {
text: evf_data.i18n_ok,
btnClass: 'btn-confirm',
keys: ['enter'],
action: function () {
EVFPanelBuilder.cloneRowAction($row);
},
},
cancel: {
text: evf_data.i18n_cancel,
},
},
});
}
});
},
cloneRowAction: function (row) {
(row_ids = $('.evf-admin-row')
.map(function () {
return $(this).data('row-id');
})
.get()),
(max_row_id = Math.max.apply(Math, row_ids)),
(row_clone = row.clone()),
(total_rows = $('.evf-add-row').attr('data-total-rows'));
max_row_id++;
total_rows++;
// New row ID.
row_clone.attr('data-row-id', max_row_id);
// Initialize fields UI.
$('.evf-add-row').attr('data-total-rows', total_rows);
$('.evf-add-row').attr('data-next-row-id', max_row_id);
var data = {
action: 'everest_forms_get_next_id',
security: evf_data.evf_get_next_id,
form_id: evf_data.form_id,
fields: row_clone.find('.everest-forms-field').length,
};
$.ajax({
url: evf_data.ajax_url,
data: data,
type: 'POST',
beforeSend: function () {
$(document.body).trigger('init_field_options_toggle');
},
success: function (response) {
if (
typeof response.success === 'boolean' &&
response.success === true
) {
// Row append.
row.after(row_clone);
// Duplicating Fields
$.each(response.data, function (index, data) {
var field_id = data.field_id;
var field_key = data.field_key;
$('#everest-forms-field-id').val(field_id);
field = row_clone.find('.everest-forms-field').eq(index);
var element_field_id = field.attr('data-field-id');
EVFPanelBuilder.render_node(field, element_field_id, field_key);
field.remove();
$(document.body).trigger('init_field_options_toggle');
});
// Binding fields.
EVFPanelBuilder.bindFields();
}
},
});
},
cloneFieldAction: function (field) {
var element_field_id = field.attr('data-field-id');
var form_id = evf_data.form_id;
var data = {
action: 'everest_forms_get_next_id',
security: evf_data.evf_get_next_id,
form_id: form_id,
};
$.ajax({
url: evf_data.ajax_url,
data: data,
type: 'POST',
beforeSend: function () {
$(document.body).trigger('init_field_options_toggle');
},
success: function (response) {
if (
typeof response.success === 'boolean' &&
response.success === true
) {
var field_id = response.data.field_id;
var field_key = response.data.field_key;
$('#everest-forms-field-id').val(field_id);
EVFPanelBuilder.render_node(field, element_field_id, field_key);
$(document.body).trigger('init_field_options_toggle');
}
},
});
},
render_node: function (field, old_key, new_key) {
var option = $(
'.everest-forms-field-options #everest-forms-field-option-' + old_key,
);
var old_field_label = $(
'#everest-forms-field-option-' + old_key + '-label',
).val();
var old_field_meta_key = $(
'#everest-forms-field-option-' + old_key + '-meta-key',
).length
? $('#everest-forms-field-option-' + old_key + '-meta-key').val()
: '';
var field_type = field.attr('data-field-type'),
newOptionHtml = option.html(),
new_field_label = old_field_label + ' ' + evf_data.i18n_copy,
new_meta_key =
'html' !== field_type
? old_field_meta_key
.replace(/\(|\)/g, '')
.toLowerCase()
.substring(0, old_field_meta_key.lastIndexOf('_')) +
'_' +
Math.floor(1000 + Math.random() * 9000)
: '',
newFieldCloned = field.clone();
var regex = new RegExp(old_key, 'g');
newOptionHtml = newOptionHtml.replace(regex, new_key);
var newOption = $(
'',
);
newOption.append(newOptionHtml);
$.each(option.find(':input'), function () {
var type = $(this).attr('type');
var name = $(this).attr('name') ? $(this).attr('name') : '';
var new_name = name.replace(regex, new_key);
var value = '';
if (type === 'text' || type === 'hidden') {
value = $(this).val();
newOption.find('input[name="' + new_name + '"]').val(value);
newOption.find('input[value="' + old_key + '"]').val(new_key);
} else if (type === 'checkbox' || type === 'radio') {
if ($(this).is(':checked')) {
newOption
.find('input[name="' + new_name + '"]')
.prop('checked', true)
.attr('checked', 'checked');
} else {
newOption
.find('[name="' + new_name + '"]')
.prop('checked', false)
.attr('checked', false);
}
} else if ($(this).is('select')) {
if ($(this).find('option:selected').length) {
var option_value = $(this).find('option:selected').val();
newOption
.find('[name="' + new_name + '"]')
.find('[value="' + option_value + '"]')
.prop('selected', true);
}
} else {
if ($(this).val() !== '') {
newOption.find('[name="' + new_name + '"]').val($(this).val());
}
}
});
$('.everest-forms-field-options').append(newOption);
$('#everest-forms-field-option-' + new_key + '-label').val(
new_field_label,
);
$('#everest-forms-field-option-' + new_key + '-meta-key').val(
new_meta_key,
);
// Field Clone
newFieldCloned.attr('class', field.attr('class'));
newFieldCloned.attr('id', 'everest-forms-field-' + new_key);
newFieldCloned.attr('data-field-id', new_key);
newFieldCloned.attr('data-field-type', field_type);
newFieldCloned.find('.label-title .text').text(new_field_label);
field
.closest('.evf-admin-grid')
.find('[data-field-id="' + old_key + '"]')
.after(newFieldCloned);
$(document).trigger('everest-form-cloned', [new_key, field_type]);
EVFPanelBuilder.switchToFieldOptionPanel(new_key); //switch to cloned field options
// Trigger an event indicating completion of render_node action for cloning.
$(document.body).trigger('evf_render_node_complete', [
field_type,
new_key,
newFieldCloned,
newOption,
]);
EVFPanelBuilder.updateBulkActionBar();
},
bindFieldDelete: function () {
$('body').on(
'click',
'.everest-forms-preview .everest-forms-field .everest-forms-field-delete',
function () {
var $field = $(this).closest('.everest-forms-field');
var field_id = $field.attr('data-field-id');
var option_field = $('#everest-forms-field-option-' + field_id);
var grid = $(this).closest('.evf-admin-grid');
if ($field.hasClass('no-delete')) {
$.alert({
title: evf_data.i18n_field_locked,
content: evf_data.i18n_field_locked_msg,
icon: 'dashicons dashicons-info',
type: 'blue',
buttons: {
confirm: {
text: evf_data.i18n_close,
btnClass: 'btn-confirm',
keys: ['enter'],
},
},
});
} else {
$.confirm({
title: false,
content: evf_data.i18n_delete_field_confirm,
type: 'red',
closeIcon: false,
backgroundDismiss: false,
icon: 'dashicons dashicons-warning',
buttons: {
confirm: {
text: evf_data.i18n_ok,
btnClass: 'btn-confirm',
keys: ['enter'],
action: function () {
$('.evf-panel-fields-button').trigger('click');
$field.fadeOut('slow', function () {
var removed_el_id = $field.attr('data-field-id');
var field_type = $field.attr('data-field-type');
$(document.body).trigger('evf_before_field_deleted', [
removed_el_id,
]);
$field.remove();
option_field.remove();
EVFPanelBuilder.checkEmptyGrid();
$('.everest-forms-fields-tab')
.find('a')
.removeClass('active');
$('.everest-forms-fields-tab')
.find('a')
.first()
.addClass('active');
$('.everest-forms-add-fields').show();
EVFPanelBuilder.conditionalLogicRemoveField(
removed_el_id,
);
EVFPanelBuilder.conditionalLogicRemoveFieldIntegration(
removed_el_id,
);
EVFPanelBuilder.paymentFieldRemoveFromQuantity(
removed_el_id,
);
EVFPanelBuilder.oneTimeDraggableRemoveField(field_type);
});
},
},
cancel: {
text: evf_data.i18n_cancel,
},
},
});
}
},
);
},
bindFieldMultiSelect: function () {
if (!$('#evf-multi-select-style').length) {
$('head').append(
'',
);
}
if (!$('#evf-bulk-action-bar').length) {
$('body').append(
'' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
' +
'
',
);
}
$(document.body).on(
'click',
'.everest-forms-preview .everest-forms-field',
function (e) {
if (!e.shiftKey) return;
e.preventDefault();
e.stopPropagation();
$(this).toggleClass('evf-field-selected');
EVFPanelBuilder.updateBulkActionBar();
},
);
$(document.body).on(
'click',
'#evf-bulk-action-bar .evf-bulk-deselect',
function () {
$('.evf-field-selected').removeClass('evf-field-selected');
EVFPanelBuilder.updateBulkActionBar();
},
);
$(document.body).on(
'click',
'#evf-bulk-action-bar .evf-bulk-move-up',
function () {
var moved = false;
$('.everest-forms-preview .evf-field-selected').each(function () {
var $prev = $(this)
.prevAll('.everest-forms-field:not(.evf-field-selected)')
.first();
if ($prev.length) {
$prev.before($(this));
moved = true;
}
});
if (moved) {
$(document).trigger('evf_sort_update_complete', {
event: null,
ui: null,
});
} else {
$.alert({
title: false,
content: 'The selected ' + ($('.everest-forms-preview .evf-field-selected').length > 1 ? 'fields are' : 'field is') + ' already at the top.',
icon: 'dashicons dashicons-info',
type: 'blue',
buttons: {
ok: { text: 'OK', btnClass: 'btn-confirm', keys: ['enter'] },
},
});
}
},
);
$(document.body).on(
'click',
'#evf-bulk-action-bar .evf-bulk-move-down',
function () {
var moved = false;
$(
$('.everest-forms-preview .evf-field-selected').toArray().reverse(),
).each(function () {
var $next = $(this)
.nextAll('.everest-forms-field:not(.evf-field-selected)')
.first();
if ($next.length) {
$next.after($(this));
moved = true;
}
});
if (moved) {
$(document).trigger('evf_sort_update_complete', {
event: null,
ui: null,
});
} else {
$.alert({
title: false,
content: 'The selected ' + ($('.everest-forms-preview .evf-field-selected').length > 1 ? 'fields are' : 'field is') + ' already at the bottom.',
icon: 'dashicons dashicons-info',
type: 'blue',
buttons: {
ok: { text: 'OK', btnClass: 'btn-confirm', keys: ['enter'] },
},
});
}
},
);
$(document.body).on(
'click',
'#evf-bulk-action-bar .evf-bulk-delete',
function () {
var $selected = $('.everest-forms-preview .evf-field-selected'),
count = $selected.length;
$.confirm({
title: false,
content:
'Delete ' +
count +
' selected field' +
(count > 1 ? 's' : '') +
'?',
type: 'red',
closeIcon: false,
backgroundDismiss: false,
icon: 'dashicons dashicons-warning',
buttons: {
confirm: {
text: 'Delete',
btnClass: 'btn-danger',
action: function () {
var pending = $selected.length;
$('.evf-panel-fields-button').trigger('click');
$selected.each(function () {
var $field = $(this),
fieldId = $field.attr('data-field-id'),
field_type = $field.attr('data-field-type');
$field.fadeOut(200, function () {
$(document.body).trigger('evf_before_field_deleted', [
fieldId,
]);
$field.remove();
$('#everest-forms-field-option-' + fieldId).remove();
EVFPanelBuilder.conditionalLogicRemoveField(fieldId);
EVFPanelBuilder.conditionalLogicRemoveFieldIntegration(
fieldId,
);
EVFPanelBuilder.paymentFieldRemoveFromQuantity(fieldId);
EVFPanelBuilder.oneTimeDraggableRemoveField(field_type);
pending--;
if (0 === pending) {
EVFPanelBuilder.checkEmptyGrid();
$('.everest-forms-fields-tab')
.find('a')
.removeClass('active');
$('.everest-forms-fields-tab')
.find('a')
.first()
.addClass('active');
$('.everest-forms-add-fields').show();
$('#evf-bulk-action-bar').hide();
}
});
});
},
},
cancel: {
text: evf_data.i18n_close,
btnClass: 'btn-default',
},
},
});
},
);
$(document).on('keydown.evf-multi-select', function (e) {
if (27 === e.keyCode && $('.evf-field-selected').length) {
$('.evf-field-selected').removeClass('evf-field-selected');
EVFPanelBuilder.updateBulkActionBar();
}
});
},
updateBulkActionBar: function () {
var $bar = $('#evf-bulk-action-bar'),
count = $('.evf-field-selected').length;
if (count > 0) {
$bar
.find('.evf-bulk-count')
.text(count + ' field' + (count > 1 ? 's' : '') + ' selected');
$bar.css('display', 'flex');
} else {
$bar.hide();
}
},
bindFieldDeleteWithKeyEvent: function () {
$('body').on('keyup', function (e) {
var $field = $('.everest-forms-preview .everest-forms-field.active');
if (
46 === e.which &&
true === $field.hasClass('active') &&
false === $field.hasClass('evf-delete-event-active')
) {
if (false == $('.evf-admin-row').hasClass('evf-hover')) {
return;
}
$field.addClass('evf-delete-event-active');
var field_id = $field.attr('data-field-id');
var option_field = $('#everest-forms-field-option-' + field_id);
if ($field.hasClass('no-delete')) {
$.alert({
title: evf_data.i18n_field_locked,
content: evf_data.i18n_field_locked_msg,
icon: 'dashicons dashicons-info',
type: 'blue',
buttons: {
confirm: {
text: evf_data.i18n_close,
btnClass: 'btn-confirm',
keys: ['enter'],
action: function () {
$field.removeClass('evf-delete-event-active');
},
},
},
});
} else {
$.confirm({
title: false,
content: evf_data.i18n_delete_field_confirm,
type: 'red',
closeIcon: false,
backgroundDismiss: false,
icon: 'dashicons dashicons-warning',
buttons: {
confirm: {
text: evf_data.i18n_ok,
btnClass: 'btn-confirm',
keys: ['enter'],
action: function () {
$('.evf-panel-fields-button').trigger('click');
$field.fadeOut('slow', function () {
var removed_el_id = $field.attr('data-field-id');
$(document.body).trigger('evf_before_field_deleted', [
removed_el_id,
]);
$field.remove();
option_field.remove();
EVFPanelBuilder.checkEmptyGrid();
$('.everest-forms-fields-tab')
.find('a')
.removeClass('active');
$('.everest-forms-fields-tab')
.find('a')
.first()
.addClass('active');
$('.everest-forms-add-fields').show();
EVFPanelBuilder.conditionalLogicRemoveField(
removed_el_id,
);
EVFPanelBuilder.conditionalLogicRemoveFieldIntegration(
removed_el_id,
);
EVFPanelBuilder.paymentFieldRemoveFromQuantity(
removed_el_id,
);
});
$field.removeClass('evf-delete-event-active');
},
},
cancel: {
text: evf_data.i18n_cancel,
action: function () {
$field.removeClass('evf-delete-event-active');
},
},
},
});
}
}
});
},
syncSubscriptionPlanChoiceFieldsBeforeSave: function () {
$(
'.everest-forms-field-option-payment-subscription-plan .evf-choices-list > li',
).each(function () {
var $li = $(this);
var $trialEnable = $li.find('.evf-enable-trial-period');
var $expiryEnable = $li.find('.evf-enable-expiry-date');
var trialOn = $trialEnable.length && $trialEnable.is(':checked');
var expiryOn = $expiryEnable.length && $expiryEnable.is(':checked');
var $expiryInput = $li.find('.evf-radio-subscription-expiry-input');
// Exclude stale trial length fields when trial is off (prevents false trial in gateways).
$li.find('.evf-spt-panel--trial input, .evf-spt-panel--trial select').prop(
'disabled',
!trialOn,
);
// Exclude stale expiry date when expiry is off (do not infer enable from date alone).
$expiryInput.prop('disabled', !expiryOn);
if (!expiryOn) {
EVFPanelBuilder.clear_subscription_plan_expiry_date($li);
} else if ($expiryInput.length && $expiryInput[0]._flatpickr) {
var fp = $expiryInput[0]._flatpickr;
if (fp.selectedDates && fp.selectedDates[0]) {
$expiryInput.val(
fp.formatDate(
fp.selectedDates[0],
$expiryInput.data('date-format') || 'Y-m-d',
),
);
}
}
if ($trialEnable.length) {
$trialEnable.prop('checked', !!trialOn);
}
});
},
bindSaveOption: function () {
$('body').on('click', '.everest-forms-save-button', function () {
var $this = $(this);
var $form = $('form#everest-forms-builder-form');
var structure = EVFPanelBuilder.getStructure();
EVFPanelBuilder.syncSubscriptionPlanChoiceFieldsBeforeSave();
var form_data = $form.serializeArray();
// Re-enable trial/expiry inputs so the builder UI stays interactive after save.
$(
'.everest-forms-field-option-payment-subscription-plan .evf-spt-panel--trial input, .everest-forms-field-option-payment-subscription-plan .evf-spt-panel--trial select',
).prop('disabled', false);
$(
'.everest-forms-field-option-payment-subscription-plan .evf-radio-subscription-expiry-input',
).prop('disabled', false);
var form_title = $('#evf-edit-form-name').val().trim();
// Save form args.
$(document).trigger('everest_forms_save_args', [form_data]);
if ('' === form_title) {
$.alert({
title: evf_data.i18n_field_title_empty,
content: evf_data.i18n_field_title_payload,
icon: 'dashicons dashicons-warning',
type: 'red',
buttons: {
ok: {
text: evf_data.i18n_ok,
btnClass: 'btn-confirm',
keys: ['enter'],
},
},
});
return;
}
// Trigger a handler to let addon manipulate the form data if needed.
if (
$form.triggerHandler('everest_forms_process_ajax_data', [
$this,
form_data,
])
) {
form_data = $form.triggerHandler('everest_forms_process_ajax_data', [
$this,
form_data,
]);
}
$('.everest-forms-panel-content-wrap').block({
message: null,
overlayCSS: {
background: '#fff',
opacity: 0.6,
},
});
/* DB unwanted data erase start */
var rfields_ids = [];
$('.everest-forms-field[data-field-id]').each(function () {
rfields_ids.push($(this).attr('data-field-id'));
});
var form_data_length = form_data.length;
while (form_data_length--) {
if (form_data[form_data_length].name.startsWith('form_fields')) {
var idflag = false;
rfields_ids.forEach(function (element) {
if (
form_data[form_data_length].name.startsWith(
'form_fields[' + element + ']',
)
) {
idflag = true;
}
});
if (form_data_length > -1 && idflag === false) {
form_data.splice(form_data_length, 1);
}
}
}
/* DB fix end */
var new_form_data = form_data.concat(structure);
var data = {
action: 'everest_forms_save_form',
security: evf_data.evf_save_form,
form_data: JSON.stringify(new_form_data),
};
$.ajax({
url: evf_data.ajax_url,
data: data,
type: 'POST',
beforeSend: function () {
$this.addClass('processing');
$this.find('.loading-dot').remove();
$this.append('');
},
success: function (response) {
$this.removeClass('processing');
$this.find('.loading-dot').remove();
//Response data of ajax.
$(document).trigger('everest_forms_save_data', response.data);
if (!response.success) {
$.alert({
title: response.data.errorTitle,
content: response.data.errorMessage,
icon: 'dashicons dashicons-warning',
type: 'red',
buttons: {
ok: {
text: evf_data.i18n_ok,
btnClass: 'btn-confirm',
keys: ['enter'],
},
},
});
} else {
EVFPanelBuilder.captureStyleTabBaseline();
$(document).trigger('everest_forms_form_saved');
EVFPanelBuilder.toggleUnsavedStyleNotice();
}
$('.everest-forms-panel-content-wrap').unblock();
},
});
});
},
bindEmbedOption: function () {
$('body').on('click', '.everest-forms-embed-button', function () {
var data = {
action: 'everest_forms_embed_form',
security: evf_data.evf_embed_form,
};
var $this = $(this);
$.ajax({
url: evf_data.ajax_url,
data: data,
type: 'POST',
beforeSend: function () {
$this.addClass('processing');
$this.find('.loading-dot').remove();
$this.append('');
},
success: function (response) {
$this.removeClass('processing');
$this.find('.loading-dot').remove();
var $title = 'Embed in Page
';
var modelContent = '';
var $message =
'';
modelContent = $message + $selectExistingPage + $createNewPage;
$.alert({
title: $title,
content: modelContent,
type: 'blue',
draggable:false,
onContentReady: function () {
var $formId = $('.everest-forms-embed-button').attr(
'data-form_id',
);
$('.jconfirm-buttons').hide();
//when clicked on 'Select Existing Page' button
$('.everest-forms-select-existing-page').click(function () {
$('.everest_forms_hide_container').hide();
var $selectStart =
'Select the page you would like to embed your form in.
';
var $backBtn =
'
Go Back
';
modelContent = $selectStart + $option + $selectEnd + $backBtn;
$('.everest-forms-show-exist-page').append(modelContent);
$('.everest-forms-show-container').click(function () {
$('.everest_forms_hide_container').show();
$('.everest-forms-select-existing-post-container').remove();
});
//When page is selected
$('.everest-forms-select-existing-post-container').change(
function () {
var $pageId = $(this).find(':selected').val();
$('.everest-forms-lets-go-btn').click(function () {
var data = {
action: 'everest_forms_goto_edit_page',
security: evf_data.evf_goto_edit_page,
page_id: $pageId,
form_id: $formId,
};
$.ajax({
url: evf_data.ajax_url,
type: 'POST',
data: data,
success: function (response) {
if (response.success) {
window.location = response.data;
}
},
});
});
},
);
});
//when click on 'Create New Page' button
$('.everest-forms-create-new-page').click(function () {
$('.everest_forms_hide_container').hide();
var $title =
'What would you like to call the new page?
';
var $pageName = '
';
var $goBtn =
'
';
var $backBtn =
'
Go Back
';
modelContent = $title + $pageName + $goBtn + $backBtn;
$(' .everest-forms-show-exist-page').append(modelContent);
$('.everest-forms-show-container').click(function () {
$('.everest_forms_hide_container').show();
$('.everest-forms-select-existing-post-container').remove();
});
$('.everest-forms-lets-go-btn').click(function () {
var $pageTitle = $("[name='page_title']").val();
var data = {
action: 'everest_forms_goto_edit_page',
security: evf_data.evf_goto_edit_page,
page_title: $pageTitle,
form_id: $formId,
};
$.ajax({
url: evf_data.ajax_url,
type: 'POST',
data: data,
success: function (response) {
if (response.success) {
window.location = response.data;
}
},
});
});
});
},
});
},
});
});
},
bindPreviewConfirmation: function () {
$('.everest-preview-confirmation').each(function () {
const $checkbox = $(this);
const $target = $checkbox
.closest('.everest-forms-panel-field-toggle')
.next('.preview-confirm-select-wrapper');
if ($checkbox.is(':checked')) {
$target.show();
} else {
$target.hide();
}
$checkbox.on('change', function () {
if ($(this).is(':checked')) {
$target.show();
} else {
$target.hide();
}
});
});
},
bindSaveOptionWithKeyEvent: function () {
$('body').on('keydown', function (e) {
if (e.ctrlKey || e.metaKey) {
if (
's' === String.fromCharCode(e.which).toLowerCase() ||
83 === e.which
) {
e.preventDefault();
$('.everest-forms-save-button').trigger('click');
}
}
});
},
bindOpenShortcutKeysModalWithKeyEvent: function () {
$('body').on('keydown', function (e) {
if (e.ctrlKey || e.metaKey) {
if (
'h' === String.fromCharCode(e.which).toLowerCase() ||
72 === e.which
) {
e.preventDefault();
var shortcut_keys_html = '';
$.each(evf_data.i18n_shortcut_keys, function (key, value) {
shortcut_keys_html += `
`;
});
$.alert({
title: evf_data.i18n_shortcut_key_title,
content: shortcut_keys_html,
icon: 'dashicons dashicons-info',
type: 'blue',
boxWidth: '550px',
buttons: {
confirm: {
text: evf_data.i18n_close,
btnClass: 'btn-confirm',
keys: ['enter'],
},
},
onContentReady: function () {
$('body').on('keydown', function (e) {
if (
e.ctrlKey ||
(e.metaKey &&
'h' === String.fromCharCode(e.which).toLowerCase()) ||
72 === e.which
) {
$('.btn-confirm').trigger('click');
}
});
},
});
}
}
});
},
getStructure: function () {
var wrapper = $('.evf-admin-field-wrapper');
var structure = [];
$.each(wrapper.find('.evf-admin-row'), function () {
var $row = $(this),
row_id = $row.attr('data-row-id');
$.each($row.find('.evf-admin-grid'), function () {
var $grid = $(this),
grid_id = $grid.attr('data-grid-id');
var array_index = 0;
$.each($grid.find('.everest-forms-field'), function () {
var structure_object = { name: '', value: '' };
var field_id = $(this).attr('data-field-id');
structure_object.name =
'structure[row_' +
row_id +
'][grid_' +
grid_id +
'][' +
array_index +
']';
array_index++;
structure_object.value = field_id;
structure.push(structure_object);
});
if ($grid.find('.everest-forms-field').length < 1) {
structure.push({
name: 'structure[row_' + row_id + '][grid_' + grid_id + ']',
value: '',
});
}
});
});
return structure;
},
getFieldArray: function (grid) {
var fields = [];
$.each(grid.find('.everest-forms-field'), function () {
var field_id = $(this).attr('data-field-id');
fields.push(field_id);
});
return fields;
},
checkEmptyGrid: function ($force) {
$.each($('.evf-admin-grid'), function () {
var $fields = $(this).find(
'.everest-forms-field, .evf-registered-item:not(.ui-draggable-dragging)',
);
if ($fields.not('.ui-sortable-helper').length < 1) {
$(this).addClass('evf-empty-grid');
} else {
$(this).removeClass('evf-empty-grid');
}
});
EVFPanelBuilder.choicesInit();
},
captureStyleTabBaseline: function () {
var $form = $('form#everest-forms-builder-form');
if ($form.length) {
evfStyleTabBaseline = $form.serialize();
}
},
hasUnsavedFieldChanges: function () {
var $form = $('form#everest-forms-builder-form');
if (null === evfStyleTabBaseline || !$form.length) {
return false;
}
return $form.serialize() !== evfStyleTabBaseline;
},
bindDefaultTabs: function () {
$(document).on('click', '.evf-nav-tab-wrapper a', function (e) {
e.preventDefault();
EVFPanelBuilder.switchTab($(this).data('panel'));
});
},
toggleUnsavedStyleNotice: function () {
if ('function' === typeof window.evfScv2SetFormDirty) {
window.evfScv2SetFormDirty(EVFPanelBuilder.hasUnsavedFieldChanges());
}
},
switchTab: function (panel) {
var $panel = $('#everest-forms-panel-' + panel),
$panelBtn = $('.evf-panel-' + panel + '-button');
// Guard against silently losing unsaved Style Customizer changes when switching
// away via this in-app tab click — the existing `beforeunload` handler only
// catches a real page close/reload, not this SPA-style panel switch.
var currentPanel = $('.evf-nav-tab-wrapper').find('a.nav-tab-active').data('panel');
if (
'style' === currentPanel &&
panel !== currentPanel &&
'function' === typeof window.evfScv2IsDirty &&
window.evfScv2IsDirty()
) {
if (!window.confirm(evf_data.i18n_unsaved_style_changes)) {
return;
}
}
$('.evf-nav-tab-wrapper').find('a').removeClass('nav-tab-active');
$panelBtn.addClass('nav-tab-active');
$panel
.closest('.evf-tab-content')
.find('.everest-forms-panel')
.removeClass('active');
$panel.addClass('active');
if ('integrations' === panel) {
var $firstConnected = $panel
.find('.everest-forms-panel-sidebar a')
.not('.evf-addon-install-trigger')
.not('.upgrade-addons-settings')
.first();
if ($firstConnected.length) {
$firstConnected.trigger('click');
} else {
$panel
.find('.everest-forms-panel-sidebar a')
.first()
.addClass('active');
}
} else if ('payments' === panel) {
if (!$panel.find('.everest-forms-panel-sidebar a').hasClass('active')) {
$panel
.find('.everest-forms-panel-sidebar a')
.first()
.addClass('active');
}
if (
!$('.everest-forms-panel-content')
.find('.evf-panel-content-section')
.hasClass('active')
) {
$('.everest-forms-panel-content')
.find('.evf-panel-content-section')
.first()
.addClass('active');
}
}
history.replaceState(
{},
null,
EVFPanelBuilder.updateQueryString('tab', panel),
);
EVFPanelBuilder.switchPanel(panel);
EVFPanelBuilder.toggleUnsavedStyleNotice();
},
updateQueryString: function (key, value, url) {
if (!url) url = window.location.href;
var re = new RegExp('([?&])' + key + '=.*?(&|#|$)(.*)', 'gi'),
hash;
if (re.test(url)) {
if (typeof value !== 'undefined' && value !== null)
return url.replace(re, '$1' + key + '=' + value + '$2$3');
else {
hash = url.split('#');
url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, '');
if (typeof hash[1] !== 'undefined' && hash[1] !== null)
url += '#' + hash[1];
return url;
}
} else {
if (typeof value !== 'undefined' && value !== null) {
var separator = url.indexOf('?') !== -1 ? '&' : '?';
hash = url.split('#');
url = hash[0] + separator + key + '=' + value;
if (typeof hash[1] !== 'undefined' && hash[1] !== null)
url += '#' + hash[1];
return url;
} else {
return url;
}
}
},
switchPanel: function (panel) {
if (panel === 'field-options') {
EVFPanelBuilder.switchToFieldOptionPanel();
}
},
switchToFieldOptionPanel: function (field_id) {
$('.everest-forms-field-options').find('.no-fields').hide();
$('.evf-admin-field-wrapper .everest-forms-field').removeClass('active');
$('#everest-forms-panel-fields').addClass('active');
$('.everest-forms-fields-tab').find('a').removeClass('active');
$('.everest-forms-fields-tab').find('a').last().addClass('active');
$('.everest-forms-add-fields').hide();
$('.everest-forms-field-options').show();
$('.everest-forms-field-options')
.find('.everest-forms-field-option')
.hide();
$('.evf-tab-lists').find('li a').removeClass('active');
$('.evf-tab-lists')
.find('li.evf-panel-field-options-button a')
.addClass('active');
$(document.body).trigger('evf-init-switch-field-options');
if (typeof field_id !== 'undefined') {
var $fieldOptions = $('#everest-forms-field-option-' + field_id);
if ($fieldOptions.length > 0) {
var $basicGroup = $('#everest-forms-field-option-basic-' + field_id);
$basicGroup
.removeClass('closed')
.addClass('open')
.find('.everest-forms-field-option-group-inner')
.show();
const $tempLink = $('').appendTo(
document.body,
);
$tempLink[0].click();
setTimeout(() => {
$tempLink.remove();
}, 100);
}
$('#everest-forms-field-option-' + field_id).show();
/**
* Close all field option groups except basic group
* This is to ensure that only basic group is open when switching to field options.
*
* @since 3.2.4
*/
$('#everest-forms-field-option-' + field_id)
.find('.everest-forms-field-option-group')
.each(function () {
$field_options_element = $(this);
if (
!$field_options_element.hasClass(
'everest-forms-field-option-group-basic',
)
) {
if ($field_options_element.hasClass('open')) {
$field_options_element.removeClass('open').addClass('closed');
$field_options_element
.find('.everest-forms-field-option-group-inner')
.hide();
}
}
});
$('#everest-forms-field-' + field_id).addClass('active');
} else {
if ($('.evf-admin-field-wrapper .everest-forms-field').length > 0) {
$('.evf-admin-field-wrapper .everest-forms-field')
.eq(0)
.addClass('active');
$(
'#everest-forms-field-option-' +
$('.evf-admin-field-wrapper .everest-forms-field')
.eq(0)
.attr('data-field-id'),
).show();
} else {
$('.everest-forms-field-options').find('.no-fields').show();
}
}
},
bindFields: function () {
$('.evf-admin-field-wrapper')
.sortable({
items: '.evf-admin-row',
axis: 'y',
cursor: 'move',
opacity: 0.65,
scrollSensitivity: 40,
forcePlaceholderSize: true,
placeholder: 'evf-sortable-placeholder',
containment: '.everest-forms-panel-content',
start: function (event, ui) {
ui.item.css({
backgroundColor: '#f7fafc',
border: '1px dashed #5d96ee',
});
},
stop: function (event, ui) {
ui.item.removeAttr('style');
},
})
.disableSelection();
$('.evf-admin-grid')
.sortable({
items: '> .everest-forms-field[data-field-type!="repeater-fields"]',
delay: 100,
opacity: 0.65,
cursor: 'move',
scrollSensitivity: 40,
forcePlaceholderSize: true,
connectWith: '.evf-admin-grid',
appendTo: document.body,
tolerance: 'pointer',
out: function (event) {
$('.evf-admin-grid').removeClass('evf-hover');
$(event.target).removeClass('evf-item-hover');
$(event.target).closest('.evf-admin-row').removeClass('evf-hover');
EVFPanelBuilder.checkEmptyGrid();
},
over: function (event, ui) {
if (!ui.item.hasClass('required')) {
ui.item.find('.required').remove();
}
$('.evf-admin-grid').addClass('evf-hover');
$(event.target).addClass('evf-item-hover');
$(event.target).closest('.evf-admin-row').addClass('evf-hover');
EVFPanelBuilder.checkEmptyGrid();
// Resize helper to fit the target column on entry
if (ui.helper.data('origWidth') === undefined) {
ui.helper.data('origWidth', ui.helper.width());
}
var newWidth = Math.min(ui.helper.data('origWidth'), $(this).width());
ui.helper.css('width', newWidth + 'px');
},
sort: function (event, ui) {
// sort() fires continuously on the SOURCE grid on every mousemove.
// Use ui.placeholder to find the DESTINATION grid regardless of which
// grid's sort handler is executing, then pin helper to that column.
var dragInst = $.ui.ddmanager && $.ui.ddmanager.current;
if (!dragInst || !dragInst.offset || !dragInst.offset.click) return;
if (!ui.placeholder) return;
// Cache the destination grid and its offset to reduce DOM queries
if (!dragInst._evf_destGrid || dragInst._evf_destGrid !== ui.placeholder[0].parentElement) {
dragInst._evf_destGrid = ui.placeholder.closest('.evf-admin-grid')[0];
if (!dragInst._evf_destGrid) return;
dragInst._evf_destGridOffset = null; // Invalidate cached offset when grid changes
}
var destGrid = dragInst._evf_destGrid;
if (!dragInst._evf_destGridOffset) {
dragInst._evf_destGridOffset = $(destGrid).offset().left;
}
if (ui.helper.data('origWidth') === undefined) {
ui.helper.data('origWidth', ui.helper.width());
}
dragInst.offset.click.left = Math.max(5, Math.min(event.pageX - dragInst._evf_destGridOffset, ui.helper.width() - 5));
},
receive: function (event, ui) {
if (ui.sender.is('button')) {
EVFPanelBuilder.fieldDrop(ui.helper);
}
},
update: function (event, ui) {
$(document).trigger('evf_sort_update_complete', {
event: event,
ui: ui,
});
},
stop: function (event, ui) {
if (!ui.item.hasClass('required')) {
const labelTitle = ui.item.find('.label-title');
if (labelTitle.length > 0) {
labelTitle.append('*');
}
}
ui.item.removeAttr('style');
EVFPanelBuilder.checkEmptyGrid();
},
})
.disableSelection();
$(
'.evf-registered-buttons button.evf-registered-item:not(.evf-layout-container-btn):not(.upgrade-modal):not(.evf-upgrade-addon):not(.enable-stripe-model):not(.enable-authorize-net-model):not(.enable-payment-subscription-plan):not(.everest-forms-pro-is_square_install):not(.enable-square-model):not(.evf-one-time-draggable-field):not(.recaptcha_empty_key_validate):not(.hcaptcha_empty_key_validate):not(.turnstile_empty_key_validate)',
)
.draggable({
delay: 200,
cancel: false,
scroll: false,
revert: 'invalid',
scrollSensitivity: 40,
forcePlaceholderSize: true,
start: function () {
$(this).addClass('field-dragged');
},
helper: function () {
return $(this)
.clone()
.insertAfter(
$(this)
.closest('.everest-forms-tab-content')
.siblings('.everest-forms-fields-tab'),
);
},
stop: function () {
$(this).removeClass('field-dragged');
},
opacity: 0.75,
containment: '#everest-forms-builder',
connectToSortable: '.evf-admin-grid',
})
.disableSelection();
// Layout presets (sidebar): draggable onto canvas only — always creates a new row (never a grid cell).
$('.evf-layout-container-btn').each(function () {
var $btn = $(this);
if ($btn.data('ui-draggable')) {
$btn.draggable('destroy');
}
var cursorLeft = Math.round($btn.outerWidth() / 2),
cursorTop = Math.round($btn.outerHeight() / 2);
$btn.draggable({
delay: 0,
distance: 2,
cancel: false,
scroll: false,
revert: 'invalid',
appendTo: 'body',
zIndex: 100050,
start: function (event, ui) {
$(this).addClass('field-dragged');
$('#everest-forms-builder').addClass(
'evf-is-dragging-layout-container',
);
var cx = event.clientX - cursorLeft,
cy = event.clientY - cursorTop;
ui.helper.css({
position: 'fixed',
margin: 0,
left: cx,
top: cy,
pointerEvents: 'none',
boxSizing: 'border-box',
});
setTimeout(function () {
ui.helper.css({ left: cx, top: cy });
}, 0);
},
helper: function () {
return $(this)
.clone()
.addClass('evf-layout-container-drag-helper')
.css({
width: $(this).outerWidth(),
boxSizing: 'border-box',
})
.appendTo(document.body);
},
drag: function (event, ui) {
ui.position.left = event.clientX - cursorLeft;
ui.position.top = event.clientY - cursorTop;
var $activeZone = $('#everest-forms-builder').data(
'evf-layout-active-drop-zone',
);
if ($activeZone && $activeZone.length) {
updateLayoutDropIndicator($activeZone, event.pageY);
}
},
stop: function () {
$(this).removeClass('field-dragged');
$('#everest-forms-builder').removeClass(
'evf-is-dragging-layout-container',
);
$('#everest-forms-builder').removeData(
'evf-layout-active-drop-zone',
);
$('.evf-layout-drop-target-hover').removeClass(
'evf-layout-drop-target-hover',
);
clearLayoutDropIndicators();
},
opacity: 0.92,
});
});
var layoutDropAccept = function (draggable) {
return $(draggable).hasClass('evf-layout-container-btn');
};
var clearLayoutDropIndicators = function () {
$('.evf-admin-row').removeClass(
'evf-layout-insert-before evf-layout-insert-after',
);
$(
'.evf-admin-field-wrapper, [id^="part_"], .evf-add-row:not(.repeater-row)',
).removeClass('evf-layout-insert-empty evf-layout-insert-after-all');
};
var updateLayoutDropIndicator = function ($zone, pageY) {
var $rows = $zone.children('.evf-admin-row'),
$beforeRow = null,
$afterRow = null;
$rows.removeClass('evf-layout-insert-before evf-layout-insert-after');
$zone.removeClass('evf-layout-insert-empty');
if (!$rows.length) {
$zone.addClass('evf-layout-insert-empty');
return;
}
$rows.each(function () {
var $r = $(this),
top = $r.offset().top,
mid = top + $r.outerHeight() / 2;
if (pageY < mid) {
$beforeRow = $r;
return false;
}
$afterRow = $r;
});
if ($beforeRow && $beforeRow.length) {
$beforeRow.addClass('evf-layout-insert-before');
} else if ($afterRow && $afterRow.length) {
$afterRow.addClass('evf-layout-insert-after');
}
};
var queueLayoutInsert = function (callback) {
window.setTimeout(callback, 0);
};
EVFPanelBuilder.getLayoutDropZones().each(function () {
var $zone = $(this);
if ($zone.data('ui-droppable')) {
$zone.droppable('destroy');
}
$zone.droppable({
accept: layoutDropAccept,
tolerance: 'pointer',
greedy: false,
over: function (event) {
var $zone = $(this);
$zone.addClass('evf-layout-drop-target-hover');
$('#everest-forms-builder').data(
'evf-layout-active-drop-zone',
$zone,
);
updateLayoutDropIndicator($zone, event.pageY);
},
out: function () {
$(this).removeClass('evf-layout-drop-target-hover');
$('#everest-forms-builder').removeData(
'evf-layout-active-drop-zone',
);
clearLayoutDropIndicators();
},
drop: function (event, ui) {
$(this).removeClass('evf-layout-drop-target-hover');
$('#everest-forms-builder').removeData(
'evf-layout-active-drop-zone',
);
clearLayoutDropIndicators();
var columns = parseInt(ui.draggable.data('columns'), 10);
if (!columns || columns < 1) {
return;
}
var $z = $(this),
y = event.pageY,
$rows = $z.children('.evf-admin-row'),
$beforeRow = null,
$afterRow = null;
$rows.each(function () {
var $r = $(this),
top = $r.offset().top,
mid = top + $r.outerHeight() / 2;
if (y < mid) {
$beforeRow = $r;
return false;
}
$afterRow = $r;
});
if ($beforeRow && $beforeRow.length) {
queueLayoutInsert(function () {
EVFPanelBuilder.addLayoutContainer(
columns,
null,
$beforeRow,
$z,
);
});
} else if ($afterRow && $afterRow.length) {
queueLayoutInsert(function () {
EVFPanelBuilder.addLayoutContainer(
columns,
$afterRow,
null,
$z,
);
});
} else {
queueLayoutInsert(function () {
EVFPanelBuilder.addLayoutContainer(
columns,
null,
null,
$z,
);
});
}
},
});
});
$('.evf-add-row:not(.repeater-row)').each(function () {
var $addStrip = $(this);
if ($addStrip.data('ui-droppable')) {
$addStrip.droppable('destroy');
}
$addStrip.droppable({
accept: layoutDropAccept,
tolerance: 'pointer',
over: function () {
$(this).addClass('evf-layout-drop-target-hover');
$(this).addClass('evf-layout-insert-after-all');
},
out: function () {
$(this).removeClass('evf-layout-drop-target-hover');
$(this).removeClass('evf-layout-insert-after-all');
},
drop: function (event, ui) {
$(this).removeClass('evf-layout-drop-target-hover');
$(this).removeClass('evf-layout-insert-after-all');
clearLayoutDropIndicators();
var columns = parseInt(ui.draggable.data('columns'), 10);
if (!columns || columns < 1) {
return;
}
var $ctx = $(this),
wrapper = $('.evf-admin-field-wrapper'),
current_part = $ctx
.closest('.evf-admin-field-container')
.attr('data-current-part');
if (current_part) {
var $pw = wrapper.find('#part_' + current_part);
if ($pw.length) {
wrapper = $pw;
}
}
var $last = wrapper.children('.evf-admin-row').last();
if ($last.length) {
queueLayoutInsert(function () {
EVFPanelBuilder.addLayoutContainer(
columns,
$last,
null,
$ctx,
);
});
} else {
queueLayoutInsert(function () {
EVFPanelBuilder.addLayoutContainer(
columns,
null,
null,
$ctx,
);
});
}
},
});
});
// Repeatable grid connect to sortable setter.
$('.evf-registered-item.evf-repeater-field').draggable(
'option',
'connectToSortable',
'.evf-repeatable-grid',
);
// Adapt hover behaviour on mouse event.
$('.evf-admin-row').on('mouseenter mouseleave', function (event) {
if (1 > event.buttons) {
if ('mouseenter' === event.type) {
$(this).addClass('evf-hover');
} else {
$('.evf-admin-row:not(.evf-popover-open)').removeClass('evf-hover');
}
}
});
// Refresh the position of placeholders on drag scroll.
$('.everest-forms-panel-content').on('scroll', function () {
$('.evf-admin-grid').sortable('refreshPositions');
$('.evf-admin-field-wrapper').sortable('refreshPositions');
});
$('.evf-admin-field-wrapper .evf-admin-row').each(function () {
if (!$(this).find('.evf-add-field-to-row').length) {
$(this)
.find('.evf-toggle-row')
.prepend(
'' +
'' +
'
',
);
}
});
$('.evf-admin-field-wrapper .everest-forms-field').each(function () {
if (!$(this).find('.evf-add-field-below').length) {
$(this).append(
'' +
'' +
'
',
);
}
});
},
/**
* Populate the row field popover with tabs and field items from the sidebar.
*/
populateRowPopover: function () {
var $tabs = $('#evf-row-field-popover .evf-popover-tabs').empty(),
$fields = $('#evf-row-field-popover .evf-popover-fields').empty(),
blocked = [
'upgrade-modal',
'evf-upgrade-addon',
'enable-stripe-model',
'enable-authorize-net-model',
'enable-payment-subscription-plan',
'everest-forms-pro-is_square_install',
'enable-square-model',
'evf-one-time-draggable-field',
'recaptcha_empty_key_validate',
'hcaptcha_empty_key_validate',
'turnstile_empty_key_validate',
];
$tabs.append(
'',
);
$('.everest-forms-add-fields-group').each(function () {
// Exclude the layout group from the field-picker popover entirely.
if ($(this).hasClass('evf-layout-group')) {
return;
}
var $heading = $(this).find('.everest-forms-add-fields-heading'),
groupKey = $heading.data('group'),
groupLabel = $heading.clone().children().remove().end().text().trim();
if (groupKey) {
$tabs.append(
'',
);
}
$(this)
.find('.evf-registered-item')
.each(function () {
var $btn = $(this),
fieldType = $btn.data('field-type'),
fieldLabel = $btn.text().trim(),
iconHtml = $btn.find('i').length
? $btn.find('i').prop('outerHTML')
: '',
blockedClass = (function () {
for (var i = 0; i < blocked.length; i++) {
if ($btn.hasClass(blocked[i])) {
return blocked[i];
}
}
return '';
}()),
isBlocked = blockedClass !== '',
isProLocked =
$btn.hasClass('upgrade-modal') ||
$btn.hasClass('evf-upgrade-addon');
// Skip items with no field type or no label — avoids blank popover entries.
if (!fieldType || !fieldLabel) {
return;
}
$fields.append(
$(
'',
)
.attr('data-field-type', fieldType)
.attr('data-field-label', fieldLabel)
.attr('data-field-group', groupKey || '')
.attr('data-blocked-class', blockedClass || null)
.append(
'' +
iconHtml +
'',
)
.append(
'' +
fieldLabel +
'',
),
);
});
});
},
/**
* Bind the row-level "+" button and its field-picker popover.
*/
bindRowFieldPopover: function () {
var proIconUrl = ( function () {
var locked = document.querySelector(
'.evf-registered-item.upgrade-modal',
);
if ( ! locked ) {
return '';
}
return window
.getComputedStyle( locked, '::before' )
.backgroundImage.replace( /^url\(["']?/, '' )
.replace( /["']?\)$/, '' );
}() );
if (!$('#evf-row-popover-style').length) {
$('head').append(
'',
);
}
if (!$('#evf-row-field-popover').length) {
$('body').append(
'' +
'
' +
'
' +
'' +
'' +
'
' +
'
' +
'
' +
'
',
);
}
EVFPanelBuilder.populateRowPopover();
var positionPopover = function ($anchor, $pop, forceFlipped) {
var offset = $anchor.offset(),
scrollLeft = $(window).scrollLeft(),
scrollTop = $(window).scrollTop(),
vpW = window.innerWidth,
vpH = window.innerHeight,
popW = $pop.outerWidth(),
$fieldsWrap = $pop.find('.evf-popover-fields-wrap'),
defaultFieldsMaxHeight = 320,
popH,
margin = 8,
anchorCX = offset.left - scrollLeft + $anchor.outerWidth() / 2,
anchorTop = offset.top - scrollTop,
belowTop = anchorTop + $anchor.outerHeight() + 6,
aboveTop,
top,
left = anchorCX - popW / 2,
flipped = false;
$fieldsWrap.css('max-height', defaultFieldsMaxHeight + 'px');
popH = $pop.outerHeight();
var maxPopoverHeight = vpH - margin * 2;
if (popH > maxPopoverHeight) {
var staticHeight = popH - $fieldsWrap.outerHeight();
$fieldsWrap.css(
'max-height',
Math.max(140, maxPopoverHeight - staticHeight) + 'px',
);
popH = $pop.outerHeight();
}
aboveTop = anchorTop - popH - 6;
left = Math.min(Math.max(margin, left), vpW - popW - margin);
var fitsBelow = belowTop + popH <= vpH - margin,
fitsAbove = aboveTop >= margin;
if (forceFlipped !== undefined) {
flipped = forceFlipped;
if (flipped && !fitsAbove && fitsBelow) {
flipped = false;
} else if (!flipped && !fitsBelow && fitsAbove) {
flipped = true;
}
} else if (fitsBelow) {
flipped = false;
} else if (fitsAbove) {
flipped = true;
} else {
var spaceBelow = vpH - margin - belowTop,
spaceAbove = anchorTop - margin - 6;
flipped = spaceAbove > spaceBelow;
}
top = flipped ? aboveTop : belowTop;
top = Math.max(margin, Math.min(top, vpH - popH - margin));
var arrowX = anchorCX - left - 7;
arrowX = Math.min(Math.max(14, arrowX), popW - 28);
$pop
.toggleClass('evf-popover-flipped', flipped)
.find('.evf-popover-arrow')
.css('left', arrowX + 'px');
return { top: top, left: left };
};
var updateTabArrows = function () {
var tabs = document.querySelector(
'#evf-row-field-popover .evf-popover-tabs',
);
if (!tabs) return;
$('.evf-tabs-arrow-left').toggleClass(
'evf-tabs-arrow-visible',
tabs.scrollLeft > 1,
);
$('.evf-tabs-arrow-right').toggleClass(
'evf-tabs-arrow-visible',
Math.ceil(tabs.scrollLeft + tabs.clientWidth) < tabs.scrollWidth,
);
};
$(document.body).on(
'click',
'#evf-row-field-popover .evf-tabs-arrow',
function (e) {
e.stopPropagation();
var tabs = document.querySelector(
'#evf-row-field-popover .evf-popover-tabs',
);
if (!tabs) return;
var step = 120;
tabs.scrollLeft += $(this).hasClass('evf-tabs-arrow-left')
? -step
: step;
setTimeout(updateTabArrows, 200);
},
);
$(document.body).on(
'scroll',
'#evf-row-field-popover .evf-popover-tabs',
updateTabArrows,
);
$(document.body).on('click', '.evf-add-field-to-row', function (e) {
e.stopPropagation();
var $btn = $(this),
$row = $btn.closest('.evf-admin-row'),
$popover = $('#evf-row-field-popover');
if ($popover.is(':visible') && $row.hasClass('evf-popover-open')) {
$popover.hide();
$row.removeClass('evf-popover-open');
$('.everest-forms-field.evf-field-popover-open').removeClass(
'evf-field-popover-open',
);
return;
}
EVFPanelBuilder.populateRowPopover();
$('.evf-admin-row.evf-popover-open').removeClass('evf-popover-open');
$('.everest-forms-field.evf-field-popover-open').removeClass(
'evf-field-popover-open',
);
$row.addClass('evf-popover-open');
var pos = positionPopover($btn, $popover);
$popover
.data('target-row', $row)
.data('insert-after-field', null)
.data('anchor', $btn)
.css(pos)
.show();
updateTabArrows();
$('#evf-popover-search').val('').trigger('input').focus();
});
$(document.body).on('click', '.evf-add-field-below', function (e) {
e.stopPropagation();
var $btn = $(this),
$field = $btn.closest('.everest-forms-field'),
$row = $field.closest('.evf-admin-row'),
$popover = $('#evf-row-field-popover');
var $prevField = $popover.data('insert-after-field');
if (
$popover.is(':visible') &&
$row.hasClass('evf-popover-open') &&
$prevField &&
$prevField[0] === $field[0]
) {
$popover.hide();
$row.removeClass('evf-popover-open');
$field.removeClass('evf-field-popover-open');
return;
}
EVFPanelBuilder.populateRowPopover();
$('.evf-admin-row.evf-popover-open').removeClass('evf-popover-open');
$('.everest-forms-field.evf-field-popover-open').removeClass(
'evf-field-popover-open',
);
$row.addClass('evf-popover-open');
$field.addClass('evf-field-popover-open');
var pos = positionPopover($btn, $popover);
$popover
.data('target-row', $row)
.data('insert-after-field', $field)
.data('anchor', $btn)
.css(pos)
.show();
updateTabArrows();
$('#evf-popover-search').val('').trigger('input').focus();
});
$(document.body).on(
'click',
'.evf-admin-grid.evf-empty-grid',
function (e) {
e.stopPropagation();
var $grid = $(this),
$row = $grid.closest('.evf-admin-row'),
$popover = $('#evf-row-field-popover');
var $prevGrid = $popover.data('insert-into-grid');
if (
$popover.is(':visible') &&
$row.hasClass('evf-popover-open') &&
$prevGrid &&
$prevGrid[0] === $grid[0]
) {
$popover.hide().removeData('insert-into-grid');
$row.removeClass('evf-popover-open');
return;
}
EVFPanelBuilder.populateRowPopover();
$('.evf-admin-row.evf-popover-open').removeClass('evf-popover-open');
$('.everest-forms-field.evf-field-popover-open').removeClass(
'evf-field-popover-open',
);
$row.addClass('evf-popover-open');
var pos = positionPopover($grid, $popover);
$popover
.data('target-row', $row)
.data('insert-after-field', null)
.data('insert-into-grid', $grid)
.data('anchor', $grid)
.css(pos)
.show();
updateTabArrows();
$('#evf-popover-search').val('').trigger('input').focus();
},
);
$(document).on('click.evf-row-popover', function (e) {
if (
!$(e.target).closest(
'#evf-row-field-popover, .evf-add-field-to-row, .evf-add-field-below, .evf-admin-grid.evf-empty-grid',
).length
) {
$('#evf-row-field-popover').hide().removeData('insert-into-grid');
$('.evf-admin-row.evf-popover-open').removeClass('evf-popover-open');
$('.everest-forms-field.evf-field-popover-open').removeClass(
'evf-field-popover-open',
);
}
});
$(document.body).on('evf_after_field_append', function (e, fieldId) {
var $field = $('#' + fieldId);
if ($field.length && !$field.find('.evf-add-field-below').length) {
$field.append(
'' +
'' +
'
',
);
}
});
$(document.body).on('input', '#evf-popover-search', function () {
var term = $(this).val().toLowerCase().trim();
$('#evf-row-field-popover .evf-popover-field-item').each(function () {
$(this).toggle(
!term ||
$(this).data('field-label').toLowerCase().indexOf(term) >= 0,
);
});
$('.evf-popover-tab').removeClass('active');
$('.evf-popover-tab[data-group="all"]').addClass('active');
$('.evf-popover-no-results').remove();
if (
!$('#evf-row-field-popover .evf-popover-field-item:visible').length
) {
$('#evf-row-field-popover .evf-popover-fields').append(
'No fields found.
',
);
}
});
$(document.body).on(
'click',
'#evf-row-field-popover .evf-popover-tab',
function () {
var group = $(this).data('group');
$('.evf-popover-tab').removeClass('active');
$(this).addClass('active');
$('#evf-popover-search').val('');
$('#evf-row-field-popover .evf-popover-field-item').each(function () {
$(this).toggle(
'all' === group || $(this).data('field-group') === group,
);
});
$('.evf-popover-no-results').remove();
var $pop = $('#evf-row-field-popover'),
$storedAnchor = $pop.data('anchor');
if ($storedAnchor && $storedAnchor.length) {
$pop.css(
positionPopover(
$storedAnchor,
$pop,
$pop.hasClass('evf-popover-flipped'),
),
);
}
this.scrollIntoView({
behavior: 'smooth',
block: 'nearest',
inline: 'nearest',
});
setTimeout(updateTabArrows, 200);
},
);
$(document.body).on(
'click',
'#evf-row-field-popover .evf-popover-field-item:not(.evf-field-blocked)',
function () {
var $item = $(this),
fieldType = $item.data('field-type'),
fieldLabel = $item.data('field-label'),
$popover = $('#evf-row-field-popover'),
$insertAfterField = $popover.data('insert-after-field'),
$insertIntoGrid = $popover.data('insert-into-grid'),
$placeholder = $('')
.attr('data-field-type', fieldType)
.attr('data-field-label', fieldLabel);
if ($insertAfterField && $insertAfterField.length) {
$insertAfterField.after($placeholder);
} else if ($insertIntoGrid && $insertIntoGrid.length) {
$insertIntoGrid.append($placeholder);
} else {
$popover
.data('target-row')
.find('.evf-admin-grid')
.last()
.append($placeholder);
}
EVFPanelBuilder.fieldDrop($placeholder);
$popover.hide().removeData('insert-into-grid');
$('.evf-admin-row.evf-popover-open').removeClass('evf-popover-open');
$('.everest-forms-field.evf-field-popover-open').removeClass(
'evf-field-popover-open',
);
},
);
// Handle layout container items clicked inside the popover.
$(document.body).on(
'click',
'#evf-row-field-popover .evf-layout-container-item',
function () {
var columns = parseInt($(this).data('columns'), 10),
$popover = $('#evf-row-field-popover'),
$targetRow = $popover.data('target-row');
$popover.hide().removeData('insert-into-grid');
$('.evf-admin-row.evf-popover-open').removeClass('evf-popover-open');
$('.everest-forms-field.evf-field-popover-open').removeClass(
'evf-field-popover-open',
);
EVFPanelBuilder.addLayoutContainer(
columns,
$targetRow,
null,
$targetRow,
);
},
);
},
/**
* Toggle fields tabs (Add Fields, Field Options).
*/
fieldTabChoice: function (id) {
$('.everest-forms-tab-content').scrollTop(0);
$('.everest-forms-fields-tab a').removeClass('active');
$('.everest-forms-field, .everest-forms-title-desc').removeClass(
'active',
);
$('#' + id).addClass('active');
if ('add-fields' === id) {
$('.everest-forms-add-fields').show();
$('.everest-forms-field-options').hide();
} else {
if ('field-options' === id) {
id = $('.everest-forms-field').first().data('field-id');
$('.everest-forms-field-options').show();
$('.everest-forms-field').first().addClass('active');
} else {
$('#everest-forms-field-' + id).addClass('active');
}
$('.everest-forms-field-option').hide();
$('#everest-forms-field-option-' + id).show();
$('.everest-forms-add-fields').hide();
}
},
bindFormPreview: function () {},
bindFormPreviewWithKeyEvent: function () {
$('body').on('keydown', function (e) {
if (e.ctrlKey || e.metaKey) {
if (
'p' === String.fromCharCode(e.which).toLowerCase() ||
80 === e.which
) {
e.preventDefault();
window.open(evf_data.preview_url);
}
}
});
},
bindFormEntriesWithKeyEvent: function () {
$('body').on('keydown', function (e) {
if (e.ctrlKey || e.metaKey) {
if (
'e' === String.fromCharCode(e.which).toLowerCase() ||
69 === e.which
) {
e.preventDefault();
window.open(evf_data.entries_url);
}
}
});
},
bindGridSwitcher: function () {
$('body').on('click', '.evf-show-grid', function (e) {
e.stopPropagation();
EVFPanelBuilder.checkEmptyGrid();
$(this)
.closest('.evf-toggle-row')
.find('.evf-toggle-row-content')
.stop(true)
.slideToggle(200);
});
$(document).on('click', function () {
EVFPanelBuilder.checkEmptyGrid();
$('.evf-show-grid')
.closest('.evf-toggle-row')
.find('.evf-toggle-row-content')
.stop(true)
.slideUp(200);
});
var max_number_of_grid = 4;
$('body').on('click', '.evf-grid-selector', function () {
var $this_single_row = $(this).closest('.evf-admin-row');
if ($(this).hasClass('active')) {
return;
}
var grid_id = parseInt($(this).attr('data-evf-grid'), 10);
if (grid_id > max_number_of_grid) {
return;
}
var grid_node = $(
'',
);
var grids = $('');
$.each($this_single_row.find('.evf-admin-grid'), function () {
$(this)
.children('*')
.each(function () {
grids.append($(this).clone());
});
});
var $gridLists = $('');
for (var $grid_number = 1; $grid_number <= grid_id; $grid_number++) {
grid_node.attr('data-grid-id', $grid_number);
$gridLists.append(grid_node.clone());
}
$gridLists.append('');
$this_single_row.find('.evf-grid-lists').remove();
$this_single_row.find('.evf-admin-grid').remove();
$this_single_row.find('.evf-clear').remove();
$this_single_row.append('');
$this_single_row.append($gridLists);
$this_single_row.find('.evf-admin-grid').eq(0).append(grids.html());
$this_single_row.find('.evf-grid-selector').removeClass('active');
$(this).addClass('active');
EVFPanelBuilder.bindFields();
});
},
fieldDrop: function (field) {
var field_type = field.attr('data-field-type');
// One-time-draggable fields (e.g. File Upload in the free version) are limited to a
// single instance per form. Reject any extra drop of the same field type, including
// rapid re-drops fired before the first field finishes loading (AJAX still in flight).
var oneTimeDraggableFields = evf_data.form_one_time_draggable_fields || [];
var isOneTimeDraggableField =
$.inArray(field_type, oneTimeDraggableFields) >= 0;
if (isOneTimeDraggableField) {
if (
$('#everest-forms-add-fields-' + field_type).hasClass(
'evf-one-time-draggable-field',
)
) {
field.remove();
EVFPanelBuilder.checkEmptyGrid();
return false;
}
// Lock the sidebar field immediately so concurrent drops during the
// loading state are blocked by the check above. The draggable itself is
// torn down later in the AJAX success handler (oneTimeDraggableField),
// once the drop event has fully settled.
$('#everest-forms-add-fields-' + field_type).addClass(
'evf-one-time-draggable-field',
);
}
var invalid_fields = ['payment-total'];
if (
invalid_fields.includes(field_type) &&
field.closest('.evf-admin-row').hasClass('evf-repeater-fields')
) {
$.confirm({
title: false,
content: 'This field cannot be added to Repeater Fields',
type: 'red',
closeIcon: false,
backgroundDismiss: false,
icon: 'dashicons dashicons-warning',
buttons: {
cancel: {
text: evf_data.i18n_close,
btnClass: 'btn-default',
},
},
});
field.remove();
return false;
}
if (!$.contains(document.body, field[0])) {
$('.evf-admin-grid').last().append(field);
}
var fieldLoadingLabel = field.attr('data-field-label');
field
.css({
left: '0',
width: '100%',
})
.append(
'' +
'' +
(fieldLoadingLabel
? '' +
fieldLoadingLabel +
''
: '') +
'',
);
$.ajax({
url: evf_data.ajax_url,
type: 'POST',
data: {
action: 'everest_forms_new_field_' + field_type,
security: evf_data.evf_field_drop_nonce,
field_type: field_type,
form_id: evf_data.form_id,
},
beforeSend: function () {
$(document.body).trigger('init_field_options_toggle');
},
error: function () {
// Adding the field failed; remove the loading placeholder and unlock the
// sidebar field so a one-time-draggable field can be dragged again.
field.remove();
if (isOneTimeDraggableField) {
EVFPanelBuilder.oneTimeDraggableRemoveField(field_type);
}
EVFPanelBuilder.checkEmptyGrid();
},
success: function (response) {
var field_preview = response.data.preview,
field_options = response.data.options,
form_field_id = response.data.form_field_id,
field_type = response.data.field.type,
dragged_el_id = $(field_preview).attr('id'),
dragged_field_id = $(field_preview).attr('data-field-id');
$('#everest-forms-field-id').val(form_field_id);
$('.everest-forms-field-options').find('.no-fields').hide();
$('.everest-forms-field-options').append(field_options);
$(
'.everest-forms-field-option-row-icon_color input.colorpicker',
).wpColorPicker({
change: function (event) {
var $this = $(this),
value = $this.val(),
field_id = $this
.closest('.everest-forms-field-option-row')
.data('field-id');
$('#everest-forms-field-' + field_id + ' .rating-icon svg').css(
'fill',
value,
);
},
});
if ( field_type === 'repeater-fields' ) {
field.remove();
$(document.body).trigger('init_tooltips');
$(document.body).trigger('init_field_options_toggle');
$(document.body).trigger('evf_after_field_append', [dragged_el_id]);
EVFPanelBuilder.conditionalLogicAppendField(dragged_el_id);
EVFPanelBuilder.conditionalLogicAppendFieldIntegration(dragged_el_id);
EVFPanelBuilder.paymentFieldAppendToQuantity(dragged_el_id);
EVFPanelBuilder.paymentFieldAppendToDropdown(dragged_field_id, field_type);
EVFPanelBuilder.oneTimeDraggableField(dragged_field_id, field_type);
EVFPanelBuilder.init_datepickers();
EVFPanelBuilder.init_payment_subscription_plan_field();
$(
'#everest-forms-field-option-' +
dragged_field_id +
'-enable_min_max_time',
).hide();
$(
'label[for=everest-forms-field-option-' +
dragged_field_id +
'-enable_min_max_time]',
).hide();
$(
'label[for=everest-forms-field-option-' +
dragged_field_id +
'-select_min_time]',
).hide();
$(
'label[for=everest-forms-field-option-' +
dragged_field_id +
'-select_max_time]',
).hide();
$(
'#everest-forms-field-option-' +
dragged_field_id +
'-min_time_hour',
)
.parent()
.hide();
$(
'#everest-forms-field-option-' +
dragged_field_id +
'-max_time_hour',
)
.parent()
.hide();
$(document.body).trigger('evf_field_drop_complete', [
field_type,
dragged_field_id,
field_preview,
field_options,
]);
EVFPanelBuilder.checkEmptyGrid();
return;
}
if ($.contains(document.body, field[0])) {
field.after(field_preview);
} else {
$('.evf-admin-grid').last().append(field_preview);
}
if (
null !== $('#everest-forms-panel-field-settings-enable_survey') &&
$('#everest-forms-panel-field-settings-enable_survey').prop(
'checked',
)
) {
$(
'#everest-forms-field-option-' +
dragged_field_id +
'-survey_status',
).prop('checked', true);
}
if (
null !== $('#everest-forms-panel-field-settings-enable_quiz') &&
$('#everest-forms-panel-field-settings-enable_quiz').prop('checked')
) {
$(
'#everest-forms-field-option-' +
dragged_field_id +
'-quiz_status',
).prop('checked', true);
$(
'#everest-forms-field-option-' +
dragged_field_id +
'-quiz_status',
)
.closest('.everest-forms-field-option-row-quiz_status')
.siblings('.everst-forms-field-quiz-settings')
.removeClass('everest-forms-hidden')
.addClass('everest-forms-show');
}
field.remove();
// Triggers.
$(document.body).trigger('init_tooltips');
$(document.body).trigger('init_field_options_toggle');
$(document.body).trigger('evf_after_field_append', [dragged_el_id]);
// Conditional logic append rules.
EVFPanelBuilder.conditionalLogicAppendField(dragged_el_id);
EVFPanelBuilder.conditionalLogicAppendFieldIntegration(dragged_el_id);
EVFPanelBuilder.paymentFieldAppendToQuantity(dragged_el_id);
EVFPanelBuilder.paymentFieldAppendToDropdown(
dragged_field_id,
field_type,
);
//One Time draggable.
EVFPanelBuilder.oneTimeDraggableField(dragged_field_id, field_type);
// Initialization Datepickers.
EVFPanelBuilder.init_datepickers();
EVFPanelBuilder.init_payment_subscription_plan_field();
// Hiding time min max options in setting for Datepickers.
$(
'#everest-forms-field-option-' +
dragged_field_id +
'-enable_min_max_time',
).hide();
$(
'label[for=everest-forms-field-option-' +
dragged_field_id +
'-enable_min_max_time]',
).hide();
$(
'label[for=everest-forms-field-option-' +
dragged_field_id +
'-select_min_time]',
).hide();
$(
'label[for=everest-forms-field-option-' +
dragged_field_id +
'-select_max_time]',
).hide();
$(
'#everest-forms-field-option-' +
dragged_field_id +
'-min_time_hour',
)
.parent()
.hide();
$(
'#everest-forms-field-option-' +
dragged_field_id +
'-max_time_hour',
)
.parent()
.hide();
// Trigger an event indicating completion of field_drop action.
$(document.body).trigger('evf_field_drop_complete', [
field_type,
dragged_field_id,
field_preview,
field_options,
]);
EVFPanelBuilder.checkEmptyGrid();
},
});
},
conditionalLogicAppendField: function (id) {
var dragged_el = $('#' + id);
var dragged_index = dragged_el.index();
var fields = $('.evf-field-conditional-field-select');
var field_type = dragged_el.attr('data-field-type');
var field_id = dragged_el.attr('data-field-id');
var field_label = dragged_el.find('.label-title .text ').text();
$.fn.insertAt = function (elements, index, selected_id) {
var array = $.makeArray(this.children().clone(true));
array.splice(index, 0, elements);
$.each(array, function (index, el) {
if (selected_id === $(el)[0]['value']) {
$(el)[0]['selected'] = true;
array[index] = el;
}
});
this.empty().append(array);
};
var dragged_field_id = field_id;
fields.each(function (index, el) {
var selected_id = $(el).val();
var id_key = id.replace('everest-forms-field-', '');
var name = $(el).attr('name');
var name_key = name.substring(name.indexOf('[') + 1, name.indexOf(']'));
if (id_key === name_key) {
$('.evf-admin-row .evf-admin-grid .everest-forms-field').each(
function () {
var form_field_type = $(this).data('field-type'),
form_field_id = $(this).data('field-id'),
form_field_label = $(this)
.find('.label-title span')
.first()
.text();
field_to_be_restricted = [];
field_to_be_restricted = [
'html',
'title',
'address',
'image-upload',
'file-upload',
'date-time',
'hidden',
'scale-rating',
'likert',
'yes-no',
];
if (
$.inArray(form_field_type, field_to_be_restricted) === -1 &&
dragged_field_id !== form_field_id
) {
if (
0 ===
fields
.eq(index)
.find('option[data-field_id="' + form_field_id + '"]')
.length
) {
fields
.eq(index)
.append(
'',
);
}
}
},
);
} else {
var el_to_append =
'';
if (
'html' !== field_type &&
'title' !== field_type &&
'address' !== field_type &&
'image-upload' !== field_type &&
'file-upload' !== field_type &&
'hidden' !== field_type &&
'likert' !== field_type &&
'scale-rating' !== field_type &&
'yes-no' !== field_type &&
'divider' !== field_type
) {
fields.eq(index).insertAt(el_to_append, 1, selected_id);
}
}
if (
fields.eq(index).find('option:not(.evf-conditional-fields)').length >
1
) {
fields
.eq(index)
.find('option:not(.evf-conditional-fields):gt(0)')
.remove();
}
});
},
conditionalLogicAppendRow: function (id) {
var new_row_option = $('#everest-forms-row-option-row_' + id);
var fields = $('.everest-forms-field');
fields.each(function () {
var field = $(this),
field_id = field.attr('data-field-id'),
field_type = field.attr('data-field-type'),
field_label = '';
field.find('.required').remove();
field_label = field.find('.label-title').html();
var el_to_append =
'';
if (
0 ===
$(document).find(
'.evf-admin-row[data-row-id="' +
id +
'"] #everest-forms-field-' +
field_id,
).length &&
0 ===
new_row_option.find(
'.evf-field-conditional-field-select option[data-field_id="' +
field_id +
'"]',
).length &&
'html' !== field_type &&
'title' !== field_type &&
'address' !== field_type &&
'image-upload' !== field_type &&
'file-upload' !== field_type &&
'date-time' !== field_type &&
'hidden' !== field_type &&
'likert' !== field_type &&
'scale-rating' !== field_type &&
'divider' !== field_type
) {
new_row_option
.find('.evf-field-conditional-field-select')
.append(el_to_append);
}
if (
new_row_option.find(
'.evf-field-conditional-field-select option:not(.evf-conditional-fields)',
).length > 1
) {
new_row_option
.find(
'.evf-field-conditional-field-select option:not(.evf-conditional-fields):gt(0)',
)
.remove();
}
new_row_option.hide();
});
},
paymentFieldAppendToQuantity: function (id) {
var dragged_el = $('#' + id);
var fields = $('.everest-forms-field-option-row-map_field select');
var field_type = dragged_el.attr('data-field-type');
var field_id = dragged_el.attr('data-field-id');
var field_label = dragged_el.find('.label-title .text ').text();
var el_to_append =
'';
if (
'payment-single' === field_type ||
'payment-multiple' === field_type ||
'payment-checkbox' === field_type
) {
fields.append(el_to_append);
}
},
paymentFieldAppendToDropdown: function (dragged_field_id, field_type) {
if (
'payment-quantity' === field_type ||
'payment-coupon' === field_type ||
'payment-subtotal' === field_type
) {
var match_fields = [
'payment-checkbox',
'payment-multiple',
'payment-single',
'range-slider',
],
qty_dropdown = $(
'#everest-forms-field-option-' + dragged_field_id + '-map_field',
);
match_fields.forEach(function (single_field) {
$('.everest-forms-field-' + single_field).each(function () {
if ('range-slider' === $(this).attr('data-field-type')) {
if (
'true' ===
$(this)
.find('.evf-range-slider-preview')
.attr('data-enable-payment-slider')
) {
var id = $(this).attr('data-field-id'),
label = $(this).find('.label-title .text').text();
var el_to_append =
'';
} else {
return;
}
}
var id = $(this).attr('data-field-id'),
label = $(this).find('.label-title .text').text();
var el_to_append =
'';
qty_dropdown.append(el_to_append);
});
});
}
},
oneTimeDraggableField: function (dragged_field_id, field_type) {
var singleDraggableFields = evf_data.form_one_time_draggable_fields;
var draggedFieldElement = $('#everest-forms-add-fields-' + field_type);
if (
singleDraggableFields.length > 0 &&
$.inArray(field_type, singleDraggableFields) >= 0 &&
draggedFieldElement.length
) {
draggedFieldElement.addClass('evf-one-time-draggable-field');
// Destroy the jQuery UI draggable so the locked sidebar field can no longer
// be dragged onto the canvas (mirrors oneTimeDraggableRemoveField).
EVFPanelBuilder.refreshRegisteredSidebarFieldDraggable(
draggedFieldElement,
);
}
},
conditionalLogicAppendFieldIntegration: function (id) {
var dragged_el = $('#' + id);
var dragged_index = dragged_el.index();
var fields = $('.evf-provider-conditional').find(
'.evf-conditional-field-select',
);
var field_type = dragged_el.attr('data-field-type');
var field_id = dragged_el.attr('data-field-id');
var field_label = dragged_el.find('.label-title .text ').text();
$.fn.insertAt = function (elements, index) {
var array = $.makeArray(this.children().clone(true));
array.splice(index, 0, elements);
this.empty().append(array);
};
fields.each(function (index, el) {
var id_key = id.replace('everest-forms-field-', '');
var name = $(el).attr('name');
var name_key = name.substring(name.indexOf('[') + 1, name.indexOf(']'));
if (id_key === name_key) {
$('.evf-admin-row .evf-admin-grid .everest-forms-field').each(
function () {
var field_type = $(this).data('field-type'),
field_id = $(this).data('field-id'),
field_label = $(this).find('.label-title span').first().text();
field_to_be_restricted = [];
field_to_be_restricted = [
'html',
'title',
'address',
'image-upload',
'file-upload',
'signature',
'divider',
'date-time',
'hidden',
'scale-rating',
'likert',
'yes-no',
dragged_el.attr('data-field-type'),
];
if ($.inArray(field_type, field_to_be_restricted) === -1) {
fields
.eq(index)
.append(
'',
);
}
},
);
} else {
var el_to_append =
'';
if (
'html' !== field_type &&
'title' !== field_type &&
'address' !== field_type &&
'image-upload' !== field_type &&
'file-upload' !== field_type &&
'date-time' !== field_type &&
'hidden' !== field_type &&
'likert' !== field_type &&
'scale-rating' !== field_type &&
'yes-no' !== field_type
) {
fields.eq(index).insertAt(el_to_append, dragged_index);
}
}
});
},
conditionalLogicRemoveField: function (id) {
$(
'.evf-field-conditional-field-select option[value = ' + id + ' ]',
).remove();
},
conditionalLogicRemoveFieldIntegration: function (id) {
$(
'.evf-provider-conditional .evf-conditional-field-select option[value = ' +
id +
' ]',
).remove();
},
paymentFieldRemoveFromQuantity: function (id) {
$(
'.everest-forms-field-option-row-map_field select option[value = ' +
id +
' ]',
).remove();
},
/**
* Keep Payments / gateway panel field-map selects in sync when fields are added or removed
* (e.g. phone appears for Stripe "customer_phone" mapping without reloading).
*
* @param {string} action 'add' or 'remove'.
* @param {string} fieldRef For add: preview element id (e.g. everest-forms-field-12). For remove: data-field-id.
*/
refreshFieldMapSelectsFromField: function (action, fieldRef) {
var $form = $('form#everest-forms-builder-form');
if (!$form.length) {
return;
}
if ('remove' === action) {
var rid = String(fieldRef);
$form
.find('select.everest-forms-field-map-select')
.each(function () {
$(this).find('option[value="' + rid + '"]').remove();
});
return;
}
var raw = String(fieldRef || '').replace(/^#/, '');
var $field = $('#' + raw);
if (!$field.length && /^\d+$/.test(raw)) {
$field = $('#everest-forms-field-' + raw);
}
if (!$field.length) {
return;
}
var field_type = $field.attr('data-field-type');
var element_id = $field.attr('data-field-id');
if (!field_type || !element_id) {
return;
}
var label = $field.find('.label-title .text').first().text();
if (!label) {
label = '#' + element_id;
}
$form.find('select.everest-forms-field-map-select').each(function () {
var $select = $(this);
var allowedAttr = $select.attr('data-field-map-allowed');
if (!allowedAttr) {
return;
}
var field_allowed = allowedAttr.split(/\s+/);
if (
field_allowed.indexOf(field_type) === -1 &&
field_allowed.indexOf('all-fields') === -1
) {
return;
}
if ($select.find('option[value="' + element_id + '"]').length) {
return;
}
$select.append(
$('').attr('value', element_id).text(label),
);
});
},
/**
* Rebuild every field-map select inside a container from fields currently on the builder canvas.
*
* @param {string|jQuery} container Field option root, e.g. #everest-forms-field-option-{id}.
* @param {string} excludeFieldId Optional data-field-id to omit (e.g. the gateway selector itself).
*/
refreshFieldMapSelectsInContainer: function (container, excludeFieldId) {
var $container =
container instanceof jQuery ? container : $(container);
if (!$container.length) {
return;
}
var exclude = excludeFieldId ? String(excludeFieldId) : '';
var $canvasFields = $('#everest-forms-builder').find(
'.evf-admin-field-wrapper .everest-forms-field',
);
$container
.find('select.everest-forms-field-map-select')
.each(function () {
var $select = $(this);
var allowedAttr = $select.attr('data-field-map-allowed');
if (!allowedAttr) {
return;
}
var fieldAllowed = allowedAttr.split(/\s+/).filter(Boolean);
var currentVal = $select.val();
var placeholder = $select.attr('data-field-map-placeholder');
if ($select.hasClass('select2-hidden-accessible')) {
try {
$select.selectWoo('destroy');
} catch (err) {
// Ignore if selectWoo was not initialized.
}
$select.removeClass('enhanced');
}
$select.empty();
if (placeholder) {
$select.append(
$('').attr('value', '').text(placeholder),
);
} else {
$select.append($('').attr('value', ''));
}
$canvasFields.each(function () {
var $f = $(this);
var ft = $f.attr('data-field-type');
var fid = String($f.attr('data-field-id') || '');
if (!ft || !fid) {
return;
}
if (exclude && fid === exclude) {
return;
}
if (
fieldAllowed.indexOf(ft) === -1 &&
fieldAllowed.indexOf('all-fields') === -1
) {
return;
}
var lbl = $f.find('.label-title .text').first().text();
if (!lbl) {
lbl = '#' + fid;
}
$select.append(
$('').attr('value', fid).text(lbl),
);
});
if (currentVal) {
var match = false;
$select.find('option').each(function () {
if ($(this).val() === String(currentVal)) {
match = true;
return false;
}
});
if (match) {
$select.val(currentVal);
}
}
});
$(document.body).trigger('evf-enhanced-select-init');
},
oneTimeDraggableRemoveField: function (field_type) {
var dragged_field_id = $('#everest-forms-add-fields-' + field_type);
if (dragged_field_id.hasClass('evf-one-time-draggable-field')) {
dragged_field_id.removeClass('upgrade-modal');
dragged_field_id.removeClass('evf-one-time-draggable-field');
EVFPanelBuilder.refreshRegisteredSidebarFieldDraggable(
dragged_field_id,
);
}
},
/**
* Whether a sidebar field button should not be draggable (blocked state).
*
* @param {jQuery} $item Sidebar registered field button.
* @return {boolean}
*/
isRegisteredSidebarFieldBlocked: function ($item) {
if (!$item || !$item.length) {
return true;
}
return $item.is(
'.upgrade-modal, .evf-upgrade-addon, .enable-stripe-model, .enable-authorize-net-model, .enable-payment-subscription-plan, .everest-forms-pro-is_square_install, .enable-square-model, .evf-one-time-draggable-field, .recaptcha_empty_key_validate, .hcaptcha_empty_key_validate, .turnstile_empty_key_validate',
);
},
/**
* Apply or remove jQuery UI draggable on sidebar field buttons after dynamic class changes.
*
* @param {jQuery} [$items] Optional buttons to refresh; defaults to all registered sidebar fields.
*/
refreshRegisteredSidebarFieldDraggable: function ($items) {
if (!$items || !$items.length) {
$items = $(
'.evf-registered-buttons button.evf-registered-item:not(.evf-layout-container-btn)',
);
}
$items.each(function () {
var $btn = $(this);
if (EVFPanelBuilder.isRegisteredSidebarFieldBlocked($btn)) {
if ($btn.data('ui-draggable')) {
$btn.draggable('destroy');
}
return;
}
if ($btn.data('ui-draggable')) {
return;
}
$btn
.draggable({
delay: 200,
cancel: false,
scroll: false,
revert: 'invalid',
scrollSensitivity: 40,
forcePlaceholderSize: true,
start: function () {
$(this).addClass('field-dragged');
},
helper: function () {
return $(this)
.clone()
.insertAfter(
$(this)
.closest('.everest-forms-tab-content')
.siblings('.everest-forms-fields-tab'),
);
},
stop: function () {
$(this).removeClass('field-dragged');
},
opacity: 0.75,
containment: '#everest-forms-builder',
connectToSortable: '.evf-admin-grid',
})
.disableSelection();
});
},
syncPaymentMethodDependentFields: function () {
var $builder = $('#everest-forms-builder');
var hasPaymentMethodField =
$builder.find('.everest-forms-field-payment-gateway-selector').length > 0;
// Credit Card (Stripe) on the canvas blocks adding Payment Gateway; Payments tab
// toggles can also block it. Legacy Credit Card / Authorize.Net / Square fields are
// not mutually disabled with Payment Gateway for drag purposes beyond this.
var $paymentGatewayAdd = $(
'#everest-forms-add-fields-payment-gateway-selector',
);
if ($paymentGatewayAdd.length) {
var hasEnabledPayments =
EVFPanelBuilder.isAnyPaymentEnabled &&
EVFPanelBuilder.isAnyPaymentEnabled();
// If any payment is enabled in Payments tab, force-disable Payment Gateway field.
if (hasEnabledPayments) {
$paymentGatewayAdd.addClass('evf-one-time-draggable-field');
$paymentGatewayAdd.addClass('evf-payment-method-dependent-disabled');
$paymentGatewayAdd.attr('data-evf-disabled-reason', 'enabled-payments');
} else {
var hasCreditCardField =
$builder.find('.everest-forms-field-credit-card').length > 0;
if (hasCreditCardField) {
$paymentGatewayAdd.addClass('evf-one-time-draggable-field');
$paymentGatewayAdd.addClass('evf-payment-method-dependent-disabled');
$paymentGatewayAdd.attr(
'data-evf-disabled-reason',
'credit-card-field',
);
} else {
$paymentGatewayAdd.removeAttr('data-evf-disabled-reason');
$paymentGatewayAdd.removeClass(
'evf-payment-method-dependent-disabled',
);
if (!hasPaymentMethodField) {
$paymentGatewayAdd.removeClass('evf-one-time-draggable-field');
}
}
}
EVFPanelBuilder.refreshRegisteredSidebarFieldDraggable(
$paymentGatewayAdd,
);
}
// If Payment Gateway field is used, block enabling payment gateways from Payments tab.
if (EVFPanelBuilder.syncPaymentsTabEnableToggles) {
EVFPanelBuilder.syncPaymentsTabEnableToggles(hasPaymentMethodField);
}
// Payment Gateway selector replaces the legacy Credit Card field on the sidebar.
var $creditCardAdd = $('#everest-forms-add-fields-credit-card');
if ($creditCardAdd.length) {
if (hasPaymentMethodField) {
$creditCardAdd.addClass('enable-stripe-model');
} else if (
typeof EverestFormsProBuilder !== 'undefined' &&
EverestFormsProBuilder.checkEnabledPayments
) {
EverestFormsProBuilder.checkEnabledPayments();
}
EVFPanelBuilder.refreshRegisteredSidebarFieldDraggable($creditCardAdd);
}
},
/**
* Whether any payment gateway is enabled in the Payments tab.
*
* This is used to restrict the Payment Gateway (selector) field: if a gateway is already enabled,
* the selector field must stay off until those toggles are disabled.
*
* @return {boolean}
*/
isAnyPaymentEnabled: function () {
var selectors = [
'#everest-forms-panel-field-paymentsstripe-enable_stripe',
'#everest-forms-panel-field-paypal-enable_paypal',
// Razorpay toggle id varies by version/addon; support both.
'#everest-forms-panel-field-paymentsrazorpay-enable_razorpay',
'#everest-forms-panel-field-razorpay-enable_razorpay',
'input[name*="[razorpay]"][name*="enable_razorpay"]',
'#everest-forms-panel-field-authorize_net-enable_authorize_net',
'#everest-forms-panel-field-square-enable_square',
'#everest-forms-panel-field-paymentsmollie-enable_mollie',
];
for (var i = 0; i < selectors.length; i++) {
var $el = $(selectors[i]);
if ($el.length && $el.is(':checked')) {
return true;
}
}
return false;
},
bindFieldSettings: function () {
$('body').on(
'click',
'.everest-forms-preview .everest-forms-field, .everest-forms-preview .everest-forms-field .everest-forms-field-setting',
function (e) {
e.preventDefault();
var field_id = $(this)
.closest('.everest-forms-field')
.attr('data-field-id');
$('.everest-forms-tab-content').scrollTop(0);
EVFPanelBuilder.switchToFieldOptionPanel(field_id);
},
);
},
toggleLabelEdit: function (label, input) {
$(label).toggleClass('everest-forms-hidden');
$(input).toggleClass('everest-forms-hidden');
if ($(input).is(':visible')) {
$(input).focus();
}
},
bindToggleHandleActions: function () {
$('body').on('click', '.toggle-handle', function (e) {
var label = $(this).data('label'),
input = $(this).data('input');
if (!$(input).is(':visible')) {
EVFPanelBuilder.toggleLabelEdit(label, input);
}
});
},
bindLabelEditInputActions: function () {
$('body').on('focusout', '.label-edit-input', function (e) {
var label = $(this).data('label'),
input = this;
EVFPanelBuilder.toggleLabelEdit(label, input);
});
},
/**
* Sync an input element with other elements like labels. An element with `sync-input` class will be synced to the elements
* specified in `sync-targets` data.
*
* `Warning:` This is an one way sync, meaning only the text `sync-targets` will be updated when the source element's value changes
* and the source element's value will not be updated if the value of `sync-targets` changes.
*/
bindSyncedInputActions: function () {
$('body').on('input', '.sync-input', function (e) {
var changed_value = $(this).val(),
sync_targets = $(this).data('sync-targets');
if (changed_value && sync_targets) {
$(sync_targets).text(changed_value);
}
});
},
/**
* Akismet anti-spam protection.
*
* @since 2.4.0
*/
bindAkismetInit: function () {
var akismetEnabler = $(document).find(
'#everest-forms-panel-field-settings-akismet',
);
EVFPanelBuilder.akismetTogger(akismetEnabler);
$(document).on(
'change',
'#everest-forms-panel-field-settings-akismet',
function () {
EVFPanelBuilder.akismetTogger($(this));
},
);
},
/**
* Akismet Toggler.
*
* @param {object} akismetEnabler
*/
akismetTogger: function (akismetEnabler) {
if ($(akismetEnabler).is(':checked')) {
$(document).find('.everest-forms-akismet-protection-type').show();
} else {
$(document).find('.everest-forms-akismet-protection-type').hide();
}
},
/**
* Form Submission minimum waiting time.
*
* @since 3.0.2
*/
bindFormSubmissionMinWaitingTime: function () {
var submissionWaitingTimeEnabler = $(document).find(
'#everest-forms-panel-field-settings-form_submission_min_waiting_time',
);
EVFPanelBuilder.formSubmissionMinTimeToggler(
submissionWaitingTimeEnabler,
);
$(document).on(
'change',
'#everest-forms-panel-field-settings-form_submission_min_waiting_time',
function () {
EVFPanelBuilder.formSubmissionMinTimeToggler($(this));
},
);
},
/**
* Form Submission waiting time Toggler.
*
* @param {object} submissionWaitingTimeEnabler
*/
formSubmissionMinTimeToggler: function (submissionWaitingTimeEnabler) {
if ($(submissionWaitingTimeEnabler).is(':checked')) {
$(document)
.find('.everest-forms-form-submission-minimum-waiting-time')
.show();
} else {
$(document)
.find('.everest-forms-form-submission-minimum-waiting-time')
.hide();
}
},
bindEditMetaKey: function (field_id = '') {
$(document).on('click', '.evf-meta-key-copy-btn', function () {
const $wrapper = $(this).closest('.evf-meta-key-input-wrapper');
const $input = $wrapper.find('.evf-input-meta-key');
const metaKey = $input.val();
$(this)
.tooltipster('content', $(this).attr('data-copied'))
.trigger('mouseenter')
.on('mouseleave', function () {
var $this = $(this);
setTimeout(function () {
$this.tooltipster('content', $this.attr('data-tip'));
}, 1000);
});
navigator.clipboard.writeText(metaKey);
});
if ('' === field_id) {
$(document)
.find('.evf-input-meta-key')
.each(function () {
var $this = $(this);
appendEditIcon($this);
});
} else {
var $this = $('#everest-forms-field-option-' + field_id + '-meta-key');
appendEditIcon($this);
}
function appendEditIcon($this) {
$this.wrap('');
$this.before(
`Edit`,
);
const $copyBtn = $(`
`);
$this.after($copyBtn);
// Initialize Tooltipster
$copyBtn.tooltipster({
theme: 'tooltipster-default',
delay: 100,
side: 'top',
updateAnimation: 'null',
});
}
},
bindPrivacyPolicyActions: function () {
// Consent message change handler.
$(document.body).on(
'input',
'.everest-forms-field-option .evf-privacy-policy-consent-message',
function (e) {
var new_message = EVFPanelBuilder.processSyntaxes($(this).val());
// Update with the new processed consent message.
$('.everest-forms-field.active')
.find('.evf-privacy-policy-consent-message')
.html(new_message);
},
);
// Local page add handler.
$(document.body).on(
'click',
'.everest-forms-field-option .evf-add-local-privacy-policy-page',
function (e) {
var new_message = $(
'.everest-forms-field-option:visible .evf-privacy-policy-consent-message',
).val(),
selected_page_id = $(
'.everest-forms-field-option:visible .evf-select-local-privacy-policy-page',
).val(),
selected_page_title = $(
'.everest-forms-field-option:visible .evf-select-local-privacy-policy-page option:selected',
).html();
// Append a hyperlink syntax containing the selected page to the consent message.
if (selected_page_id) {
new_message +=
'[' +
selected_page_title +
'](?page_id=' +
selected_page_id +
')';
// Update with the new consent message.
$(
'.everest-forms-field-option:visible .evf-privacy-policy-consent-message',
).val(new_message);
new_message = EVFPanelBuilder.processSyntaxes(new_message);
$('.everest-forms-field.active')
.find('.evf-privacy-policy-consent-message')
.html(new_message);
}
},
);
// Custom page add handler.
$(document.body).on(
'click',
'.everest-forms-field-option .evf-privacy-policy-add-custom-url',
function (e) {
var new_message = $(
'.everest-forms-field-option:visible .evf-privacy-policy-consent-message',
).val(),
label = $(
'.everest-forms-field-option:visible .evf-privacy-policy-custom-link-label',
)
.val()
.trim(),
url = $(
'.everest-forms-field-option:visible .evf-privacy-policy-custom-link-url',
)
.val()
.trim();
// Prepend `http` protocol in the url.
if (url.search('http') < 0) {
url = 'http://' + url;
}
// Append a hyperlink syntax containing the custom URL to the consent message.
if ('' !== url) {
new_message += '[' + label + '](' + url + ')';
// Update with the new consent message.
$(
'.everest-forms-field-option:visible .evf-privacy-policy-consent-message',
).val(new_message);
new_message = EVFPanelBuilder.processSyntaxes(new_message);
$('.everest-forms-field.active')
.find('.evf-privacy-policy-consent-message')
.html(new_message);
// Empty the input fields.
$(
'.everest-forms-field-option:visible .evf-privacy-policy-custom-link-label',
).val('');
$(
'.everest-forms-field-option:visible .evf-privacy-policy-custom-link-url',
).val('');
}
},
);
},
/**
* Process syntaxes in a text.
*
* @since 1.7.0
*
* @param {string} text Text to be processed.
* @param {bool} escape_html Whether to escape all the htmls before processing or not.
*
* @return {string} Processed text.
*/
processSyntaxes: function (text) {
text = text.replace(/^\s+/g, '');
text = EVFPanelBuilder.processHyperlinkSyntax(text);
text = EVFPanelBuilder.process_italic_syntax(text);
text = EVFPanelBuilder.process_bold_syntax(text);
text = EVFPanelBuilder.process_underline_syntax(text);
text = EVFPanelBuilder.process_new_lines(text);
return text;
},
/**
* Process hyperlink syntaxes in a text.
* The syntax used for hyperlink is: [Link Label](Link URL)
* Example: [Google Search Page](https://google.com)
*
* @since 1.7.0
*
* @param {string} text Text to process.
*
* @return {string} Processed text.
*/
processHyperlinkSyntax: function (text) {
var regex = new RegExp(/(\[[^\[\]]*\])(\([^\(\)]*\))/g);
// Process all the hyperlink syntax.
while ((matches = regex.exec(text))) {
var matched_string = matches[0];
var label = matches[1];
var link = matches[2];
// Trim brackets.
label = label.substring(1, label.length - 1);
link = link.substring(1, link.length - 1);
// Proceed only if label or link is not empty.
if ('' !== label || '' !== link) {
// Use hash(#) if the link is empty.
if ('' === link) {
link = '#';
}
// Use link as label if it's empty.
if ('' === label) {
label = link;
}
// Insert hyperlink html.
var html = '' + label + '';
text = text.replace(matched_string, html);
} else {
// If both label and link are empty then replace it with empty string.
text = text.replace(matched_string, '');
}
}
return text;
},
/**
* Process italic syntaxes in a text.
* The syntax used for italic text is: `text`
* Just wrap the text with back tick characters. To escape a backtick insert a backslash(\) before the character like "\`".
*
* @since 1.7.0
*
* @param {string} text Text to process.
*
* @return {string} Processed text.
*/
process_italic_syntax: function (text) {
var regex = new RegExp(/`[^`]+`/g);
text = text.split('\\`').join('<&&&&&>'); // To preserve an escaped special character '`'.
while ((matches = regex.exec(text))) {
var matched_string = matches[0];
var label = matched_string
.trim()
.substring(1, matched_string.length - 1);
var html = '' + label + '';
text = text.replace(matched_string, html);
}
return text.split('<&&&&&>').join('`');
},
/**
* Process bold syntaxes in a text.
* The syntax used for bold text is: *text*
* Just wrap the text with asterisk characters. To escape an asterisk insert a backslash(\) before the character like "\*".
*
* @since 1.7.0
*
* @param {string} text Text to process.
*
* @return {string} Processed text.
*/
process_bold_syntax: function (text) {
var regex = new RegExp(/\*[^*]+\*/g);
text = text.split('\\*').join('<&&&&&>'); // To preserve an escaped special character '*'.
while ((matches = regex.exec(text))) {
var matched_string = matches[0];
var label = matched_string
.trim()
.substring(1, matched_string.length - 1);
var html = '' + label + '';
text = text.replace(matched_string, html);
}
return text.split('<&&&&&>').join('*');
},
/**
* Process underline syntaxes in a text.
* The syntax used for bold text is: __text__
* Wrap the text with double underscore characters. To escape an underscore insert a backslash(\) before the character like "\_".
*
* @since 1.7.0
*
* @param {string} text Text to process.
*
* @return {string} Processed text.
*/
process_underline_syntax: function (text) {
var regex = new RegExp(/__[^_]+__/g);
text = text.split('\\_').join('<&&&&&>'); // To preserve an escaped special character '_'.
while ((matches = regex.exec(text))) {
var matched_string = matches[0];
var label = matched_string
.trim()
.substring(2, matched_string.length - 2);
var html = '' + label + '';
text = text.replace(matched_string, html);
}
return text.split('<&&&&&>').join('_');
},
/**
* It replaces `\n` characters with `
` tag because new line `\n` character is not supported in html.
*
* @since 1.7.0
*
* @param {string} text
*
* @return {string} Processed text.
*/
process_new_lines: function (text) {
//Ref: https://stackoverflow.com/questions/1144783/how-to-replace-all-occurrences-of-a-string
return text.split('\n').join('
');
},
livePreviewNumberOfRating: function (el) {
var $this = $(el),
value = $this.val();
if (value.length == 0 || value <= 0) {
value = 1;
}
var id = $this.parent().data('field-id'),
icons = $('#everest-forms-field-' + id + ' .rating-icon').first();
if (value <= 100) {
$('#everest-forms-field-' + id + ' .rating-icon').remove();
for (var $i = 1; $i <= value; $i++) {
$('#everest-forms-field-' + id + '').append(icons.clone());
}
}
},
bindFormTags: function () {},
};
/**
* Re-render the builder's fields canvas + options panel in place (no full page
* reload). Used by the in-builder AI chat after it edits the form via the AI
* gateway. Because all field interactions are delegated on $builder (which is
* NOT replaced), only sortables need re-initialising via bindFields().
*
* @param {number} formId Form ID to re-render.
* @param {string} nonce evf_ai_nonce.
* @param {function} done Callback(success:boolean).
*/
window.evfReloadBuilderFields = function (formId, nonce, done) {
$.post(
window.ajaxurl,
{ action: 'evf_ai_render_fields', nonce: nonce, form_id: formId },
function (res) {
var ok = !!(res && res.success && res.data);
if (ok) {
$builder.find('.everest-forms-field-wrap').html(res.data.preview);
$builder.find('.everest-forms-field-options').html(res.data.options);
if (res.data.title) {
$('#evf-edit-form-name').val(res.data.title);
$('#everest-forms-panel-field-settings-form_title').val(res.data.title);
}
try {
EVFPanelBuilder.bindFields();
$(document.body).trigger('evf-enhanced-select-init');
// Select the first field by default so the field options
// tab isn't left empty after the builder refreshes.
var $firstField = $builder
.find('.evf-admin-field-wrapper .everest-forms-field')
.first();
if ($firstField.length) {
EVFPanelBuilder.switchToFieldOptionPanel(
$firstField.attr('data-field-id'),
);
}
} catch (e) {
// Re-init is best-effort; the swapped DOM is still usable.
}
}
if (typeof done === 'function') {
done(ok);
}
}
).fail(function () {
if (typeof done === 'function') {
done(false);
}
});
};
EVFPanelBuilder.init();
})(jQuery, window.evf_data);
jQuery(function ($) {
if (
$(
'#everest-forms-panel-field-settingsemail-evf_send_confirmation_email',
).attr('checked') != 'checked'
) {
$(
'#everest-forms-panel-field-settingsemail-evf_send_confirmation_email-wrap',
)
.nextAll()
.hide();
}
$('#everest-forms-panel-field-settingsemail-evf_send_confirmation_email').on(
'change',
function () {
if ($(this).attr('checked') != 'checked') {
$(
'#everest-forms-panel-field-settingsemail-evf_send_confirmation_email-wrap',
)
.nextAll()
.hide();
} else {
$(
'#everest-forms-panel-field-settingsemail-evf_send_confirmation_email-wrap',
)
.nextAll()
.show();
}
},
);
window.pageType = function (el, redirectTo) {
var outerWrapper = $(el).closest('.evf-confirmation-wrap');
// If the element isn't checked, return early.
if (!el.is(':checked')) {
return;
}
// Show the appropriate settings based on redirect type.
switch (redirectTo) {
case 'same':
$(outerWrapper).find('.same-page-setting').show();
outerWrapper
.find('.external-page-setting, .custom-page-setting')
.hide();
outerWrapper.find('.custom-and-external-page-setting').hide();
// Handle form state type changes.
var el = outerWrapper.find('.form-state-type:checked');
var initialValue = el.val();
toggleMessageLocations(el, initialValue);
previewType(el, outerWrapper);
outerWrapper
.off('change', '.form-state-type')
.on('change', '.form-state-type', function () {
toggleMessageLocations($(this), $(this).val());
});
outerWrapper.on('change', '.everest-preview-confirmation', function () {
var html = '';
if ($(this).is(':checked')) {
var options = [
{ value: 'top', label: 'Above Form Summary' },
{ value: 'bottom', label: 'Below Form Summary' },
{ value: 'popup', label: 'As Popup' },
];
} else {
var options = [
{ value: 'hide', label: 'Shown Message in Place of Form' },
{ value: 'popup', label: 'As Popup' },
];
}
var select = outerWrapper.find('.form-state-hide select');
select.empty();
$.each(options, function (index, option) {
html += ``;
});
select.html(html);
setTimeout(function () {
select.trigger('change');
}, 50);
});
break;
case 'custom_page':
outerWrapper.find('.custom-page-setting').show();
outerWrapper.find('.custom-and-external-page-setting').show();
outerWrapper.find('.same-page-setting, .external-page-setting').hide();
toggleAppendQueryString(outerWrapper);
break;
case 'external_url':
outerWrapper.find('.external-page-setting').show();
outerWrapper.find('.custom-and-external-page-setting').show();
outerWrapper.find('.same-page-setting, .custom-page-setting').hide();
toggleAppendQueryString(outerWrapper);
break;
default:
console.warn('Unknown redirect type:', redirectTo);
break;
}
};
// Initialize on page load
$(function ($) {
// Get initial value and apply
$('.confirmation-redirect-to').each(function () {
var initialValue = $(this).val();
window.pageType($(this), initialValue);
});
// Handle changes
$(document).on('change', '.confirmation-redirect-to', function () {
window.pageType($(this), $(this).val());
});
});
// Function to toggle message locations based on form state
function toggleMessageLocations(el, state) {
var wrapper = $(el).closest('.everest-forms-border-container');
wrapper.find('.form-state-hide, .form-state-reset').hide();
if (state === 'hide') {
wrapper.find('.form-state-hide').show();
wrapper.find('.preview-confirmation-toggle-wrapper').show();
if (wrapper.find('.everest-preview-confirmation').is(':checked')) {
wrapper.find('.preview-confirm-select-wrapper').show();
} else {
wrapper.find('.preview-confirm-select-wrapper').hide();
}
} else if (state === 'reset') {
wrapper.find('.preview-confirmation-toggle-wrapper').hide();
wrapper.find('.preview-confirm-select-wrapper').hide();
wrapper.find('.form-state-reset').show();
}
}
// Handle query string toggle
function toggleAppendQueryString(outerWrapper) {
var queryStringWrap = outerWrapper.find('.query-string-wrap');
var appendInput = outerWrapper.find('.append-query-string-input');
queryStringWrap.toggle(appendInput.is(':checked'));
outerWrapper.on('change', '.append-query-string-input', function () {
queryStringWrap.toggle($(this).is(':checked'));
});
}
function previewType(el, outerWrapper) {
var queryStringWrap = outerWrapper.find('.preview-confirm-select-wrapper');
if (el.val() == 'reset') {
queryStringWrap.toggle(false);
return;
}
var appendInput = outerWrapper.find('.everest-preview-confirmation');
queryStringWrap.toggle(appendInput.is(':checked'));
outerWrapper.on('change', '.everest-preview-confirmation', function () {
queryStringWrap.toggle($(this).is(':checked'));
});
}
$('.evf-panel-field-options-button.evf-disabled-tab').hide();
});
jQuery(function ($) {
// Add Fields - Open/close.
$(document.body)
.on('init_add_fields_toogle', function () {
$('.everest-forms-add-fields').on(
'click',
'.everest-forms-add-fields-group > a',
function (event) {
event.preventDefault();
$(this)
.parent('.everest-forms-add-fields-group')
.toggleClass('closed')
.toggleClass('open');
},
);
$('.everest-forms-add-fields').on(
'click',
'.everest-forms-add-fields-group a',
function () {
$(this).next('.evf-registered-buttons').stop().slideToggle();
},
);
$('.everest-forms-add-fields-group.closed').each(function () {
$(this).find('.evf-registered-buttons').hide();
});
})
.trigger('init_add_fields_toogle');
// Fields Options - Open/close.
$(document.body).on(
'click',
'.everest-forms-field-option .everest-forms-field-option-group > a',
function (event) {
event.preventDefault();
var $fielOption = $(this)
.closest('.everest-forms-field-option-group')
.closest('.everest-forms-field-option');
var currentElement = $(this),
currentElementId = currentElement
.parent('.everest-forms-field-option-group')
.attr('id');
$fielOption.find('.everest-forms-field-option-group').each(function () {
var selectedID = $(this).attr('id');
if (currentElementId !== selectedID) {
$(this).removeClass('open').addClass('closed');
}
});
var $currentGroup = $(this).parent('.everest-forms-field-option-group');
if ($currentGroup.hasClass('closed')) {
$currentGroup.removeClass('closed').addClass('open');
} else {
$currentGroup.removeClass('open').addClass('closed');
}
$('.everest-forms-field-option-group.closed').not($currentGroup).each(function () {
$(this).find('.everest-forms-field-option-group-inner').hide();
});
},
);
$(document.body).on(
'click',
'.everest-forms-field-option .everest-forms-field-option-group a',
function (event) {
// If the user clicks on some form input inside, the box should not be toggled.
if ($(event.target).filter(':input, option, .sort').length) {
return;
}
$(this)
.next('.everest-forms-field-option-group-inner')
.stop()
.slideToggle();
/**
* If the field option group is not basic, then auto scroll to top.
*
* @since 3.3.0
*/
var $el = $(this).closest('.everest-forms-field-option-group');
if (
$el.length &&
!$el.hasClass('everest-forms-field-option-group-basic')
) {
var targetId = 'field-options';
var dynamicLink = $('', {
id: 'evf-temp-link',
href: '#' + targetId,
});
dynamicLink.insertBefore($el);
dynamicLink[0].click();
setTimeout(function () {
dynamicLink.remove();
}, 100);
}
},
);
$(document.body)
.on('init_field_options_toggle', function () {
$('.everest-forms-field-option-group.closed').each(function () {
$(this).find('.everest-forms-field-option-group-inner').hide();
});
})
.trigger('init_field_options_toggle');
$(document).on('click', function () {
$('.evf-smart-tag-lists').hide();
});
$('.evf-smart-tag-lists').hide();
// Toggle Smart Tags.
$(document.body).on('click', '.evf-toggle-smart-tag-display', function (e) {
e.stopPropagation();
$('.evf-smart-tag-lists').hide();
$('.evf-smart-tag-lists ul').empty();
$(this).parent().find('.evf-smart-tag-lists').toggle('show');
var type = $(this).data('type');
var allowed_field = $(this).data('fields');
get_all_available_field(allowed_field, type, $(this));
});
$(document.body).on('click', '.smart-tag-field', function (e) {
var field_id = $(this).data('field_id'),
field_label = $(this).text(),
type = $(this).data('type'),
$parent = $(this).parent().parent().parent(),
$input = $parent.find('input[type=text]'),
$textarea = $parent.find('textarea'),
$calculationCodeMirror = $parent.find('.CodeMirror');
//Return when calculation smart tag is clicked because we use codeMirror
if (0 != $calculationCodeMirror.length) {
return;
}
if (
field_id !== 'fullname' &&
field_id !== 'email' &&
field_id !== 'subject' &&
field_id !== 'message' &&
'other' !== type
) {
field_label = field_label.split(/[\s-_]/);
for (var i = 0; i < field_label.length; i++) {
if (i === 0) {
field_label[i] =
field_label[i].charAt(0).toLowerCase() + field_label[i].substr(1);
} else {
field_label[i] =
field_label[i].charAt(0).toUpperCase() + field_label[i].substr(1);
}
}
field_label = field_label.join('');
field_id = field_label + '_' + field_id;
} else {
field_id = field_id;
}
if ('field' === type) {
$input.val($input.val() + '{field_id="' + field_id + '"}');
$textarea.val($textarea.val() + '{field_id="' + field_id + '"}');
$textarea.trigger('change');
} else if ('other' === type) {
$input.val($input.val() + '{' + field_id + '}');
$textarea.val($textarea.val() + '{' + field_id + '}');
} else if ('regex' === type) {
$input.val($input.val() + field_id.replace(field_label + '_', ''));
$textarea.val($textarea.val() + field_id.replace(field_label + '_', ''));
}
});
// Toggle form status.
$(document).on(
'change',
'.wp-list-table .everest-forms-toggle-form input',
function (e) {
e.stopPropagation();
/**
* Disable row when form is disabled.
*
* @since 3.2.0
*/
if (!$(this).prop('checked')) {
$(this)
.closest('tr')
.find('td')
.not('.has-row-actions, .column-enabled')
.addClass('evf-disable-row');
var str = $(document)
.find('.everest-forms-list-filters-row')
.find('.inactive')
.find('span.count')
.text();
var newStr = str.replace(/\((\d+)\)/, function (match, p1) {
var number = parseInt(p1, 10);
number += 1;
return '(' + number + ')';
});
$(document)
.find('.everest-forms-list-filters-row')
.find('.inactive')
.find('span.count')
.text(newStr);
} else {
$(this)
.closest('tr')
.find('td')
.not('.has-row-actions, .column-enabled')
.removeClass('evf-disable-row');
var str = $(document)
.find('.everest-forms-list-filters-row')
.find('.inactive')
.find('span.count')
.text();
var newStr = str.replace(/\((\d+)\)/, function (match, p1) {
var number = parseInt(p1, 10);
number -= 1;
return '(' + number + ')';
});
$(document)
.find('.everest-forms-list-filters-row')
.find('.inactive')
.find('span.count')
.text(newStr);
}
$.post(evf_data.ajax_url, {
action: 'everest_forms_enabled_form',
security: evf_data.evf_enabled_form,
form_id: $(this).data('form_id'),
enabled: $(this).prop('checked') ? 1 : 0,
});
},
);
$('.wp-list-table .everest-forms-toggle-form input').each(function () {
if (!$(this).prop('checked')) {
$(this)
.closest('tr')
.find('td')
.not('.has-row-actions, .column-enabled')
.addClass('evf-disable-row');
} else {
$(this)
.closest('tr')
.find('td')
.not('.has-row-actions, .column-enabled')
.removeClass('evf-disable-row');
}
});
// Toggle email notification.
$(document).on(
'change',
'.evf-content-email-settings .evf-toggle-switch input',
function (e) {
var $this = $(this),
value = $this.prop('checked'),
connection_id = $this.data('connection-id');
if (false === value) {
$this.val('');
$this
.closest('.evf-content-email-settings')
.find('.email-disable-message')
.remove();
$this
.closest('.evf-content-section-title')
.find('.evf-enable-email-toggle')
.removeClass('everest-forms-hidden');
$this
.closest('.evf-content-section-title')
.siblings('.evf-content-email-settings-inner')
.addClass('everest-forms-hidden');
$(
'' +
evf_data.i18n_email_disable_message +
'
',
).insertAfter($this.closest('.evf-content-section-title'));
$('input[data-connection-id="' + connection_id + '"]').prop(
'checked',
false,
);
} else if (true === value) {
$this.val('1');
$this
.closest('.evf-content-section-title')
.siblings('.evf-content-email-settings-inner')
.removeClass('everest-forms-hidden');
$this
.closest('.evf-content-email-settings')
.find('.email-disable-message')
.remove();
$this
.closest('.evf-content-section-title')
.find('.evf-enable-email-toggle')
.addClass('everest-forms-hidden');
$('input[data-connection-id="' + connection_id + '"]').prop(
'checked',
true,
);
}
},
);
$(document).on('change', '.evf-email-toggle', function (e) {
var $this = $(this),
connection_id = $this.data('connection-id');
if ($this.prop('checked')) {
$this.val('1');
$('.evf-content-email-settings')
.find(
'input[type="checkbox"][data-connection-id="' + connection_id + '"]',
)
.prop('checked', true)
.trigger('change');
} else {
$this.val('');
$('.evf-content-email-settings')
.find(
'input[type="checkbox"][data-connection-id="' + connection_id + '"]',
)
.prop('checked', false)
.trigger('change');
}
});
$(document).on(
'click',
'.everest-forms-min-max-date-format input',
function () {
var minDate = $(this)
.closest('.everest-forms-date')
.find('.everest-forms-min-date')
.val();
var maxDate = $(this)
.closest('.everest-forms-date')
.find('.everest-forms-min-date')
.val();
if ($(this).is(':checked')) {
var setDateRange = $(this)
.parent()
.parent()
.parent()
.next('.everest-forms-min-max-date-range-format');
if (setDateRange.find('input[type="checkbox"]').is(':checked')) {
setDateRange
.next('.everest-forms-min-max-date-option')
.addClass('everest-forms-hidden');
setDateRange
.next()
.next('.everest-forms-min-max-date-range-option')
.removeClass('everest-forms-hidden');
} else {
setDateRange
.next('.everest-forms-min-max-date-option')
.removeClass('everest-forms-hidden');
setDateRange
.next()
.next('.everest-forms-min-max-date-range-option')
.addClass('everest-forms-hidden');
}
$(this)
.parent()
.parent()
.parent()
.next('.everest-forms-min-max-date-range-format')
.removeClass('everest-forms-hidden');
if ('' === minDate) {
$('.everest-forms-min-date')
.addClass('flatpickr-field')
.flatpickr({
disableMobile: true,
onChange: function (selectedDates, dateStr, instance) {
$('.everest-forms-min-date').val(dateStr);
},
onOpen: function (selectedDates, dateStr, instance) {
instance.set('maxDate', $('.everest-forms-max-date').val());
},
});
}
if ('' === maxDate) {
$('.everest-forms-max-date')
.addClass('flatpickr-field')
.flatpickr({
disableMobile: true,
onChange: function (selectedDates, dateStr, instance) {
$('.everest-forms-max-date').val(dateStr);
},
onOpen: function (selectedDates, dateStr, instance) {
instance.set('minDate', $('.everest-forms-min-date').val());
},
});
}
} else {
$(this)
.parent()
.parent()
.parent()
.next()
.next('.everest-forms-min-max-date-option')
.addClass('everest-forms-hidden');
$(this)
.parent()
.parent()
.parent()
.next()
.next()
.next('.everest-forms-min-max-date-range-option')
.addClass('everest-forms-hidden');
$(this)
.parent()
.parent()
.parent()
.next('.everest-forms-min-max-date-range-format')
.addClass('everest-forms-hidden');
}
},
);
$(document).on(
'click',
'.everest-forms-min-max-date-range-format input[type="checkbox"]',
function () {
if ($(this).is(':checked')) {
$(this)
.parent()
.parent()
.parent()
.next('.everest-forms-min-max-date-option')
.addClass('everest-forms-hidden');
$(this)
.parent()
.parent()
.parent()
.next()
.next('.everest-forms-min-max-date-range-option')
.removeClass('everest-forms-hidden');
} else {
$(this)
.parent()
.parent()
.parent()
.next('.everest-forms-min-max-date-option')
.removeClass('everest-forms-hidden');
$(this)
.parent()
.parent()
.parent()
.next()
.next('.everest-forms-min-max-date-range-option')
.addClass('everest-forms-hidden');
}
},
);
/**
* Real-time updates for Google Calendar.
*
* @since 2.0.6
*/
$(document).on(
'change',
'.appt-sched-google-calendar-advanced',
function (e) {
var $this = $(this);
if (!$this.is(':checked')) {
$('.everest-form-appt-sched-google-event-section').addClass(
'everest-forms-hidden',
);
} else {
$('.everest-form-appt-sched-google-event-section').removeClass(
'everest-forms-hidden',
);
}
},
);
/**
* Real-time updates the field for google calendar when we drag the new field on builder.
*
* @since 2.0.6
*/
$(document).on(
'focus',
'.appt-sched-google-calendar-event-title-field',
function (e) {
var selectedItems = $('.evf-admin-field-wrapper').find(
'.everest-forms-field',
);
appt_sched_event_title_field_list($(this), selectedItems);
},
);
$(document).on(
'focus',
'.appt-sched-google-calendar-event-desc-field',
function (e) {
var selectedItems = $('.evf-admin-field-wrapper').find(
'.everest-forms-field',
);
appt_sched_event_title_field_list($(this), selectedItems);
},
);
/**
* Function to updates google event title when we drag the new field on builder.
*
* @since 2.0.6
*/
function appt_sched_event_title_field_list($this, selectedItems) {
var html = '';
const allowedField = ['first-name', 'last-name', 'text', 'textarea'];
$.each(selectedItems, function (index, element) {
var fieldType = $(element).data('field-type');
if (allowedField.includes(fieldType)) {
var content = $(element).find('.label-title');
var label = $(content).find('.text').text();
var fieldName = $(element).data('field-id');
html += '';
}
});
$($this).html(html);
}
function get_all_available_field(allowed_field, type, el) {
var all_fields_without_email = [];
var all_fields = [];
var email_field = [];
var phone_field = [];
$('.evf-admin-row .evf-admin-grid .everest-forms-field').each(function () {
var field_type = $(this).data('field-type');
var field_id = $(this).data('field-id');
if ('email' === field_type) {
var e_field_label = $(this).find('.label-title span').first().text();
var e_field_id = field_id;
email_field[e_field_id] = e_field_label;
} else if ('phone' === field_type) {
var e_field_label = $(this).find('.label-title span').first().text();
var e_field_id = field_id;
phone_field[e_field_id] = e_field_label;
} else {
var field_label = $(this).find('.label-title span').first().text();
all_fields_without_email[field_id] = field_label;
}
all_fields[field_id] = $(this).find('.label-title span').first().text();
});
if ('other' === type || 'all' === type) {
var other_smart_tags = evf_data.smart_tags_other;
for (var key in other_smart_tags) {
$(el)
.parent()
.find('.evf-smart-tag-lists .evf-others')
.append(
'' +
other_smart_tags[key] +
'',
);
}
}
if ('regex' == type) {
var regex_lists = evf_data.regex_expression_lists;
regex_lists.forEach(function (key, value) {
$(el)
.parent()
.find('.evf-smart-tag-lists .evf-regex')
.append(
'' +
key.text +
'',
);
});
}
if ('fields' === type || 'all' === type) {
if (allowed_field === 'email') {
if (Object.keys(email_field).length < 1) {
$(el)
.parent()
.find(
'.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")',
)
.addClass('everest-forms-hidden');
} else {
$(el)
.parent()
.find(
'.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")',
)
.removeClass('everest-forms-hidden');
}
$(el).parent().find('.evf-smart-tag-lists .other-tag-title').remove();
$(el).parent().find('.evf-smart-tag-lists .evf-others').remove();
$(el)
.parent()
.find('.evf-smart-tag-lists')
.append(
'Others
',
);
$(el)
.parent()
.find('.evf-smart-tag-lists .evf-others')
.append(
'Site Admin EmailUser Email',
);
for (var key in email_field) {
$(el)
.parent()
.find('.evf-smart-tag-lists .evf-fields')
.append(
'' +
email_field[key] +
'',
);
}
} else if (allowed_field === 'phone') {
if (Object.keys(phone_field).length < 1) {
$(el)
.parent()
.find(
'.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")',
)
.addClass('everest-forms-hidden');
} else {
$(el)
.parent()
.find(
'.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")',
)
.removeClass('everest-forms-hidden');
}
$(el).parent().find('.evf-smart-tag-lists .other-tag-title').remove();
$(el).parent().find('.evf-smart-tag-lists .evf-others').remove();
for (var key in phone_field) {
$(el)
.parent()
.find('.evf-smart-tag-lists .evf-fields')
.append(
'' +
phone_field[key] +
'',
);
}
} else {
if (Object.keys(all_fields).length < 1) {
$(el)
.parent()
.find(
'.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")',
)
.addClass('everest-forms-hidden');
} else {
$(el)
.parent()
.find(
'.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")',
)
.removeClass('everest-forms-hidden');
}
for (var meta in all_fields) {
$(el)
.parent()
.find('.evf-smart-tag-lists .evf-fields')
.append(
'' +
all_fields[meta] +
'',
);
}
}
}
if ('calculations' === type) {
var calculations = [
'number',
'payment-single',
'range-slider',
'payment-checkbox',
'payment-multiple',
'select',
'payment-total',
'radio',
'first-name',
'text',
'last-name',
'email',
'url',
];
$(document)
.find('.everest-forms-field')
.each(function () {
$fieldId = $(this).attr('data-field-id').split('-');
if (
calculations.includes($(this).attr('data-field-type')) &&
$(el)
.parents('.everest-forms-field-option-row-calculation_field')
.attr('data-field-id') !== $(this).attr('data-field-id')
) {
$(el)
.parent()
.find('.evf-smart-tag-lists .calculations')
.append(
'' +
$(this).find('.label-title .text').text() +
'',
);
}
});
}
if ('ai-fields' === type) {
var aiFields = ['text', 'select', 'radio'];
$(document)
.find('.everest-forms-field')
.each(function () {
if (
aiFields.includes($(this).attr('data-field-type')) &&
$(el)
.parents('.everest-forms-field-option-row-ai_chatbot_input')
.attr('data-field-id') !== $(this).attr('data-field-id')
) {
$(el)
.parent()
.find('.evf-smart-tag-lists .evf-fields-ai')
.append(
'' +
$(this).find('.label-title .text').text() +
'',
);
}
});
}
}
});
jQuery(function ($) {
$(document).ready(function () {
// Add "Add Field Below" button to repeater field.
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
$(mutation.addedNodes).each(function () {
if ($(this).hasClass('everest-forms-field')) {
if (!$(this).find('.evf-add-field-below').length) {
$(this).append(
'' +
'' +
'
'
);
}
}
});
});
});
observer.observe(document.body, {
childList: true,
subtree: true
});
// Custom CSS
const customCssElement = $(
'#everest-forms-panel-field-settings-evf-custom-css',
);
if (customCssElement.length && typeof wp.CodeMirror !== 'undefined') {
var cssEditor = wp.CodeMirror.fromTextArea(customCssElement[0], {
indentUnit: 2,
indentWithTabs: true,
inputStyle: 'contenteditable',
lineNumbers: true,
lineWrapping: true,
styleActiveLine: true,
continueComments: true,
extraKeys: {
'Ctrl-Space': 'autocomplete',
'Ctrl-/': 'toggleComment',
'Cmd-/': 'toggleComment',
'Alt-F': 'findPersistent',
'Ctrl-F': 'findPersistent',
'Cmd-F': 'findPersistent',
},
direction: 'ltr',
gutters: [],
mode: 'text/css',
lint: false,
autoCloseBrackets: true,
autoCloseTags: true,
autoRefresh: true,
matchTags: {
bothTags: true,
},
tabSize: 2,
theme: 'default',
});
cssEditor.on('change', function () {
customCssElement.html(
cssEditor
.getValue()
.replace(/<\s*script/gi, '')
.replace(/\s+on\w+\s*=/gi, ' '),
);
});
}
// Custom JS
const customJsElement = $(
'#everest-forms-panel-field-settings-evf-custom-js',
);
if (customJsElement.length && typeof wp.CodeMirror !== 'undefined') {
var jsEditor = wp.CodeMirror.fromTextArea(customJsElement[0], {
indentUnit: 2,
indentWithTabs: true,
inputStyle: 'contenteditable',
lineNumbers: true,
lineWrapping: true,
styleActiveLine: true,
continueComments: true,
extraKeys: {
'Ctrl-Space': 'autocomplete',
'Ctrl-/': 'toggleComment',
'Cmd-/': 'toggleComment',
'Alt-F': 'findPersistent',
'Ctrl-F': 'findPersistent',
'Cmd-F': 'findPersistent',
},
direction: 'ltr',
gutters: [],
mode: 'javascript',
lint: false,
autoCloseBrackets: true,
autoCloseTags: true,
autoRefresh: true,
matchTags: {
bothTags: true,
},
tabSize: 2,
});
jsEditor.on('change', function () {
customJsElement.html(
jsEditor
.getValue()
.replace(/<\s*script/gi, '')
.replace(/\s+on\w+\s*=/gi, ' '),
);
});
}
$(
'#everest-forms-panel-field-settings-evf-enable-custom-css, #everest-forms-panel-field-settings-evf-enable-custom-js',
).on('change', (e) => {
showHideEditors();
});
showHideEditors();
// Show/Hide the custom CSS and JS input boxes based on the enabled/disabled state.
function showHideEditors() {
if (
$('#everest-forms-panel-field-settings-evf-enable-custom-css').is(
':checked',
)
) {
$('#everest-forms-panel-field-settings-evf-custom-css-wrap').show(500);
} else {
$('#everest-forms-panel-field-settings-evf-custom-css-wrap').hide(500);
}
if (
$('#everest-forms-panel-field-settings-evf-enable-custom-js').is(
':checked',
)
) {
$('#everest-forms-panel-field-settings-evf-custom-js-wrap').show(500);
} else {
$('#everest-forms-panel-field-settings-evf-custom-js-wrap').hide(500);
}
}
});
});