PluginProbe ʕ •ᴥ•ʔ
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI / 2.0.3
Everest Forms – Contact Form, Payment Form, Quiz, Survey & Custom Form Builder with AI v2.0.3
3.5.2 3.5.1 3.5.0 3.4.8 3.4.7 3.4.6 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5.1 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.10 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.6.1 1.6.7 1.7.0 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.2 1.7.2.1 1.7.2.2 1.7.3 1.7.4 1.7.5 1.7.5.1 1.7.5.2 1.7.6 1.7.7 1.7.7.1 1.7.7.2 1.7.8 1.7.9 1.8.0 1.8.0.1 1.8.1 1.8.2 1.8.2.1 1.8.2.2 1.8.2.3 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.0.1 1.9.1 1.9.2 1.9.3 1.9.4 1.9.4.1 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.0.1 2.0.1 2.0.2 2.0.3 2.0.3.1 2.0.4 2.0.4.1 2.0.5 2.0.6 2.0.7 2.0.8 2.0.8.1 2.0.9 3.0.0 3.0.0.1 3.0.1 3.0.2 3.0.3 3.0.3.1 3.0.4 3.0.4.1 3.0.4.2 3.0.5 3.0.5.1 3.0.5.2 3.0.6 3.0.6.1 3.0.7.1 3.0.8 3.0.8.1 3.0.9 3.0.9.1 3.0.9.2 3.0.9.3 3.0.9.4 3.0.9.5 3.1.0 3.1.1 3.1.2 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3.0 3.4.0 3.4.1 3.4.2 3.4.2.1 3.4.3 3.4.4 3.4.5 trunk 1.0 1.0.1 1.0.2 1.0.3
everest-forms / assets / js / admin / form-builder.js
everest-forms / assets / js / admin Last commit date
gutenberg 2 years ago admin.js 3 years ago admin.min.js 3 years ago deactivation-feedback.js 3 years ago deactivation-feedback.min.js 3 years ago editor.js 8 years ago editor.min.js 5 years ago evf-admin-email.js 2 years ago evf-admin-email.min.js 2 years ago evf-clipboard.js 8 years ago evf-clipboard.min.js 8 years ago evf-enhanced-select.js 3 years ago evf-enhanced-select.min.js 3 years ago evf-file-uploader.js 3 years ago evf-file-uploader.min.js 3 years ago evf-setup.js 2 years ago evf-setup.min.js 2 years ago extensions.js 2 years ago extensions.min.js 2 years ago form-builder.js 2 years ago form-builder.min.js 2 years ago form-template-controller.js 3 years ago form-template-controller.min.js 3 years ago settings.js 3 years ago settings.min.js 3 years ago tools.js 4 years ago tools.min.js 4 years ago upgrade.js 2 years ago upgrade.min.js 2 years ago
form-builder.js
3394 lines
1 /* global evf_data, jconfirm, PerfectScrollbar, evfSetClipboard, evfClearClipboard */
2 (function ( $, evf_data ) {
3
4 var $builder;
5
6 var EVFPanelBuilder = {
7
8 /**
9 * Start the panel builder.
10 */
11 init: function () {
12 $( document ).ready( function( $ ) {
13 if ( ! $( 'evf-panel-integrations-button a' ).hasClass('active') ) {
14 $( '#everest-forms-panel-integrations' ).find( '.everest-forms-panel-sidebar a' ).first().addClass( 'active' );
15 if ( $('#everest-forms-panel-integrations' ).find( '.everest-forms-panel-sidebar a').hasClass( 'active' ) ) {
16 $('#everest-forms-panel-integrations' ).find( '.everest-forms-panel-sidebar a' ).next( '.everest-forms-active-connections' ).first().addClass( 'active' );
17 }
18 $( '.everest-forms-panel-content' ).find( '.evf-panel-content-section' ).first().addClass( 'active' );
19 }
20
21 //To remove script tag.
22 $(document).on('input','.everest-forms-field-option-row-choices input[name$="[label]"]',function (e) {
23 var $value = $(this).val();
24 $(this).val($value.replace( /<script/gi, ''));
25 });
26
27
28 });
29
30 $( document ).ready( function( $ ) {
31 if( '1' === $( '.everest-forms-min-max-date-format input' ).val() ) {
32 $('.everest-forms-min-date').addClass('flatpickr-field').flatpickr({
33 disableMobile : true,
34 onChange : function(selectedDates, dateStr, instance) {
35 $('.everest-forms-min-date').val(dateStr);
36 },
37 onOpen: function(selectedDates, dateStr, instance) {
38 instance.set('maxDate', $('.everest-forms-max-date').val());
39 },
40 });
41
42 $('.everest-forms-max-date').addClass('flatpickr-field').flatpickr({
43 disableMobile : true,
44 onChange : function(selectedDates, dateStr, instance) {
45 $('.everest-forms-max-date').val(dateStr);
46 },
47 onOpen: function(selectedDates, dateStr, instance) {
48 instance.set('minDate', $('.everest-forms-min-date').val());
49 },
50 });
51 }
52
53 $( '.everest-forms-min-max-date-format' ).each( function () {
54 if( $( this ).find( 'input[type="checkbox"]' ).is( ':checked' ) ) {
55 $( this ).next( '.everest-forms-min-max-date-range-format' ).removeClass( 'everest-forms-hidden' );
56 $( this ).next().next( '.everest-forms-min-max-date-option' ).removeClass( 'everest-forms-hidden' );
57 if( $( this ).next( '.everest-forms-min-max-date-range-format' ).find( 'input[type="checkbox"]' ).is( ':checked' ) ) {
58 $( this ).next().next().next( '.everest-forms-min-max-date-range-option' ).removeClass( 'everest-forms-hidden' );
59 $( this ).next().next( '.everest-forms-min-max-date-option' ).addClass( 'everest-forms-hidden' );
60 }
61 } else {
62 $( this ).next().next().next( '.everest-forms-min-max-date-range-option' ).addClass( 'everest-forms-hidden' );
63 $( this ).next( '.everest-forms-min-max-date-range-format' ).addClass( 'everest-forms-hidden' );
64 $( this ).next().next( '.everest-forms-min-max-date-option' ).addClass( 'everest-forms-hidden' );
65 }
66 } );
67
68 $( '.everest-forms-row-option select.evf-field-show-hide' ).each( function() {
69 $(this).find( '[selected="selected"]').prop( 'selected', true );
70 });
71 });
72
73
74 if ( ! $( 'evf-panel-payments-button a' ).hasClass( 'active' ) ) {
75 $( '#everest-forms-panel-payments' ).find( '.everest-forms-panel-sidebar a' ).first().addClass( 'active' );
76 $( '.everest-forms-panel-content' ).find( '.evf-payment-setting-content' ).first().addClass( 'active' );
77 }
78
79
80 // Copy shortcode from the builder.
81 $( document.body ).find('#copy-shortcode' )
82 .on( 'click', this.copyShortcode )
83 .on( 'aftercopy', this.copySuccess )
84 .on( 'aftercopyfailure', this.copyFail );
85
86 // Copy shortcode from form list table.
87 $( document.body ).find('.evf-copy-shortcode').each( function() {
88 $( this )
89 .on( 'click', EVFPanelBuilder.copyShortcode )
90 .on( 'aftercopy', EVFPanelBuilder.copySuccess )
91 .on( 'aftercopyfailure', EVFPanelBuilder.copyFail );
92 });
93
94 // Document ready.
95 $( document ).ready( EVFPanelBuilder.ready );
96
97 // Page load.
98 $( window ).on( 'load', EVFPanelBuilder.load );
99
100 // Initialize builder UI fields.
101 $( document.body ).on( 'evf-init-builder-fields', function() {
102 EVFPanelBuilder.bindFields();
103 } ).trigger( 'evf-init-builder-fields' );
104
105 // Adjust builder width.
106 $( document.body ).on( 'adjust_builder_width', function() {
107 var adminMenuWidth = $( '#adminmenuwrap' ).width();
108
109 $( '#everest-forms-builder-form' ).css({ 'width': 'calc(100% - ' + adminMenuWidth + 'px)' });
110 } ).trigger( 'adjust_builder_width' );
111
112 $( document.body ).on( 'click', '#collapse-button', function() {
113 $( '#everest-forms-builder-form' ).width( '' );
114 $( document.body ).trigger( 'adjust_builder_width' );
115 });
116
117 $( window ).on( 'resize orientationchange', function() {
118 var resizeTimer;
119
120 clearTimeout( resizeTimer );
121 resizeTimer = setTimeout( function() {
122 $( '#everest-forms-builder' ).width( '' );
123 $( document.body ).trigger( 'adjust_builder_width' );
124 }, 250 );
125 }).trigger( 'resize' );
126 },
127
128 /**
129 * Copy shortcode.
130 *
131 * @param {Object} evt Copy event.
132 */
133 copyShortcode: function( evt ) {
134 evfClearClipboard();
135 evfSetClipboard( $( this ).closest( '.evf-shortcode-field' ).find( 'input' ).val(), $( this ) );
136 evt.preventDefault();
137 },
138
139 /**
140 * Display a "Copied!" tip when success copying.
141 */
142 copySuccess: function() {
143 $( this ).tooltipster( 'content', $( this ).attr( 'data-copied' ) ).trigger( 'mouseenter' ).on( 'mouseleave', function() {
144 var $this = $( this );
145
146 setTimeout( function() {
147 $this.tooltipster( 'content', $this.attr( 'data-tip' ) );
148 }, 1000 );
149 } );
150 },
151
152 /**
153 * Displays the copy error message when failure copying.
154 */
155 copyFail: function() {
156 $( this ).closest( '.evf-shortcode-field' ).find( 'input' ).focus().select();
157 },
158
159 /**
160 * Page load.
161 *
162 * @since 1.0.0
163 */
164 load: function () {
165 $( '.everest-forms-overlay' ).fadeOut();
166 },
167
168 /**
169 * Document ready.
170 *
171 * @since 1.0.0
172 */
173 ready: function() {
174 // Cache builder element.
175 $builder = $( '#everest-forms-builder' );
176
177 // Bind all actions.
178 EVFPanelBuilder.bindUIActions();
179
180 // Bind edit form actions.
181 EVFPanelBuilder.bindEditActions();
182
183 // jquery-confirm defaults.
184 jconfirm.defaults = {
185 closeIcon: true,
186 backgroundDismiss: true,
187 escapeKey: true,
188 animationBounce: 1,
189 useBootstrap: false,
190 theme: 'modern',
191 boxWidth: '400px',
192 columnClass: 'evf-responsive-class'
193 };
194
195 // Enable Perfect Scrollbar.
196 if ( 'undefined' !== typeof PerfectScrollbar ) {
197 var tab_content = $( '.everest-forms-tab-content' ),
198 evf_panel = $( '.everest-forms-panel' );
199
200 if ( tab_content.length >= 1 ) {
201 window.evf_tab_scroller = new PerfectScrollbar( '.everest-forms-tab-content', {
202 suppressScrollX: true,
203 });
204 }
205
206 evf_panel.each( function(){
207 var section_panel = $(this);
208 var panel_id = section_panel.attr( 'id' );
209
210 if ( section_panel.find( '.everest-forms-panel-sidebar' ).length >= 1 ) {
211 window.evf_setting_scroller = new PerfectScrollbar( '#' + panel_id + ' .everest-forms-panel-sidebar' );
212 }
213 });
214 }
215
216 // Enable Limit length.
217 $builder.on( 'change', '.everest-forms-field-option-row-limit_enabled input', function( event ) {
218 EVFPanelBuilder.updateTextFieldsLimitControls( $( event.target ).parents( '.everest-forms-field-option-row-limit_enabled' ).data().fieldId, event.target.checked );
219 } );
220
221 $builder.on( 'change', '.everest-forms-field-option-row-min_length_enabled input', function( event ) {
222 EVFPanelBuilder.updateTextFieldsMinLengthControls( $( event.target ).parents( '.everest-forms-field-option-row-min_length_enabled' ).data().fieldId, event.target.checked );
223 } );
224
225 // Enable enhanced select.
226 $builder.on( 'change', '.everest-forms-field-option-select .everest-forms-field-option-row-enhanced_select input', function( event ) {
227 EVFPanelBuilder.enhancedSelectFieldStyle( $( event.target ).parents( '.everest-forms-field-option-row-enhanced_select' ).data().fieldId, event.target.checked );
228 } );
229
230 // Enable Multiple options.
231 $builder.on( 'click', '.everest-forms-field-option-row-choices .everest-forms-btn-group span', function( event ) {
232 if ( $( this).hasClass( 'upgrade-modal' ) && 'checkbox' === $(this).data('type') ) {
233 $( this ).parent().find( 'span' ).addClass( 'is-active' );
234 $( this ).removeClass( 'is-active' );
235 EVFPanelBuilder.updateEnhandedSelectField( $( event.target ).parents( '.everest-forms-field-option-row-choices' ).data().fieldId, false );
236 } else {
237 $( this ).parent().find( 'span' ).removeClass( 'is-active' );
238 $( this ).addClass( 'is-active' );
239 EVFPanelBuilder.updateEnhandedSelectField( $( event.target ).parents( '.everest-forms-field-option-row-choices' ).data().fieldId, 'multiple' === $( this ).data( 'selection' ) );
240 }
241
242 // Show 'Select All' Checkbox for Dropdown field only if multiple selection is active
243 if( 'multiple' === $(this).data('selection') && 'checkbox' === $(this).data('type') && $( this).hasClass( 'is-active' ) ) {
244 var $field_id = $(this).parent().parent().data('field-id');
245 $('#everest-forms-field-option-row-'+$field_id+'-select_all').show();
246 } else {
247 var $field_id = $(this).parent().parent().data('field-id');
248 $('#everest-forms-field-option-row-'+$field_id+'-select_all').hide();
249 }
250 } );
251
252 // By default hide the 'Select All' checkbox for Dropdown field
253 $(document.body).on('click', '.everest-forms-field, .everest-forms-field-select[data-field-type="select"]', function () {
254 $builder.find('.everest-forms-field-option-row-choices .everest-forms-btn-group span').each(function () {
255 var $field_id = $(this).parent().parent().data('field-id');
256
257 if( 'multiple' === $(this).data('selection') && 'checkbox' === $(this).data('type') && $( this).hasClass( 'is-active' ) ) {
258 $('#everest-forms-field-option-'+$field_id+'-select_all').parent().show();
259 } else {
260 $('#everest-forms-field-option-'+$field_id+'-select_all').parent().hide();
261 }
262 });
263 });
264
265 // Search fields input.
266 $builder.on( 'keyup', '.everest-forms-search-fields', function() {
267 var searchTerm = $( this ).val().toLowerCase();
268
269 // Show/hide fields.
270 $( '.evf-registered-item' ).each( function() {
271 var $this = $( this );
272 field_type = $this.data( 'field-type' ),
273 field_label = $this.text().toLowerCase();
274
275 if (
276 field_type.search( searchTerm ) > -1
277 || field_label.search( searchTerm ) > -1
278 ) {
279 $this.addClass( 'evf-searched-item' );
280 $this.show();
281 } else {
282 $this.removeClass( 'evf-searched-item' );
283 $this.hide();
284 }
285 });
286
287 // Show/hide field group.
288 $( '.everest-forms-add-fields-group' ).each( function() {
289 var count = $( this ).find( '.evf-registered-item.evf-searched-item' ).length;
290
291 if ( 0 >= count ) {
292 $( this ).hide();
293 } else {
294 $( this ).show();
295 }
296 });
297
298 // Show/hide fields not found indicator.
299 if ( $( '.evf-registered-item.evf-searched-item' ).length ) {
300 $( '.everest-forms-fields-not-found' ).addClass( 'hidden' );
301 } else {
302 $( '.everest-forms-fields-not-found' ).removeClass( 'hidden' );
303 }
304 });
305
306 // Action available for each binding.
307 $( document ).trigger( 'everest_forms_ready' );
308 },
309
310 /**
311 * Update text fields limit controls.
312 *
313 * @since 1.5.10
314 *
315 * @param {number} fieldId Field ID.
316 * @param {bool} checked Whether an option is checked or not.
317 */
318 updateTextFieldsLimitControls: function( fieldId, checked ) {
319 if ( ! checked ) {
320 $( '#everest-forms-field-option-row-' + fieldId + '-limit_controls' ).addClass( 'everest-forms-hidden' );
321 } else {
322 $( '#everest-forms-field-option-row-' + fieldId + '-limit_controls' ).removeClass( 'everest-forms-hidden' );
323 }
324 },
325
326 /**
327 * Update text fields min length controls.
328 *
329 * @since 1.5.10
330 *
331 * @param {number} fieldId Field ID.
332 * @param {bool} checked Whether an option is checked or not.
333 */
334 updateTextFieldsMinLengthControls: function( fieldId, checked ) {
335 if ( ! checked ) {
336 $( '#everest-forms-field-option-row-' + fieldId + '-min_length_controls' ).addClass( 'everest-forms-hidden' );
337 } else {
338 $( '#everest-forms-field-option-row-' + fieldId + '-min_length_controls' ).removeClass( 'everest-forms-hidden' );
339 }
340 },
341
342 /**
343 * Enhanced select fields style.
344 *
345 * @since 1.7.1
346 *
347 * @param {number} fieldId Field ID.
348 * @param {bool} checked Whether an option is checked or not.
349 */
350 enhancedSelectFieldStyle: function( fieldId, checked ) {
351 var $primary = $( '#everest-forms-field-' + fieldId + ' .primary-input' ),
352 isEnhanced = $( '#everest-forms-field-option-' + fieldId + '-enhanced_select' ).is(':checked');
353
354 if ( checked && isEnhanced && $primary.prop( 'multiple' ) ) {
355 $primary.addClass( 'evf-enhanced-select' );
356 $( document.body ).trigger( 'evf-enhanced-select-init' );
357 } else {
358 $primary.removeClass( 'evf-enhanced-select enhanced' );
359 $primary.filter( '.select2-hidden-accessible' ).selectWoo( 'destroy' );
360 }
361 },
362
363 /**
364 * Update enhanced select field component.
365 *
366 * @since 1.7.1
367 *
368 * @param {number} fieldId Field ID.
369 * @param {bool} isMultiple Whether an option is multiple or not.
370 */
371 updateEnhandedSelectField: function( fieldId, isMultiple ) {
372 var $primary = $( '#everest-forms-field-' + fieldId + ' .primary-input' ),
373 $placeholder = $primary.find( '.placeholder' ),
374 $hiddenField = $( '#everest-forms-field-option-' + fieldId + '-multiple_choices' ),
375 $optionChoicesItems = $( '#everest-forms-field-option-row-' + fieldId + '-choices input.default' ),
376 selectedChoices = $optionChoicesItems.filter( ':checked' );
377
378 // Update hidden field value.
379 $hiddenField.val( isMultiple ? 1 : 0 );
380
381 // Add/remove a `multiple` attribute.
382 $primary.prop( 'multiple', isMultiple );
383
384 // Change a `Choices` fields type:
385 // radio - needed for single selection
386 // checkbox - needed for multiple selection
387 $optionChoicesItems.prop( 'type', isMultiple ? 'checkbox' : 'radio' );
388
389 // For single selection we can choose only one.
390 if ( ! isMultiple && selectedChoices.length ) {
391 $optionChoicesItems.prop( 'checked', false );
392 $( selectedChoices.get( 0 ) ).prop( 'checked', true );
393 }
394
395 // Toggle selection for a placeholder.
396 if ( $placeholder.length && isMultiple ) {
397 $placeholder.prop( 'selected', ! isMultiple );
398 }
399
400 // Update a primary field.
401 EVFPanelBuilder.enhancedSelectFieldStyle( fieldId, isMultiple );
402 },
403
404 /**
405 * Element bindings.
406 *
407 * @since 1.0.0
408 */
409 bindUIActions: function() {
410 EVFPanelBuilder.bindDefaultTabs();
411 EVFPanelBuilder.checkEmptyGrid();
412 EVFPanelBuilder.bindFields();
413 EVFPanelBuilder.bindFormPreview();
414 EVFPanelBuilder.bindFormPreviewWithKeyEvent();
415 EVFPanelBuilder.bindFormEntriesWithKeyEvent();
416 EVFPanelBuilder.bindGridSwitcher();
417 EVFPanelBuilder.bindFieldSettings();
418 EVFPanelBuilder.bindFieldDelete();
419 EVFPanelBuilder.bindFieldDeleteWithKeyEvent();
420 EVFPanelBuilder.bindCloneField();
421 EVFPanelBuilder.bindSaveOption();
422 EVFPanelBuilder.bindSaveOptionWithKeyEvent();
423 EVFPanelBuilder.bindOpenShortcutKeysModalWithKeyEvent();
424 EVFPanelBuilder.bindAddNewRow();
425 EVFPanelBuilder.bindRemoveRow();
426 EVFPanelBuilder.bindFormSettings();
427 EVFPanelBuilder.bindFormEmail();
428 EVFPanelBuilder.bindFormSmsNotifications();
429 EVFPanelBuilder.bindFormConversational();
430 EVFPanelBuilder.bindFormIntegrations();
431 EVFPanelBuilder.bindFormPayment();
432 EVFPanelBuilder.choicesInit();
433 EVFPanelBuilder.bindToggleHandleActions();
434 EVFPanelBuilder.bindLabelEditInputActions();
435 EVFPanelBuilder.bindSyncedInputActions();
436 EVFPanelBuilder.init_datepickers();
437 EVFPanelBuilder.bindBulkOptionActions();
438
439 // Fields Panel.
440 EVFPanelBuilder.bindUIActionsFields();
441
442 if ( evf_data.tab === 'field-options' ) {
443 $( '.evf-panel-field-options-button' ).trigger( 'click' );
444 }
445
446 $(document.body).on('everest-forms-field-drop','.evf-registered-buttons .evf-registered-item', function() {
447 EVFPanelBuilder.fieldDrop($(this).clone());
448 } )
449 },
450 /**
451 * Bind user action handlers for the Add Bulk Options feature.
452 */
453 bindBulkOptionActions: function() {
454 // Toggle `Bulk Add` option.
455 $( document.body ).on( 'click', '.evf-toggle-bulk-options', function( e ) {
456 $( this ).closest( '.everest-forms-field-option' ).find( '.everest-forms-field-option-row-add_bulk_options' ).slideToggle();
457 });
458 // Toggle presets list.
459 $( document.body ).on( 'click', '.evf-toggle-presets-list', function( e ) {
460 $( this ).closest( '.everest-forms-field-option' ).find( '.everest-forms-field-option-row .evf-options-presets' ).slideToggle();
461 });
462 // Add custom list of options.
463 $( document.body ).on( 'click', '.evf-add-bulk-options', function( e ) {
464 var $option_row = $( this ).closest( '.everest-forms-field-option-row' );
465 var field_id = $option_row.data( 'field-id' );
466
467 if ( $option_row.length ) {
468 var $choices = $option_row.closest( '.everest-forms-field-option' ).find( '.everest-forms-field-option-row-choices .evf-choices-list' );
469 var $bulk_options_container = $option_row.find( 'textarea#everest-forms-field-option-' + field_id + '-add_bulk_options' );
470 var options_texts = $bulk_options_container.val().replace( /<script/gi, '').split( '\n' );
471
472 EVFPanelBuilder.addBulkOptions( options_texts, $choices );
473 $bulk_options_container.val('');
474 }
475 });
476 // Add presets of options.
477 $( document.body ).on( 'click', '.evf-options-preset-label', function( e ) {
478 var $option_row = $( this ).closest( '.everest-forms-field-option-row' );
479 var field_id = $option_row.data( 'field-id' );
480
481 if ( $option_row.length ) {
482 var options_texts = $( this ).closest( '.evf-options-preset' ).find( '.evf-options-preset-value' ).val();
483
484 $option_row.find( 'textarea#everest-forms-field-option-' + field_id + '-add_bulk_options' ).val( options_texts );
485 $( this ).closest( '.evf-options-presets' ).slideUp();
486 }
487 });
488 //Add toggle option for password validation and strength meter.
489 $(document.body).on( 'click', '.everest-forms-field-option-row-password_strength', function(){
490 if( $(this).find('[type="checkbox"]:first').prop( 'checked' ) ) {
491 $(this).next().find('[type="checkbox"]:first').prop('checked', false);
492 // $(this).prev().find('.everest-forms-inner-options').hide();
493 }
494 });
495 $(document.body).on( 'click', '.everest-forms-field-option-row-password_validation', function(){
496 if( $(this).find('[type="checkbox"]:first').prop( 'checked' ) ) {
497 $(this).prev().find('[type="checkbox"]:first').prop('checked', false);
498 $(this).prev().find('.everest-forms-inner-options').addClass('everest-forms-hidden');
499 }
500 });
501 },
502
503 /**
504 * Add a list of options at once.
505 *
506 * @param {Array<string>} options_texts List of options to add.
507 * @param {object} $choices_container Options container where the options should be added.
508 */
509 addBulkOptions: function( options_texts, $choices_container ) {
510 options_texts.forEach( function( option_text ) {
511 if ( '' !== option_text ) {
512 var $add_button = $choices_container.find( 'li' ).last().find( 'a.add' );
513 EVFPanelBuilder.choiceAdd( null, $add_button, option_text.trim() );
514 }
515 });
516 },
517
518 /**
519 * Initialize date pickers like min/max date, disable dates etc.
520 *
521 * @since 1.6.6
522 */
523 init_datepickers: function() {
524 var date_format = $( '.everest-forms-disable-dates' ).data( 'date-format' ),
525 selection_mode = 'multiple';
526
527 // Initialize "Disable dates" option's date pickers that hasn't been initialized.
528 $( '.everest-forms-disable-dates' ).each( function() {
529 if ( ! $( this ).get(0)._flatpickr ) {
530 $( this ).flatpickr({
531 dateFormat: date_format,
532 mode: selection_mode,
533 });
534 }
535 })
536
537 // Reformat the selected dates input value for `Disable dates` option when the date format changes.
538 $( document.body ).on( 'change', '.evf-date-format', function( e ) {
539 var $disable_dates = $( '.everest-forms-field-option:visible .everest-forms-disable-dates' ),
540 flatpicker = $disable_dates.get(0)._flatpickr,
541 selectedDates = flatpicker.selectedDates,
542 date_format = $( this ).val(),
543 formatedDates = [];
544
545 selectedDates.forEach( function( date ) {
546 formatedDates.push( flatpickr.formatDate( date, date_format ) );
547 })
548 flatpicker.set( 'dateFormat', date_format );
549 $disable_dates.val( formatedDates.join( ', ' ) );
550 });
551
552 // Clear disabled dates.
553 $( document.body ).on( 'click', '.evf-clear-disabled-dates', function() {
554 $( '.everest-forms-field-option:visible .everest-forms-disable-dates' ).get(0)._flatpickr.clear();
555 });
556
557 // Triggring Setting Toggler.
558 $( '.everest-forms-field-date-time' ).each( function() {
559 var id = $( this ).attr( 'data-field-id' );
560 EVFPanelBuilder.dateSettingToggler( id, $('#everest-forms-field-option-' + id + '-datetime_style' ).val() );
561 } );
562
563 if($('.everest-forms-slot-booking input').is(":checked")) {
564 //checked and hide past dates.
565 disable_past_date = $(document).find('.everest-forms-past-date-disable-format input');
566 required = $(document).find('.everest-forms-field-option-row-required input');
567 disable_past_date.attr("checked", true);
568 required.prop("checked", true);
569 disable_past_date.parent().hide();
570 }
571 },
572
573 /**
574 * Form edit title actions.
575 *
576 * @since 1.6.0
577 */
578 bindEditActions: function() {
579 // Delegates event to toggleEditTitle() on clicking.
580 $( '#edit-form-name' ).on( 'click', function( e ) {
581 e.stopPropagation();
582
583 if ( '' !== $( '#evf-edit-form-name' ).val().trim() ) {
584 EVFPanelBuilder.toggleEditTitle( e );
585 }
586 });
587
588 // Apply the title change to form name field.
589 $( '#evf-edit-form-name' )
590 .on( 'change keypress', function( e ) {
591 var $this = $( this );
592
593 e.stopPropagation();
594
595 if ( 13 === e.which && '' !== $( this ).val().trim() ) {
596 EVFPanelBuilder.toggleEditTitle( e );
597 }
598
599 if ( '' !== $this.val().trim() ) {
600 $( '#everest-forms-panel-field-settings-form_title' ).val( $this.val().trim() );
601 }
602 })
603 .on( 'click', function( e ) {
604 e.stopPropagation();
605 });
606
607 // In case the user goes out of focus from title edit state.
608 $( document ).not( $( '.everest-forms-title-desc' ) ).on( 'click', function( e ) {
609 var field = $( '#evf-edit-form-name' );
610
611 e.stopPropagation();
612
613 // Only allow flipping state if currently editing.
614 if ( ! field.prop( 'disabled' ) && field.val() && '' !== field.val().trim() ) {
615 EVFPanelBuilder.toggleEditTitle( e );
616 }
617 });
618 },
619
620 // Toggles edit state.
621 toggleEditTitle: function( event ) {
622 var $el = $( '#edit-form-name' ),
623 $input_title = $el.siblings( '#evf-edit-form-name' );
624
625 event.preventDefault();
626
627 // Toggle disabled property.
628 $input_title.prop ( 'disabled' , function( _ , val ) {
629 return ! val;
630 });
631
632 if ( ! $input_title.hasClass( 'everst-forms-name-editing' ) ) {
633 $input_title.focus();
634 }
635
636 $input_title.toggleClass( 'everst-forms-name-editing' );
637 },
638
639 //--------------------------------------------------------------------//
640 // Fields Panel
641 //--------------------------------------------------------------------//
642
643 /**
644 * Creates a object from form elements.
645 *
646 * @since 1.6.0
647 */
648 formObject: function( el ) {
649 var form = jQuery( el ),
650 fields = form.find( '[name]' ),
651 json = {},
652 arraynames = {};
653
654 for ( var v = 0; v < fields.length; v++ ){
655
656 var field = jQuery( fields[v] ),
657 name = field.prop( 'name' ).replace( /\]/gi,'' ).split( '[' ),
658 value = field.val(),
659 lineconf = {};
660
661 if ( ( field.is( ':radio' ) || field.is( ':checkbox' ) ) && ! field.is( ':checked' ) ) {
662 continue;
663 }
664 for ( var i = name.length-1; i >= 0; i-- ) {
665 var nestname = name[i];
666 if ( typeof nestname === 'undefined' ) {
667 nestname = '';
668 }
669 if ( nestname.length === 0 ){
670 lineconf = [];
671 if ( typeof arraynames[name[i-1]] === 'undefined' ) {
672 arraynames[name[i-1]] = 0;
673 } else {
674 arraynames[name[i-1]] += 1;
675 }
676 nestname = arraynames[name[i-1]];
677 }
678 if ( i === name.length-1 ){
679 if ( value ) {
680 if ( value === 'true' ) {
681 value = true;
682 } else if ( value === 'false' ) {
683 value = false;
684 }else if ( ! isNaN( parseFloat( value ) ) && parseFloat( value ).toString() === value ) {
685 value = parseFloat( value );
686 } else if ( typeof value === 'string' && ( value.substr( 0,1 ) === '{' || value.substr( 0,1 ) === '[' ) ) {
687 try {
688 value = JSON.parse( value );
689 } catch (e) {}
690 } else if ( typeof value === 'object' && value.length && field.is( 'select' ) ){
691 var new_val = {};
692 for ( var i = 0; i < value.length; i++ ) {
693 new_val[ 'n' + i ] = value[ i ];
694 }
695 value = new_val;
696 }
697 }
698 lineconf[nestname] = value;
699 } else {
700 var newobj = lineconf;
701 lineconf = {};
702 lineconf[nestname] = newobj;
703 }
704 }
705 $.extend( true, json, lineconf );
706 }
707
708 return json;
709 },
710
711 /**
712 * Element bindings for Fields panel.
713 *
714 * @since 1.2.0
715 */
716 bindUIActionsFields: function() {
717 // Add new field choice.
718 $builder.on( 'click', '.everest-forms-field-option-row-choices .add', function( event ) {
719 EVFPanelBuilder.choiceAdd( event, $(this) );
720 });
721
722 // Delete field choice.
723 $builder.on( 'click', '.everest-forms-field-option-row-choices .remove', function( event ) {
724 EVFPanelBuilder.choiceDelete( event, $(this) );
725 });
726
727 // Field choices defaults - (before change).
728 $builder.on( 'mousedown', '.everest-forms-field-option-row-choices input[type=radio]', function() {
729 var $this = $(this);
730
731 if ( $this.is( ':checked' ) ) {
732 $this.attr( 'data-checked', '1' );
733 } else {
734 $this.attr( 'data-checked', '0' );
735 }
736 });
737
738 // Field choices defaults.
739 $builder.on( 'click', '.everest-forms-field-option-row-choices input[type=radio]', function() {
740 var $this = $(this),
741 list = $this.parent().parent();
742
743 $this.parent().parent().find( 'input[type=radio]' ).not( this ).prop( 'checked', false );
744
745 if ( $this.attr( 'data-checked' ) === '1' ) {
746 $this.prop( 'checked', false );
747 $this.attr( 'data-checked', '0' );
748 }
749
750 EVFPanelBuilder.choiceUpdate( list.data( 'field-type' ), list.data( 'field-id' ) );
751 });
752
753 // Field choices update preview area.
754 $builder.on( 'change', '.everest-forms-field-option-row-choices input[type=checkbox]', function(e) {
755 var list = $(this).parent().parent();
756 EVFPanelBuilder.choiceUpdate( list.data( 'field-type' ), list.data( 'field-id' ) );
757 });
758
759 // Updates field choices text in almost real time.
760 $builder.on( 'keyup paste focusout', '.everest-forms-field-option-row-choices input.label, .everest-forms-field-option-row-choices input.value', function(e) {
761 var list = $(this).parent().parent().parent();
762 EVFPanelBuilder.choiceUpdate( list.data( 'field-type' ), list.data( 'field-id' ) );
763 });
764
765 // Field choices display value toggle.
766 $builder.on( 'change', '.everest-forms-field-option-row-show_values input', function(e) {
767 $(this).closest( '.everest-forms-field-option' ).find( '.everest-forms-field-option-row-choices ul' ).toggleClass( 'show-values' );
768 });
769
770 // Field image choices toggle.
771 $builder.on( 'change', '.everest-forms-field-option-row-choices_images input', function() {
772 var $this = $( this ),
773 field_id = $this.parent().data( 'field-id' ),
774 $fieldOptions = $( '#everest-forms-field-option-' + field_id ),
775 $columnOptions = $( '#everest-forms-field-option-' + field_id + '-input_columns' ),
776 type = $( '#everest-forms-field-option-' + field_id ).find( '.everest-forms-field-option-hidden-type' ).val();
777
778 $this.parent().find( '.notice' ).toggleClass( 'hidden' );
779 $fieldOptions.find( '.everest-forms-field-option-row-choices ul' ).toggleClass( 'show-images' );
780
781 // Trigger columns changes.
782 if ( $this.is( ':checked' ) ) {
783 $columnOptions.val( 'inline' ).trigger( 'change' );
784 } else {
785 $columnOptions.val( '' ).trigger( 'change' );
786 }
787
788 EVFPanelBuilder.choiceUpdate( type, field_id );
789 } );
790
791 // Upload or add an image.
792 $builder.on( 'click', '.everest-forms-attachment-media-view .upload-button', function( event ) {
793 var $el = $( this ), $wrapper, file_frame;
794
795 event.preventDefault();
796
797 // If the media frame already exists, reopen it.
798 if ( file_frame ) {
799 file_frame.open();
800 return;
801 }
802
803 // Create the media frame.
804 file_frame = wp.media.frames.everestforms_media_frame = wp.media({
805 title: evf_data.i18n_upload_image_title,
806 className: 'media-frame everest-forms-media-frame',
807 frame: 'select',
808 multiple: false,
809 library: {
810 type: 'image'
811 },
812 button: {
813 text: evf_data.i18n_upload_image_button
814 }
815 });
816
817 // When an image is selected, run a callback.
818 file_frame.on( 'select', function() {
819 var attachment = file_frame.state().get( 'selection' ).first().toJSON();
820
821 if ( $el.hasClass( 'button-add-media' ) ) {
822 $el.hide();
823 $wrapper = $el.parent();
824 } else {
825 $wrapper = $el.parent().parent().parent();
826 }
827
828 $wrapper.find( '.source' ).val( attachment.url );
829 $wrapper.find( '.attachment-thumb' ).remove();
830 $wrapper.find( '.thumbnail-image' ).prepend( '<img class="attachment-thumb" src="' + attachment.url + '">' );
831 $wrapper.find( '.actions' ).show();
832
833 $builder.trigger( 'everestFormsImageUploadAdd', [ $el, $wrapper ] );
834 });
835
836 // Finally, open the modal.
837 file_frame.open();
838 } );
839
840 // Remove and uploaded image.
841 $builder.on( 'click', '.everest-forms-attachment-media-view .remove-button', function( event ) {
842 event.preventDefault();
843
844 var $container = $( this ).parent().parent();
845
846 $container.find( '.attachment-thumb' ).remove();
847 $container.parent().find( '.source' ).val( '' );
848 $container.parent().find( '.button-add-media' ).show();
849
850 $builder.trigger( 'everestFormsImageUploadRemove', [ $( this ), $container ] );
851 });
852
853 // Field choices image upload add/remove image.
854 $builder.on( 'everestFormsImageUploadAdd everestFormsImageUploadRemove', function( event, $this, $container ) {
855 var $el = $container.closest( '.evf-choices-list' ),
856 type = $el.data( 'field-type' ),
857 field_id = $el.data( 'field-id' );
858
859 EVFPanelBuilder.choiceUpdate( type, field_id );
860 });
861
862 // Toggle Layout advanced field option.
863 $builder.on( 'change', '.everest-forms-field-option-row-input_columns select', function() {
864 var $this = $( this ),
865 value = $this.val(),
866 field_id = $this.parent().data( 'field-id' ),
867 css_class = '';
868
869 if ( 'inline' === value ) {
870 css_class = 'everest-forms-list-inline';
871 } else if ( '' !== value ) {
872 css_class = 'everest-forms-list-' + value + '-columns';
873 }
874
875 $( '#everest-forms-field-' + field_id ).removeClass( 'everest-forms-list-inline everest-forms-list-2-columns everest-forms-list-3-columns' ).addClass( css_class );
876 });
877
878 // Field sidebar tab toggle.
879 $builder.on( 'click', '.everest-forms-fields-tab a', function(e) {
880 e.preventDefault();
881 EVFPanelBuilder.fieldTabChoice( $(this).attr( 'id' ) );
882 });
883
884
885 // Dragged field and hover over tab buttons - multipart.
886 $(document).on( 'mouseenter', '.everest-forms-tabs li[class*="part_"]', function() {
887 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' ) ) ) {
888 $( this ).find( 'a' ).trigger( 'click' );
889 }
890 } );
891
892 // Display toggle for "Address" field hidden option.
893 $builder.on( 'change', '.everest-forms-field-option-address input.hide', function() {
894 var $this = $(this),
895 id = $this.parent().parent().data( 'field-id' ),
896 subfield = $this.parent().parent().data( 'subfield' );
897 $( '#everest-forms-field-' + id ).find( '.everest-forms-' + subfield ).toggleClass( 'hidden' );
898 });
899
900 // Real-time updates for "Show Label" field option.
901 $builder.on( 'input', '.everest-forms-field-option-row-label input', function() {
902 var $this = $(this),
903 value = $this.val().replace( /<script/gi, ''),
904 id = $this.parent().data( 'field-id' ),
905 $label = $( '#everest-forms-field-' + id ).find( '.label-title .text' );
906
907 if ( $label.hasClass( 'nl2br' ) ) {
908 $label.html( value.replace( /\n/g, '<br>') );
909 } else {
910 $label.html( value );
911 }
912 });
913
914 $builder.on( 'change', '.everest-forms-field-option-row-enable_prepopulate input', function( event ) {
915 var id = $( this ).parent().data( 'field-id' );
916
917 $( '#everest-forms-field-' + id ).toggleClass( 'parameter_name' );
918
919 // Toggle "Parameter Name" option.
920 if ( $( event.target ).is( ':checked' ) ) {
921 $( '#everest-forms-field-option-row-' + id + '-parameter_name' ).show();
922 } else {
923 $( '#everest-forms-field-option-row-' + id + '-parameter_name' ).hide();
924 }
925 });
926
927 $builder.on( 'change', '.everest-forms-field-option-row-enable_regex_validation input', function( event ) {
928 var id = $( this ).parent().data( 'field-id' );
929
930 $( '#everest-forms-field-' + id ).toggleClass( 'regex_value' );
931
932 // Toggle "Parameter Name" option.
933 if ( $( event.target ).is( ':checked' ) ) {
934 $( '#everest-forms-field-option-row-' + id + '-regex_value' ).show();
935 $( '#everest-forms-field-option-row-' + id + '-regex_message' ).show();
936 } else {
937 $( '#everest-forms-field-option-row-' + id + '-regex_value' ).hide();
938 $( '#everest-forms-field-option-row-' + id + '-regex_message' ).hide();
939 }
940 });
941
942 // Real-time updates for "Description" field option.
943 $builder.on( 'input', '.everest-forms-field-option-row-description textarea', function() {
944 var $this = $( this ),
945 value = $this.val().replace( /<script/gi, ''),
946 id = $this.parent().data( 'field-id' ),
947 $desc = $( '#everest-forms-field-' + id ).find( '.description' );
948
949 if ( $desc.hasClass( 'nl2br' ) ) {
950 $desc.html( value.replace( /\n/g, '<br>') );
951 } else {
952 $desc.html( value );
953 }
954 });
955
956 // Real-time updates for "Required" field option.
957 $builder.on( 'change', '.everest-forms-field-option-row-required input', function( event ) {
958 var id = $( this ).parent().data( 'field-id' );
959
960 $( '#everest-forms-field-' + id ).toggleClass( 'required' );
961
962 // Toggle "Required Field Message Setting" option.
963 if ( $( event.target ).is( ':checked' ) ) {
964 $( '#everest-forms-field-option-row-' + id + '-required_field_message_setting' ).show();
965 if($('#everest-forms-field-option-' + id + '-required_field_message_setting-individual').is(':checked')) {
966 $( '#everest-forms-field-option-row-' + id + '-required-field-message' ).show();
967 }
968 } else {
969 $( '#everest-forms-field-option-row-' + id + '-required_field_message_setting' ).hide();
970 $( '#everest-forms-field-option-row-' + id + '-required-field-message' ).hide();
971
972 //unchecked the slot booking if date is not required.
973 slot_booking = $(document).find('.everest-forms-slot-booking input');
974 slot_booking.prop('checked', false);
975 //show pass date input if hidden.
976 $(document).find('.everest-forms-past-date-disable-format input').parent().show();
977 }
978 });
979
980 $builder.on( 'change', '.everest-forms-field-option-row-required_field_message_setting input', function( event ) {
981 var id = $( this ).parent().parent().parent().parent().data( 'field-id' );
982
983 $( '#everest-forms-field-' + id ).toggleClass( 'required_field_message_setting' );
984
985 // Toggle "Required Field Message" option.
986 if ( 'individual' === $(this).val() ) {
987 $( '#everest-forms-field-option-row-' + id + '-required-field-message' ).show();
988 } else {
989 $( '#everest-forms-field-option-row-' + id + '-required-field-message' ).hide();
990 }
991 });
992
993 // Real-time updates for "Confirmation" field option.
994 $builder.on( 'change', '.everest-forms-field-option-row-confirmation input', function( event ) {
995 var id = $( this ).parent().data( 'field-id' );
996
997 // Toggle "Confirmation" field option.
998 if ( $( event.target ).is( ':checked' ) ) {
999 $( '#everest-forms-field-' + id ).find( '.everest-forms-confirm' ).removeClass( 'everest-forms-confirm-disabled' ).addClass( 'everest-forms-confirm-enabled' );
1000 $( '#everest-forms-field-option-' + id ).removeClass( 'everest-forms-confirm-disabled' ).addClass( 'everest-forms-confirm-enabled' );
1001 } else {
1002 $( '#everest-forms-field-' + id ).find( '.everest-forms-confirm' ).removeClass( 'everest-forms-confirm-enabled' ).addClass( 'everest-forms-confirm-disabled' );
1003 $( '#everest-forms-field-option-' + id ).removeClass( 'everest-forms-confirm-enabled' ).addClass( 'everest-forms-confirm-disabled' );
1004 }
1005 });
1006 // Real-time updates for slot booking
1007 $builder.on('change', '.everest-forms-slot-booking input', function(event) {
1008 if($(this).is(":checked")) {
1009 disable_past_date = $(document).find('.everest-forms-past-date-disable-format input');
1010 required = $(document).find('.everest-forms-field-option-row-required input');
1011
1012 //checked the required if it is not checked.
1013 if(required.is(":not(:checked)")) {
1014 required.prop("checked", true);
1015 }
1016
1017 if(disable_past_date.is(":not(:checked)")) {
1018 disable_past_date.prop("checked", true);
1019 }
1020 disable_past_date.parent().hide();
1021 } else {
1022 disable_past_date.parent().show();
1023 }
1024 });
1025
1026 // Real-time updates for "Placeholder" field option.
1027 $builder.on( 'input', '.everest-forms-field-option-row-placeholder input', function(e) {
1028 var $this = $( this ),
1029 value = $this.val(),
1030 id = $this.parent().data( 'field-id' ),
1031 $primary = $( '#everest-forms-field-' + id ).find( '.widefat:not(.secondary-input)' );
1032
1033 if ( $primary.is( 'select' ) ) {
1034 if ( ! value.length ) {
1035 $primary.find( '.placeholder' ).remove();
1036 } else {
1037 if ( $primary.find( '.placeholder' ).length ) {
1038 $primary.find( '.placeholder' ).text( value );
1039 } else {
1040 $primary.prepend( '<option class="placeholder" selected>' + value + '</option>' );
1041 }
1042
1043 $primary.data( 'placeholder', value );
1044
1045 if ( $primary.hasClass( 'enhanced' ) ) {
1046 $primary.parent().find( '.select2-search__field' ).prop( 'placeholder', value );
1047 }
1048 }
1049 } else {
1050 $primary.attr( 'placeholder', value );
1051 }
1052 });
1053
1054 // Real-time updates for "Address Placeholder" field options.
1055 $builder.on( 'input', '.everest-forms-field-option-address input.placeholder', function(e) {
1056 var $this = $(this),
1057 value = $this.val(),
1058 id = $this.parent().parent().data( 'field-id' ),
1059 subfield = $this.parent().parent().data( 'subfield' );
1060 $( '#everest-forms-field-' + id ).find( '.everest-forms-' + subfield + ' input' ).attr( 'placeholder', value );
1061 });
1062
1063 // Real-time updates for "Confirmation Placeholder" field option.
1064 $builder.on( 'input', '.everest-forms-field-option-row-confirmation_placeholder input', function() {
1065 var $this = $( this ),
1066 value = $this.val(),
1067 id = $this.parent().data( 'field-id' );
1068 $( '#everest-forms-field-' + id ).find( '.secondary-input' ).attr( 'placeholder', value );
1069 });
1070
1071 // Real-time updates for "Authorize.Net Card Number Placeholder" field option.
1072 $builder.on( 'input', '.everest-forms-field-option-row-card_number_placeholder input', function() {
1073 var $this = $( this ),
1074 value = $this.val(),
1075 id = $this.parent().data( 'field-id' );
1076 $( '#everest-forms-field-' + id ).find( '.everest-forms-authorize-net-card-number input' ).attr( 'placeholder', value );
1077 });
1078
1079 // Real-time updates for "Authorize.Net CVC Placeholder" field option.
1080 $builder.on( 'input', '.everest-forms-field-option-row-cvc_placeholder input', function() {
1081 var $this = $( this ),
1082 value = $this.val(),
1083 id = $this.parent().data( 'field-id' );
1084 $( '#everest-forms-field-' + id ).find( '.everest-forms-authorize-net-cvc input' ).attr( 'placeholder', value );
1085 });
1086
1087 // Real-time updates for "Hide Label" field option.
1088 $builder.on( 'change', '.everest-forms-field-option-row-label_hide input', function() {
1089 var id = $(this).parent().data( 'field-id' );
1090 $( '#everest-forms-field-' + id ).toggleClass( 'label_hide' );
1091 });
1092
1093 // Real-time updates for Sub Label visbility field option.
1094 $builder.on( 'change', '.everest-forms-field-option-row-sublabel_hide input', function() {
1095 var id = $( this ).parent().data( 'field-id' );
1096 $( '#everest-forms-field-' + id ).toggleClass( 'sublabel_hide' );
1097 });
1098
1099 // Real-time updates for Date/Time and Name "Format" option.
1100 $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) {
1101 var $this = $(this),
1102 value = $this.val(),
1103 id = $this.parent().data( 'field-id' );
1104 $( '#everest-forms-field-' + id ).find( '.format-selected' ).removeClass().addClass( 'format-selected format-selected-' + value );
1105 $( '#everest-forms-field-option-' + id ).find( '.format-selected' ).removeClass().addClass( 'format-selected format-selected-'+ value );
1106 });
1107
1108 // Setting options toggler.
1109 $builder.on( 'change', '.everest-forms-field-option-row-datetime_style select', function() {
1110 EVFPanelBuilder.dateSettingToggler( $( this ).parent().attr( 'data-field-id' ), $( this ).val() );
1111 } );
1112
1113 // Enable Min Max Toggler.
1114 $( '.everest-forms-field-option-row-time_interval_format [id*=enable_min_max_time]' ).each ( function() {
1115 if( $( this ).prop('checked') ) {
1116 $( this ).parent().parent().find( '.input-group-col-2').has(' [id*=min_time_hour]' ).show();
1117 $( this ).parent().parent().find( '.input-group-col-2').has(' [id*=max_time_hour]').show();
1118 $( this ).parent().parent().find( '.input-group-col-2').has(' [for*=select_min_time]' ).show();
1119 $( this ).parent().parent().find( '.input-group-col-2').has( '[for*=select_max_time]' ).show();
1120 } else {
1121 $( this ).parent().parent().find( '.input-group-col-2').has( '[id*=min_time_hour]' ).hide();
1122 $( this ).parent().parent().find( '.input-group-col-2').has( '[id*=max_time_hour]' ).hide();
1123 $( this ).parent().parent().find( '[for*=select_min_time]' ).hide();
1124 $( this ).parent().parent().find( '[for*=select_max_time]' ).hide();
1125 }
1126 } );
1127
1128 $builder.on( 'click', '.everest-forms-field-option-row-time_interval_format [id*=enable_min_max_time]', function() {
1129 if( $( this ).prop('checked') ) {
1130 $( this ).parent().parent().find( '.input-group-col-2').has(' [id*=min_time_hour]' ).show();
1131 $( this ).parent().parent().find( '.input-group-col-2').has(' [id*=max_time_hour]').show();
1132 $( this ).parent().parent().find( '[for*=select_min_time]' ).show();
1133 $( this ).parent().parent().find( '[for*=select_max_time]' ).show();
1134 } else {
1135 $( this ).parent().parent().find( '.input-group-col-2').has( '[id*=min_time_hour]' ).hide();
1136 $( this ).parent().parent().find( '.input-group-col-2').has( '[id*=max_time_hour]' ).hide();
1137 $( this ).parent().parent().find( '[for*=select_min_time]' ).hide();
1138 $( this ).parent().parent().find( '[for*=select_max_time]' ).hide();
1139 }
1140 } );
1141
1142 // Time interval changes.
1143 $builder.on( 'change', '.everest-forms-field-option-row-time_interval_format select[id*=time_format]', function() {
1144 min_hour = $( this ).parent().siblings( '.input-group-col-2' ).find( '[id*=min_time_hour]' );
1145 max_hour = $( this ).parent().siblings( '.input-group-col-2' ).find( '[id*=max_time_hour]' );
1146 var selected_min = min_hour.find( 'option:selected' ).val();
1147 var selected_max = max_hour.find( 'option:selected' ).val();
1148 var options = '', a, h;
1149 for( i = 0; i<= 23; i++ ) {
1150 if( $( this ).val() === 'H:i' ) {
1151 options += '<option value = "' + i + '">' + ( ( i < 10 ) ? ( '0' + i ) : i )+ '</option>';
1152 } else {
1153 a = ' PM';
1154 if( i < 12 ) {
1155 a = ' AM';
1156 h = i;
1157 } else {
1158 h = i - 12;
1159 }
1160 if( h == 0 ) {
1161 h = 12;
1162 }
1163 options += '<option value = "' + i + '">' + h + a + '</option>';
1164 }
1165 }
1166 min_hour.html(options);
1167 max_hour.html(options);
1168 min_hour.find( 'option[value=' + selected_min + ']' ).prop( 'selected', true );
1169 max_hour.find( 'option[value=' + selected_max + ']' ).prop( 'selected', true );
1170 } );
1171 },
1172
1173 /**
1174 * Setting options for Date Picker and Dropdown Toggler.
1175 */
1176 dateSettingToggler: function( id, type ) {
1177 if( type == 'picker' ) {
1178 // Picker Date Setting Control
1179 $( '#everest-forms-field-option-row-' + id + '-placeholder' ).show();
1180 $( '#everest-forms-field-option-' + id + '-disable_dates' ).show();
1181 $( 'label[for=everest-forms-field-option-' + id + '-disable_dates]' ).show();
1182 $( '#everest-forms-field-option-' + id + '-date_mode-range' ).parents().find( 'everest-forms-checklist' ).show();
1183 $( '.everest-forms-field-option-row-date_format .time_interval' ).show();
1184 $( '#everest-forms-field-option-' + id + '-date_localization' ).show();
1185 $( 'label[for=everest-forms-field-option-' + id + '-date_localization]' ).show();
1186 $( '#everest-forms-field-option-' + id + '-date_default' ).parent().show();
1187 $('#everest-forms-field-option-' + id + '-past_date_disable' ).parent().show();
1188 $( '#everest-forms-field-option-' + id + '-enable_min_max' ).parent().show();
1189 //Check if min max date enabled.
1190 if( $('#everest-forms-field-option-' + id + '-enable_min_max' ).prop( 'checked' ) ) {
1191 $('#everest-forms-field-option-' + id + '-set_date_range' ).parent().show();
1192 if ( $('#everest-forms-field-option-' + id + '-set_date_range' ).prop( 'checked' ) ) {
1193 $('#everest-forms-field-option-row-' + id + '-date_format .everest-forms-min-max-date-range-option').removeClass('everest-forms-hidden');
1194 } else {
1195 $('#everest-forms-field-option-row-' + id + '-date_format .everest-forms-min-max-date-option').removeClass('everest-forms-hidden');
1196 }
1197 }
1198 $('#everest-forms-field-option-' + id + '-time_interval' ).show();
1199 $('#everest-forms-field-option-' + id + '-enable_min_max_time').hide();
1200 $('label[for=everest-forms-field-option-' + id + '-enable_min_max_time]').hide();
1201 $('label[for=everest-forms-field-option-' + id + '-select_min_time]').hide();
1202 $('label[for=everest-forms-field-option-' + id + '-select_max_time]').hide();
1203 $('#everest-forms-field-option-' + id + '-min_time_hour').parent().hide();
1204 $('#everest-forms-field-option-' + id + '-max_time_hour').parent().hide();
1205
1206 } else {
1207 // Dropdown Date Setting Control
1208 $('#everest-forms-field-option-' + id + '-date_mode-range').parents().find('everest-forms-checklist').hide();
1209 $('#everest-forms-field-option-' + id + '-date_default' ).parent().hide();
1210 $('#everest-forms-field-option-' + id + '-past_date_disable' ).parent().hide();
1211 $('#everest-forms-field-option-row-' + id + '-placeholder').hide();
1212 $('#everest-forms-field-option-' + id + '-enable_min_max').parent().hide();
1213 $('#everest-forms-field-option-row-' + id + '-date_format .everest-forms-min-max-date-option').addClass( 'everest-forms-hidden' );
1214 $('#everest-forms-field-option-' + id + '-set_date_range').parent().hide();
1215 $('#everest-forms-field-option-row-' + id + '-date_format .everest-forms-min-max-date-range-option').addClass( 'everest-forms-hidden' );
1216 $('#everest-forms-field-option-' + id + '-disable_dates' ).hide();
1217 $('label[for=everest-forms-field-option-' + id + '-disable_dates]').hide();
1218 $('.everest-forms-field-option-row-date_format .everest-forms-checklist' ).hide();
1219 $('.everest-forms-field-option-row-date_format .time_interval' ).hide();
1220 $('#everest-forms-field-option-' + id + '-date_localization' ).hide();
1221 $('label[for=everest-forms-field-option-' + id + '-date_localization]' ).hide();
1222 $('#everest-forms-field-option-' + id + '-time_interval' ).hide();
1223 $('#everest-forms-field-option-' + id + '-enable_min_max_time').show();
1224 $('label[for=everest-forms-field-option-' + id + '-enable_min_max_time]').show();
1225 //Check if min max time enabled.
1226 if( $('#everest-forms-field-option-' + id + '-enable_min_max_time').prop('checked') ) {
1227 $('label[for=everest-forms-field-option-' + id + '-select_min_time]').show();
1228 $('label[for=everest-forms-field-option-' + id + '-select_max_time]').show();
1229 $('#everest-forms-field-option-' + id + '-min_time_hour').parent().show();
1230 $('#everest-forms-field-option-' + id + '-max_time_hour').parent().show();
1231 }
1232 }
1233 },
1234
1235
1236 /**
1237 * Make field choices sortable.
1238 *
1239 * @since 1.0.0
1240 *
1241 * @param {string} selector Selector.
1242 */
1243 choicesInit: function( selector ) {
1244 selector = selector || '.everest-forms-field-option-row-choices ul';
1245
1246 $( selector ).sortable({
1247 items: 'li',
1248 axis: 'y',
1249 handle: '.sort',
1250 scrollSensitivity: 40,
1251 stop: function ( event ) {
1252 var field_id = $( event.target ).attr( 'data-field-id' ),
1253 type = $( '#everest-forms-field-option-' + field_id ).find( '.everest-forms-field-option-hidden-type' ).val();
1254
1255 EVFPanelBuilder.choiceUpdate( type, field_id );
1256 }
1257 } );
1258 },
1259
1260 /**
1261 * Add new field choice.
1262 *
1263 * @since 1.6.0
1264 */
1265 choiceAdd: function( event, el, value ) {
1266 if ( event && event.preventDefault ) {
1267 event.preventDefault();
1268 }
1269
1270 var $this = $( el ),
1271 $parent = $this.parent(),
1272 checked = $parent.find( 'input.default' ).is( ':checked' ),
1273 fieldID = $this.closest( '.everest-forms-field-option-row-choices' ).data( 'field-id' ),
1274 nextID = $parent.parent().attr( 'data-next-id' ),
1275 type = $parent.parent().data( 'field-type' ),
1276 $choice = $parent.clone().insertAfter( $parent );
1277
1278 $choice.attr( 'data-key', nextID );
1279 $choice.find( 'input.label' ).val( value ).attr( 'name', 'form_fields[' + fieldID + '][choices][' + nextID + '][label]' );
1280 $choice.find( 'input.value' ).val( value ).attr( 'name', 'form_fields[' + fieldID + '][choices][' + nextID + '][value]' );
1281 $choice.find( 'input.source' ).val( '' ).attr( 'name', 'form_fields[' + fieldID + '][choices][' + nextID + '][image]' );
1282 $choice.find( 'input.default').attr( 'name', 'form_fields[' + fieldID + '][choices][' + nextID + '][default]' ).prop( 'checked', false );
1283 $choice.find( '.attachment-thumb' ).remove();
1284 $choice.find( '.button-add-media' ).show();
1285
1286 if ( checked === true ) {
1287 $parent.find( 'input.default' ).prop( 'checked', true );
1288 }
1289
1290 nextID++;
1291 $parent.parent().attr( 'data-next-id', nextID );
1292 $builder.trigger( 'everestFormsChoiceAdd' );
1293 EVFPanelBuilder.choiceUpdate( type, fieldID );
1294 },
1295
1296 /**
1297 * Delete field choice.
1298 *
1299 * @since 1.6.0
1300 */
1301 choiceDelete: function( event, el ) {
1302 event.preventDefault();
1303
1304 var $this = $( el ),
1305 $list = $this.parent().parent(),
1306 total = $list.find( 'li' ).length;
1307
1308 if ( total < 2 ) {
1309 $.alert({
1310 title: false,
1311 content: evf_data.i18n_field_error_choice,
1312 icon: 'dashicons dashicons-info',
1313 type: 'blue',
1314 buttons: {
1315 ok: {
1316 text: evf_data.i18n_ok,
1317 btnClass: 'btn-confirm',
1318 keys: [ 'enter' ]
1319 }
1320 }
1321 });
1322 } else {
1323 $this.parent().remove();
1324 EVFPanelBuilder.choiceUpdate( $list.data( 'field-type' ), $list.data( 'field-id' ) );
1325 $builder.trigger( 'everestFormsChoiceDelete' );
1326 }
1327 },
1328
1329 /**
1330 * Update field choices in preview area, for the Fields panel.
1331 *
1332 * @since 1.6.0
1333 */
1334 choiceUpdate: function( type, id ) {
1335 var $fieldOptions = $( '#everest-forms-field-option-' + id );
1336 $primary = $( '#everest-forms-field-' + id + ' .primary-input' );
1337
1338 // Radio and Checkbox use _ template.
1339 if ( 'radio' === type || 'checkbox' === type || 'payment-multiple' === type || 'payment-checkbox' === type ) {
1340 var choices = [],
1341 formData = EVFPanelBuilder.formObject( $fieldOptions ),
1342 settings = formData.form_fields[ id ];
1343
1344 // Order of choices for a specific field.
1345 $( '#everest-forms-field-option-' + id ).find( '.evf-choices-list li' ).each( function() {
1346 choices.push( $( this ).data( 'key' ) );
1347 } );
1348
1349 var tmpl = wp.template( 'everest-forms-field-preview-choices' ),
1350 type = 'checkbox' === type || 'payment-checkbox' === type ? 'checkbox' : 'radio';
1351 data = {
1352 type: type,
1353 order: choices,
1354 settings: settings,
1355 amountFilter: EVFPanelBuilder.amountFilter,
1356 };
1357
1358 $( '#everest-forms-field-' + id ).find( 'ul.primary-input' ).replaceWith( tmpl( data ) );
1359
1360 return;
1361 }
1362
1363 var new_choice;
1364
1365 if ( 'select' === type ) {
1366 new_choice = '<option>{label}</option>';
1367 $primary.find( 'option' ).not( '.placeholder' ).remove();
1368 }
1369
1370 $( '#everest-forms-field-option-row-' + id + '-choices .evf-choices-list li' ).each( function( index ) {
1371 var $this = $( this ),
1372 label = $this.find( 'input.label' ).val().replace( /<script/gi, ''),
1373 selected = $this.find( 'input.default' ).is( ':checked' ),
1374 choice = $( new_choice.replace( '{label}', label ) );
1375
1376 $( '#everest-forms-field-' + id + ' .primary-input' ).append( choice );
1377
1378 if ( ! label ) {
1379 return;
1380 }
1381
1382 if ( true === selected ) {
1383 switch ( type ) {
1384 case 'select':
1385 choice.prop( 'selected', true );
1386 break;
1387 case 'radio':
1388 case 'checkbox':
1389 choice.find( 'input' ).prop( 'checked', true );
1390 break;
1391 }
1392 }
1393 } );
1394 },
1395
1396 amountFilter: function(data, amount){
1397 if ( 'right' === data.currency_symbol_pos ) {
1398 return amount + ' ' + data.currency_symbol;
1399 } else {
1400 return data.currency_symbol + ' ' + amount;
1401 }
1402 },
1403
1404 bindFormSettings: function () {
1405 $( 'body' ).on( 'click', '.evf-setting-panel', function( e ) {
1406 var data_setting_section = $(this).attr('data-section');
1407 $('.evf-setting-panel').removeClass('active');
1408 $('.everest-forms-active-email').removeClass('active');
1409 $('.everest-forms-active-sms-notifications').removeClass('active');
1410 $('.everest-forms-active-conversational-forms').removeClass('active');
1411 $('.evf-content-section').removeClass('active');
1412 $(this).addClass('active');
1413 $('.evf-content-' + data_setting_section + '-settings').addClass('active');
1414 e.preventDefault();
1415 });
1416
1417 $('.evf-setting-panel').eq(0).trigger('click');
1418 },
1419 bindFormEmail: function () {
1420 $('body').on('click', '.everest-forms-panel-sidebar-section-email', function ( e ) {
1421 $(this).siblings('.everest-forms-active-email').removeClass('active');
1422 $(this).next('.everest-forms-active-email').addClass('active');
1423 var container = $( this ).siblings('.everest-forms-active-email.active').find('.everest-forms-active-email-connections-list li');
1424
1425 if( container.length ){
1426 container.children('.user-nickname').first().trigger('click');
1427 }
1428 e.preventDefault();
1429 });
1430 },
1431 bindFormSmsNotifications: function () {
1432 $('body').on('click', '.everest-forms-panel-sidebar-section-sms-notifications', function ( e ) {
1433 $(this).siblings('.everest-forms-active-sms-notifications').removeClass('active');
1434 $(this).next('.everest-forms-active-sms-notifications').addClass('active');
1435 var container = $( this ).siblings('.everest-forms-active-sms-notifications.active').find('.everest-forms-active-sms-notifications-connections-list li');
1436
1437 if( container.length ){
1438 container.children('.user-nickname').first().trigger('click');
1439 }
1440 e.preventDefault();
1441 });
1442 },
1443 bindFormConversational: function () {
1444 $("body").on("click",".everest-forms-panel-sidebar-section-conversational-forms ", function (e) {
1445 var $this = $(this);
1446 $(this).siblings(".everest-forms-active-conversational-forms").removeClass("active");
1447 $(this).next(".everest-forms-active-conversational-forms").addClass("active");
1448 var container = $( this ).siblings('.everest-forms-active-conversational-forms.active');
1449
1450 if( container.length ){
1451 container.children('.evf-content-tab ').trigger('click');
1452 }
1453 e.preventDefault();
1454 });
1455 },
1456 bindFormIntegrations: function () {
1457 $('body').on('click', '.evf-integrations-panel', function ( e ) {
1458 var data_setting_section = $(this).attr('data-section');
1459 $('.evf-integrations-panel').removeClass('active');
1460 $('#everest-forms-panel-integrations').find('.evf-panel-content-section').removeClass('active');
1461 $(this).addClass('active');
1462 $(this).parent().find('.everest-forms-active-connections').removeClass('active');
1463 $(this).next('.everest-forms-active-connections').addClass('active');
1464 var container = $( this ).siblings('.everest-forms-active-connections.active').find('.everest-forms-active-connections-list li');
1465
1466 if( container.length ){
1467 container.children('.user-nickname').first().trigger('click');
1468 }
1469 $('.evf-panel-content-section-' + data_setting_section ).addClass('active');
1470 e.preventDefault();
1471 });
1472
1473 $('.evf-setting-panel').eq(0).trigger('click');
1474 },
1475 bindFormPayment: function () {
1476 $('body').on('click', '.evf-payments-panel', function ( e ) {
1477 var data_setting_section = $(this).attr('data-section');
1478 $('.evf-payments-panel').removeClass('active');
1479 $(this).siblings().removeClass('icon active');
1480 $(this).addClass('active');
1481 $(this).parents('#everest-forms-panel-payments').find('.evf-payment-setting-content').removeClass('active').hide();
1482 $('.evf-content-' + data_setting_section + '-settings' ).addClass('active').show();
1483 e.preventDefault();
1484 });
1485
1486 $('.evf-setting-panel').eq(0).trigger('click');
1487 },
1488 removeRow: function ( row ) {
1489 $.each( row.find( '.everest-forms-field' ), function() {
1490 var field_id = $( this ).attr( 'data-field-id' ),
1491 field_options = $( '#everest-forms-field-option-' + field_id );
1492
1493 // Remove form field.
1494 $( this ).remove();
1495
1496 // Remove field options.
1497 field_options.remove();
1498 });
1499
1500 // Remove row.
1501 row.remove();
1502 },
1503 bindRemoveRow: function () {
1504 $( 'body' ).on( 'click', '.evf-delete-row', function() {
1505 var $this = $( this ),
1506 total_rows = $( '.evf-admin-row' ).length,
1507 current_row = $this.closest( '.evf-admin-row' ),
1508 row_id = current_row.attr('data-row-id'),
1509 current_part = $this.parents( '.evf-admin-field-container' ).attr( 'data-current-part' ),
1510 multipart_active = $( '#everest-forms-builder' ).hasClass( 'multi-part-activated' );
1511
1512 if ( current_part && multipart_active ) {
1513 total_rows = $( '#part_' + current_part ).find( '.evf-admin-row' ).length;
1514 }
1515
1516 if ( total_rows < 2 ) {
1517 $.alert({
1518 title: evf_data.i18n_row_locked,
1519 content: evf_data.i18n_row_locked_msg,
1520 icon: 'dashicons dashicons-info',
1521 type: 'blue',
1522 buttons : {
1523 confirm : {
1524 text: evf_data.i18n_close,
1525 btnClass: 'btn-confirm',
1526 keys: ['enter']
1527 }
1528 }
1529 });
1530 } else {
1531 $.confirm({
1532 title: false,
1533 content: evf_data.i18n_delete_row_confirm,
1534 type: 'red',
1535 closeIcon: false,
1536 backgroundDismiss: false,
1537 icon: 'dashicons dashicons-warning',
1538 buttons: {
1539 confirm: {
1540 text: evf_data.i18n_ok,
1541 btnClass: 'btn-confirm',
1542 keys: ['enter'],
1543 action: function () {
1544 EVFPanelBuilder.removeRow( current_row );
1545 $( '.everest-forms-fields-tab' ).find( 'a' ).removeClass( 'active' );
1546 $( '.everest-forms-fields-tab' ).find( 'a' ).first().addClass( 'active' );
1547 $( '.everest-forms-add-fields' ).show();
1548 $( '#everest-forms-row-option-row_' + row_id ).remove();
1549 }
1550 },
1551 cancel: {
1552 text: evf_data.i18n_cancel
1553 }
1554 }
1555 } );
1556 }
1557 });
1558 },
1559 bindAddNewRow: function() {
1560 $( 'body' ).on( 'click', '.evf-add-row span', function() {
1561 $( '#add-fields').trigger( 'click' );
1562 var $this = $( this ),
1563 wrapper = $( '.evf-admin-field-wrapper' ),
1564 row_ids = $( '.evf-admin-row' ).map( function() {
1565 return $( this ).data( 'row-id' );
1566 } ).get(),
1567 max_row_id = Math.max.apply( Math, row_ids ),
1568 row_clone = $( '.evf-admin-row' ).eq(0).clone(),
1569 total_rows = $this.parent().attr( 'data-total-rows' ),
1570 current_part = $this.parents( '.evf-admin-field-container' ).attr( 'data-current-part' );
1571
1572 max_row_id++;
1573 total_rows++;
1574
1575 if ( current_part ) {
1576 wrapper = $( '.evf-admin-field-wrapper' ).find( '#part_' + current_part );
1577 }
1578
1579 // Row clone.
1580 row_clone.find( '.evf-admin-grid' ).html( '' );
1581 row_clone.attr( 'data-row-id', max_row_id );
1582
1583 // Row infos.
1584 $this.parent().attr( 'data-total-rows', total_rows );
1585 $this.parent().attr( 'data-next-row-id', max_row_id );
1586
1587 if( 0 < $( '.everest-forms-row-options' ).length && false === $this.closest( '.evf-add-row' ).hasClass('repeater-row') ) {
1588
1589 row_clone.find( 'div' ).hide();
1590
1591 row_clone.css({
1592 'padding': '40px'
1593 }).append( '<i class="spinner is-active" style="margin:0px auto;"></i>' );
1594
1595 // Row append.
1596 wrapper.append( row_clone );
1597
1598
1599 // Initialize fields UI.
1600 EVFPanelBuilder.bindFields();
1601 EVFPanelBuilder.checkEmptyGrid();
1602
1603 var row_id = row_clone.attr('data-row-id'),
1604 evf_data = window.evf_data;
1605 $.ajax({
1606 url: evf_data.ajax_url,
1607 type: 'POST',
1608 data: {
1609 action: 'everest_forms_new_row',
1610 security: evf_data.evf_add_row_nonce,
1611 form_id: evf_data.form_id,
1612 row_id: row_id
1613 },
1614 success: function( xhr ) {
1615 if( true === xhr.success ) {
1616 if( 'undefined' !== typeof xhr.data.html ) {
1617 $( document ).find( '.everest-forms-row-option-group' ).append( xhr.data.html );
1618 EVFPanelBuilder.conditionalLogicAppendRow( row_id );
1619 // Disable conditional logc by default.
1620 $( '#everest-forms-panel-field-form_rows-connection_row_' + row_id + '-conditional_logic_status' ).prop( 'checked', false );
1621 }
1622 }
1623 }
1624 }).always( function() {
1625 row_clone.css( {'padding':0 } );
1626
1627 row_clone.find( 'div' ).show();
1628
1629 row_clone.find( '.evf-toggle-row-content' ).css( 'display', 'none' );
1630
1631 row_clone.find( 'i' ).remove();
1632
1633 // Trigger event after row add.
1634 $this.trigger('everest-forms-after-add-row', row_clone);
1635 } );
1636 } else {
1637 // Row append.
1638 wrapper.append( row_clone );
1639 // Initialize fields UI.
1640 EVFPanelBuilder.bindFields();
1641 EVFPanelBuilder.checkEmptyGrid();
1642 // Trigger event after row add.
1643 $this.trigger('everest-forms-after-add-row', row_clone);
1644 }
1645 });
1646
1647 },
1648 bindCloneField: function () {
1649 $( 'body' ).on( 'click', '.everest-forms-preview .everest-forms-field .everest-forms-field-duplicate', function() {
1650 var $field = $( this ).closest( '.everest-forms-field' );
1651
1652 if ( $field.hasClass( 'no-duplicate' ) ) {
1653 $.alert({
1654 title: evf_data.i18n_field_locked,
1655 content: evf_data.i18n_field_locked_msg,
1656 icon: 'dashicons dashicons-info',
1657 type: 'blue',
1658 buttons : {
1659 confirm : {
1660 text: evf_data.i18n_close,
1661 btnClass: 'btn-confirm',
1662 keys: ['enter']
1663 }
1664 }
1665 });
1666 } else {
1667 $.confirm({
1668 title: false,
1669 content: evf_data.i18n_duplicate_field_confirm,
1670 type: 'orange',
1671 closeIcon: false,
1672 backgroundDismiss: false,
1673 icon: 'dashicons dashicons-warning',
1674 buttons: {
1675 confirm: {
1676 text: evf_data.i18n_ok,
1677 btnClass: 'btn-confirm',
1678 keys: ['enter'],
1679 action: function () {
1680 EVFPanelBuilder.cloneFieldAction( $field );
1681 }
1682 },
1683 cancel: {
1684 text: evf_data.i18n_cancel
1685 }
1686 }
1687 } );
1688 }
1689 } );
1690
1691 $( 'body' ).on( 'click', '.evf-admin-row .evf-duplicate-row', function() {
1692 var $row = $( this ).closest( '.evf-admin-row' );
1693 if( $row.find( '.everest-forms-field' ).hasClass( 'no-duplicate' ) ) {
1694 $.alert({
1695 title: evf_data.i18n_field_locked,
1696 content: evf_data.i18n_row_locked_msg,
1697 icon: 'dashicons dashicons-info',
1698 type: 'blue',
1699 buttons : {
1700 confirm : {
1701 text: evf_data.i18n_close,
1702 btnClass: 'btn-confirm',
1703 keys: ['enter']
1704 }
1705 }
1706 });
1707 } else {
1708 $.confirm({
1709 title: false,
1710 content: evf_data.i18n_duplicate_row_confirm,
1711 type: 'orange',
1712 closeIcon: false,
1713 backgroundDismiss: false,
1714 icon: 'dashicons dashicons-warning',
1715 buttons: {
1716 confirm: {
1717 text: evf_data.i18n_ok,
1718 btnClass: 'btn-confirm',
1719 keys: ['enter'],
1720 action: function () {
1721 EVFPanelBuilder.cloneRowAction( $row );
1722 }
1723 },
1724 cancel: {
1725 text: evf_data.i18n_cancel
1726 }
1727 }
1728 } );
1729 }
1730 } );
1731 },
1732 cloneRowAction: function ( row ) {
1733 row_ids = $( '.evf-admin-row' ).map( function() {
1734 return $( this ).data( 'row-id' );
1735 } ).get(),
1736 max_row_id = Math.max.apply( Math, row_ids ),
1737 row_clone = row.clone(),
1738 total_rows = $( '.evf-add-row' ).attr( 'data-total-rows' );
1739 max_row_id++;
1740 total_rows++;
1741
1742 // New row ID.
1743 row_clone.attr( 'data-row-id', max_row_id );
1744 // Initialize fields UI.
1745 $( '.evf-add-row' ).attr( 'data-total-rows', total_rows );
1746 $( '.evf-add-row' ).attr( 'data-next-row-id', max_row_id );
1747
1748 var data = {
1749 action : 'everest_forms_get_next_id',
1750 security: evf_data.evf_get_next_id,
1751 form_id : evf_data.form_id,
1752 fields : row_clone.find( '.everest-forms-field' ).length
1753 };
1754
1755 $.ajax({
1756 url: evf_data.ajax_url,
1757 data: data,
1758 type: 'POST',
1759 beforeSend: function() {
1760 $( document.body ).trigger( 'init_field_options_toggle' );
1761 },
1762 success: function ( response ) {
1763 if ( typeof response.success === 'boolean' && response.success === true ) {
1764 // Row append.
1765 row.after( row_clone );
1766 // Duplicating Fields
1767 $.each( response.data, function( index, data ) {
1768 var field_id = data.field_id;
1769 var field_key = data.field_key;
1770 $('#everest-forms-field-id').val(field_id);
1771 field = row_clone.find( '.everest-forms-field' ).eq( index );
1772 var element_field_id = field.attr('data-field-id');
1773 EVFPanelBuilder.render_node( field, element_field_id, field_key );
1774 field.remove();
1775 $( document.body ).trigger( 'init_field_options_toggle' );
1776 });
1777 // Binding fields.
1778 EVFPanelBuilder.bindFields();
1779 }
1780 }
1781 });
1782 },
1783 cloneFieldAction: function ( field ) {
1784 var element_field_id = field.attr('data-field-id');
1785 var form_id = evf_data.form_id;
1786 var data = {
1787 action: 'everest_forms_get_next_id',
1788 security: evf_data.evf_get_next_id,
1789 form_id: form_id
1790 };
1791 $.ajax({
1792 url: evf_data.ajax_url,
1793 data: data,
1794 type: 'POST',
1795 beforeSend: function() {
1796 $( document.body ).trigger( 'init_field_options_toggle' );
1797 },
1798 success: function ( response ) {
1799 if ( typeof response.success === 'boolean' && response.success === true ) {
1800 var field_id = response.data.field_id;
1801 var field_key = response.data.field_key;
1802 $('#everest-forms-field-id').val(field_id);
1803 EVFPanelBuilder.render_node(field, element_field_id, field_key);
1804 $( document.body ).trigger( 'init_field_options_toggle' );
1805 }
1806 }
1807 });
1808 },
1809 render_node: function ( field, old_key, new_key ) {
1810 var option = $('.everest-forms-field-options #everest-forms-field-option-' + old_key );
1811 var old_field_label = $('#everest-forms-field-option-' + old_key + '-label' ).val();
1812 var old_field_meta_key = $( '#everest-forms-field-option-' + old_key + '-meta-key' ).length ? $( '#everest-forms-field-option-' + old_key + '-meta-key' ).val() : '';
1813 var field_type = field.attr('data-field-type'),
1814 newOptionHtml = option.html(),
1815 new_field_label = old_field_label + ' ' + evf_data.i18n_copy,
1816 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 ) : '',
1817 newFieldCloned = field.clone();
1818 var regex = new RegExp(old_key, 'g');
1819 newOptionHtml = newOptionHtml.replace(regex, new_key);
1820 var newOption = $('<div class="everest-forms-field-option everest-forms-field-option-' + field_type + '" id="everest-forms-field-option-' + new_key + '" data-field-id="' + new_key + '" />');
1821 newOption.append(newOptionHtml);
1822 $.each(option.find(':input'), function () {
1823 var type = $(this).attr('type');
1824 var name = $( this ).attr( 'name' ) ? $( this ).attr( 'name' ) : '';
1825 var new_name = name.replace(regex, new_key);
1826 var value = '';
1827 if ( type === 'text' || type === 'hidden' ) {
1828 value = $(this).val();
1829 newOption.find('input[name="' + new_name + '"]').val(value);
1830 newOption.find('input[value="' + old_key + '"]').val(new_key);
1831 } else if ( type === 'checkbox' || type === 'radio' ) {
1832 if ( $(this).is(':checked') ) {
1833 newOption.find('input[name="' + new_name + '"]').prop('checked', true).attr('checked', 'checked');
1834 } else {
1835 newOption.find('[name="' + new_name + '"]').prop('checked', false).attr('checked', false);
1836 }
1837 } else if ( $(this).is('select') ) {
1838 if ( $(this).find('option:selected').length ) {
1839 var option_value = $(this).find('option:selected').val();
1840 newOption.find('[name="' + new_name + '"]').find('[value="' + option_value + '"]').prop('selected', true);
1841 }
1842 } else {
1843 if ( $(this).val() !== '' ) {
1844 newOption.find('[name="' + new_name + '"]').val($(this).val());
1845 }
1846 }
1847 });
1848
1849 $('.everest-forms-field-options').append(newOption);
1850 $('#everest-forms-field-option-' + new_key + '-label').val(new_field_label);
1851 $('#everest-forms-field-option-' + new_key + '-meta-key').val(new_meta_key);
1852
1853 // Field Clone
1854 newFieldCloned.attr('class', field.attr('class'));
1855 newFieldCloned.attr('id', 'everest-forms-field-' + new_key);
1856 newFieldCloned.attr('data-field-id', new_key);
1857 newFieldCloned.attr('data-field-type', field_type);
1858 newFieldCloned.find('.label-title .text').text(new_field_label);
1859 field.closest( '.evf-admin-grid' ).find( '[data-field-id="' + old_key + '"]' ).after( newFieldCloned );
1860 $(document).trigger('everest-form-cloned', [ new_key, field_type ] );
1861 EVFPanelBuilder.switchToFieldOptionPanel(new_key);//switch to cloned field options
1862
1863 // Trigger an event indicating completion of render_node action for cloning.
1864 $( document.body ).trigger( 'evf_render_node_complete', [ field_type, new_key, newFieldCloned, newOption ] );
1865 },
1866 bindFieldDelete: function () {
1867 $( 'body' ).on('click', '.everest-forms-preview .everest-forms-field .everest-forms-field-delete', function () {
1868 var $field = $( this ).closest( '.everest-forms-field' );
1869 var field_id = $field.attr('data-field-id');
1870 var option_field = $( '#everest-forms-field-option-' + field_id );
1871 var grid = $( this ).closest( '.evf-admin-grid' );
1872
1873 if ( $field.hasClass( 'no-delete' ) ) {
1874 $.alert({
1875 title: evf_data.i18n_field_locked,
1876 content: evf_data.i18n_field_locked_msg,
1877 icon: 'dashicons dashicons-info',
1878 type: 'blue',
1879 buttons : {
1880 confirm : {
1881 text: evf_data.i18n_close,
1882 btnClass: 'btn-confirm',
1883 keys: ['enter']
1884 }
1885 }
1886 });
1887 } else {
1888 $.confirm({
1889 title: false,
1890 content: evf_data.i18n_delete_field_confirm,
1891 type: 'red',
1892 closeIcon: false,
1893 backgroundDismiss: false,
1894 icon: 'dashicons dashicons-warning',
1895 buttons: {
1896 confirm: {
1897 text: evf_data.i18n_ok,
1898 btnClass: 'btn-confirm',
1899 keys: ['enter'],
1900 action: function () {
1901 $( '.evf-panel-fields-button' ).trigger( 'click' );
1902 $field.fadeOut( 'slow', function () {
1903 var removed_el_id = $field.attr('data-field-id');
1904 $( document.body ).trigger( 'evf_before_field_deleted', [ removed_el_id] );
1905 $field.remove();
1906 option_field.remove();
1907 EVFPanelBuilder.checkEmptyGrid();
1908 $( '.everest-forms-fields-tab' ).find( 'a' ).removeClass( 'active' );
1909 $( '.everest-forms-fields-tab' ).find( 'a' ).first().addClass( 'active' );
1910 $( '.everest-forms-add-fields' ).show();
1911 EVFPanelBuilder.conditionalLogicRemoveField(removed_el_id);
1912 EVFPanelBuilder.conditionalLogicRemoveFieldIntegration(removed_el_id);
1913 EVFPanelBuilder.paymentFieldRemoveFromQuantity(removed_el_id);
1914 });
1915 }
1916 },
1917 cancel: {
1918 text: evf_data.i18n_cancel
1919 }
1920 }
1921 } );
1922 }
1923 });
1924 },
1925 bindFieldDeleteWithKeyEvent: function () {
1926 $( 'body' ).on( 'keyup', function( e ) {
1927 var $field = $( '.everest-forms-preview .everest-forms-field.active' );
1928 if( 46 === e.which && true === $field.hasClass( 'active' ) && false === $field.hasClass( 'evf-delete-event-active' ) ) {
1929 if( false == $( '.evf-admin-row' ).hasClass( 'evf-hover' ) ) {
1930 return;
1931 }
1932 $field.addClass( 'evf-delete-event-active' );
1933 var field_id = $field.attr( 'data-field-id' );
1934 var option_field = $( '#everest-forms-field-option-' + field_id );
1935 if ( $field.hasClass( 'no-delete' ) ) {
1936 $.alert({
1937 title: evf_data.i18n_field_locked,
1938 content: evf_data.i18n_field_locked_msg,
1939 icon: 'dashicons dashicons-info',
1940 type: 'blue',
1941 buttons : {
1942 confirm : {
1943 text: evf_data.i18n_close,
1944 btnClass: 'btn-confirm',
1945 keys: ['enter'],
1946 action: function () {
1947 $field.removeClass( 'evf-delete-event-active' );
1948 }
1949 }
1950 }
1951 });
1952 } else {
1953 $.confirm({
1954 title: false,
1955 content: evf_data.i18n_delete_field_confirm,
1956 type: 'red',
1957 closeIcon: false,
1958 backgroundDismiss: false,
1959 icon: 'dashicons dashicons-warning',
1960 buttons: {
1961 confirm: {
1962 text: evf_data.i18n_ok,
1963 btnClass: 'btn-confirm',
1964 keys: ['enter'],
1965 action: function () {
1966 $( '.evf-panel-fields-button' ).trigger( 'click' );
1967 $field.fadeOut( 'slow', function () {
1968 var removed_el_id = $field.attr('data-field-id');
1969 $( document.body ).trigger( 'evf_before_field_deleted', [ removed_el_id] );
1970 $field.remove();
1971 option_field.remove();
1972 EVFPanelBuilder.checkEmptyGrid();
1973 $( '.everest-forms-fields-tab' ).find( 'a' ).removeClass( 'active' );
1974 $( '.everest-forms-fields-tab' ).find( 'a' ).first().addClass( 'active' );
1975 $( '.everest-forms-add-fields' ).show();
1976 EVFPanelBuilder.conditionalLogicRemoveField(removed_el_id);
1977 EVFPanelBuilder.conditionalLogicRemoveFieldIntegration(removed_el_id);
1978 EVFPanelBuilder.paymentFieldRemoveFromQuantity(removed_el_id);
1979 });
1980 $field.removeClass( 'evf-delete-event-active' );
1981 }
1982 },
1983 cancel: {
1984 text: evf_data.i18n_cancel,
1985 action: function () {
1986 $field.removeClass( 'evf-delete-event-active' );
1987 }
1988 }
1989 }
1990 } );
1991 }
1992 }
1993 });
1994 },
1995 bindSaveOption: function () {
1996 $( 'body' ).on( 'click', '.everest-forms-save-button', function () {
1997 var $this = $( this );
1998 var $form = $( 'form#everest-forms-builder-form' );
1999 var structure = EVFPanelBuilder.getStructure();
2000 var form_data = $form.serializeArray();
2001 var form_title = $( '#evf-edit-form-name' ).val().trim();
2002
2003 // Save form args.
2004 $(document).trigger('everest_forms_save_args', [form_data]);
2005
2006 if ( '' === form_title ) {
2007 $.alert({
2008 title: evf_data.i18n_field_title_empty,
2009 content: evf_data.i18n_field_title_payload,
2010 icon: 'dashicons dashicons-warning',
2011 type: 'red',
2012 buttons: {
2013 ok: {
2014 text: evf_data.i18n_ok,
2015 btnClass: 'btn-confirm',
2016 keys: [ 'enter' ]
2017 }
2018 }
2019 });
2020 return;
2021 }
2022
2023 // Trigger a handler to let addon manipulate the form data if needed.
2024 if ( $form.triggerHandler( 'everest_forms_process_ajax_data', [ $this, form_data ] ) ) {
2025 form_data = $form.triggerHandler( 'everest_forms_process_ajax_data', [ $this, form_data ] );
2026 }
2027
2028 $( '.everest-forms-panel-content-wrap' ).block({
2029 message: null,
2030 overlayCSS: {
2031 background: '#fff',
2032 opacity: 0.6
2033 }
2034 });
2035
2036 /* DB unwanted data erase start */
2037 var rfields_ids = [];
2038 $( '.everest-forms-field[data-field-id]' ).each( function() {
2039 rfields_ids.push( $( this ).attr( 'data-field-id' ) );
2040 });
2041
2042 var form_data_length = form_data.length;
2043 while ( form_data_length-- ) {
2044 if ( form_data[ form_data_length ].name.startsWith( 'form_fields' ) ) {
2045 var idflag = false;
2046 rfields_ids.forEach( function( element ) {
2047 if ( form_data[ form_data_length ].name.startsWith( 'form_fields[' + element + ']' ) ) {
2048 idflag = true;
2049 }
2050 });
2051 if ( form_data_length > -1 && idflag === false ) {
2052 form_data.splice( form_data_length, 1 );
2053 }
2054 }
2055 }
2056 /* DB fix end */
2057
2058 var new_form_data = form_data.concat( structure );
2059 var data = {
2060 action: 'everest_forms_save_form',
2061 security: evf_data.evf_save_form,
2062 form_data: JSON.stringify( new_form_data )
2063 };
2064 $.ajax({
2065 url: evf_data.ajax_url,
2066 data: data,
2067 type: 'POST',
2068 beforeSend: function () {
2069 $this.addClass( 'processing' );
2070 $this.find( '.loading-dot' ).remove();
2071 $this.append( '<span class="loading-dot"></span>' );
2072 },
2073 success: function ( response ) {
2074 $this.removeClass( 'processing' );
2075 $this.find( '.loading-dot' ).remove();
2076
2077 //Response data of ajax.
2078 $(document).trigger('everest_forms_save_data',response.data);
2079
2080 if ( ! response.success ) {
2081 $.alert({
2082 title: response.data.errorTitle,
2083 content: response.data.errorMessage,
2084 icon: 'dashicons dashicons-warning',
2085 type: 'red',
2086 buttons: {
2087 ok: {
2088 text: evf_data.i18n_ok,
2089 btnClass: 'btn-confirm',
2090 keys: [ 'enter' ]
2091 }
2092 }
2093 });
2094 }
2095
2096 $( '.everest-forms-panel-content-wrap' ).unblock();
2097 }
2098 });
2099 });
2100 },
2101 bindSaveOptionWithKeyEvent:function() {
2102 $('body').on("keydown", function (e) {
2103 if (e.ctrlKey || e.metaKey) {
2104 if (
2105 "s" ===
2106 String.fromCharCode(e.which).toLowerCase() || 83 === e.which
2107 ) {
2108 e.preventDefault();
2109 $('.everest-forms-save-button').trigger('click');
2110 }
2111 }
2112 });
2113 },
2114 bindOpenShortcutKeysModalWithKeyEvent: function() {
2115 $('body').on("keydown", function (e) {
2116 if ( e.ctrlKey || e.metaKey ) {
2117 if( 'h' === String.fromCharCode(e.which).toLowerCase() || 72 === e.which ) {
2118 e.preventDefault();
2119 var shortcut_keys_html = '';
2120
2121 $.each(evf_data.i18n_shortcut_keys, function (key, value) {
2122 shortcut_keys_html += `
2123 <ul class="evf-shortcut-keyword">
2124 <li>
2125 <div class="evf-shortcut-title">${value}</div>
2126 <div class="evf-key">
2127 <span>${key.split('+')[0]}</span>
2128 <span>${key.split('+')[1]}</span>
2129 </div>
2130 </li>
2131 </ul>
2132 `;
2133 });
2134
2135 $.alert({
2136 title: evf_data.i18n_shortcut_key_title,
2137 content: shortcut_keys_html,
2138 icon: 'dashicons dashicons-info',
2139 type: 'blue',
2140 boxWidth: '550px',
2141 buttons : {
2142 confirm : {
2143 text: evf_data.i18n_close,
2144 btnClass: 'btn-confirm',
2145 keys: ['enter']
2146 }
2147 },
2148 onContentReady: function(){
2149 $('body').on("keydown", function (e) {
2150 if( e.ctrlKey || e.metaKey && 'h' === String.fromCharCode(e.which).toLowerCase() || 72 === e.which ) {
2151 $( '.btn-confirm' ).trigger( 'click' );
2152 }
2153 });
2154 }
2155 });
2156 }
2157 }
2158 });
2159 },
2160 getStructure: function () {
2161 var wrapper = $( '.evf-admin-field-wrapper' );
2162 var structure = [];
2163
2164 $.each( wrapper.find( '.evf-admin-row' ), function() {
2165 var $row = $( this ),
2166 row_id = $row.attr( 'data-row-id' );
2167
2168 $.each( $row.find( '.evf-admin-grid' ), function() {
2169 var $grid = $( this ),
2170 grid_id = $grid.attr( 'data-grid-id' );
2171
2172 var array_index = 0;
2173 $.each( $grid.find( '.everest-forms-field' ), function() {
2174 var structure_object = { name: '', value: '' };
2175 var field_id = $( this ).attr( 'data-field-id' );
2176 structure_object.name = 'structure[row_' + row_id + '][grid_' + grid_id + '][' + array_index + ']';
2177 array_index++;
2178 structure_object.value = field_id;
2179 structure.push( structure_object );
2180 });
2181 if ( $grid.find( '.everest-forms-field' ).length < 1 ) {
2182 structure.push({ name: 'structure[row_' + row_id + '][grid_' + grid_id + ']', value: '' });
2183 }
2184 });
2185 });
2186
2187 return structure;
2188 },
2189 getFieldArray: function ( grid ) {
2190
2191 var fields = [];
2192 $.each(grid.find('.everest-forms-field'), function () {
2193
2194 var field_id = $(this).attr('data-field-id');
2195 fields.push(field_id);
2196 });
2197 return fields;
2198 },
2199 checkEmptyGrid: function( $force ) {
2200 $.each( $( '.evf-admin-grid' ), function () {
2201 var $fields = $( this ).find( '.everest-forms-field, .evf-registered-item:not(.ui-draggable-dragging)' );
2202 if ( $fields.not( '.ui-sortable-helper' ).length < 1 ) {
2203 $( this ).addClass( 'evf-empty-grid' );
2204 } else {
2205 $( this ).removeClass( 'evf-empty-grid' );
2206 }
2207 } );
2208 EVFPanelBuilder.choicesInit();
2209 },
2210 bindDefaultTabs: function () {
2211 $( document ).on( 'click', '.evf-nav-tab-wrapper a', function ( e ) {
2212 e.preventDefault();
2213 EVFPanelBuilder.switchTab( $( this ).data( 'panel' ) );
2214 });
2215 },
2216 switchTab: function( panel ) {
2217 var $panel = $( '#everest-forms-panel-' + panel ),
2218 $panelBtn = $( '.evf-panel-' + panel + '-button' );
2219
2220 $( '.evf-nav-tab-wrapper' ).find( 'a' ).removeClass( 'nav-tab-active' );
2221 $panelBtn.addClass( 'nav-tab-active' );
2222 $panel.closest( '.evf-tab-content' ).find( '.everest-forms-panel' ).removeClass( 'active' );
2223 $panel.addClass( 'active' );
2224
2225 if ( 'integrations' === panel || 'payments' === panel ) {
2226 if ( ! $panel.find( '.everest-forms-panel-sidebar a' ).hasClass( 'active' ) ) {
2227 $panel.find( '.everest-forms-panel-sidebar a' ).first().addClass( 'active' );
2228 }
2229
2230 if ( ! $( '.everest-forms-panel-content' ).find( '.evf-panel-content-section' ).hasClass( 'active' ) ) {
2231 $( '.everest-forms-panel-content' ).find( '.evf-panel-content-section' ).first().addClass( 'active' );
2232 }
2233 }
2234
2235 history.replaceState({}, null, EVFPanelBuilder.updateQueryString( 'tab', panel ) );
2236 EVFPanelBuilder.switchPanel(panel);
2237 },
2238 updateQueryString: function ( key, value, url ) {
2239 if ( ! url ) url = window.location.href;
2240 var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"),
2241 hash;
2242
2243 if ( re.test( url ) ) {
2244 if ( typeof value !== 'undefined' && value !== null )
2245 return url.replace(re, '$1' + key + "=" + value + '$2$3');
2246 else {
2247 hash = url.split('#');
2248 url = hash[ 0 ].replace(re, '$1$3').replace(/(&|\?)$/, '');
2249 if ( typeof hash[ 1 ] !== 'undefined' && hash[ 1 ] !== null )
2250 url += '#' + hash[ 1 ];
2251 return url;
2252 }
2253 } else {
2254 if ( typeof value !== 'undefined' && value !== null ) {
2255 var separator = url.indexOf('?') !== -1 ? '&' : '?';
2256 hash = url.split('#');
2257 url = hash[ 0 ] + separator + key + '=' + value;
2258 if ( typeof hash[ 1 ] !== 'undefined' && hash[ 1 ] !== null )
2259 url += '#' + hash[ 1 ];
2260 return url;
2261 } else {
2262 return url;
2263 }
2264 }
2265 },
2266 switchPanel: function ( panel ) {
2267 if ( panel === 'field-options' ) {
2268 EVFPanelBuilder.switchToFieldOptionPanel();
2269 }
2270 },
2271 switchToFieldOptionPanel: function ( field_id ) {
2272 $('.everest-forms-field-options').find('.no-fields').hide();
2273 $('.evf-admin-field-wrapper .everest-forms-field').removeClass('active');
2274 $('#everest-forms-panel-fields').addClass('active');
2275 $('.everest-forms-fields-tab').find('a').removeClass('active');
2276 $('.everest-forms-fields-tab').find('a').last().addClass('active');
2277 $('.everest-forms-add-fields').hide();
2278 $('.everest-forms-field-options').show();
2279 $('.everest-forms-field-options').find('.everest-forms-field-option').hide();
2280 $('.evf-tab-lists').find('li a').removeClass('active');
2281 $('.evf-tab-lists').find('li.evf-panel-field-options-button a').addClass('active');
2282
2283 $( document.body ).trigger( 'evf-init-switch-field-options' );
2284
2285 if ( typeof field_id !== 'undefined' ) {
2286 $('#everest-forms-field-option-' + field_id).show();
2287 $('#everest-forms-field-' + field_id).addClass('active');
2288 } else {
2289 if ( $('.evf-admin-field-wrapper .everest-forms-field').length > 0 ) {
2290 $('.evf-admin-field-wrapper .everest-forms-field').eq(0).addClass('active');
2291 $('#everest-forms-field-option-' + $('.evf-admin-field-wrapper .everest-forms-field').eq(0).attr('data-field-id')).show();
2292 } else {
2293 $('.everest-forms-field-options').find('.no-fields').show();
2294 }
2295 }
2296 },
2297 bindFields: function () {
2298 $( '.evf-admin-field-wrapper' ).sortable({
2299 items: '.evf-admin-row',
2300 axis: 'y',
2301 cursor: 'move',
2302 opacity: 0.65,
2303 scrollSensitivity: 40,
2304 forcePlaceholderSize: true,
2305 placeholder: 'evf-sortable-placeholder',
2306 containment: '.everest-forms-panel-content',
2307 start: function( event, ui ) {
2308 ui.item.css({
2309 'backgroundColor': '#f7fafc',
2310 'border': '1px dashed #5d96ee'
2311 });
2312 },
2313 stop: function( event, ui ) {
2314 ui.item.removeAttr( 'style' );
2315 }
2316 }).disableSelection();
2317
2318 $( '.evf-admin-grid' ).sortable({
2319 items: '> .everest-forms-field[data-field-type!="repeater-fields"]',
2320 delay : 100,
2321 opacity: 0.65,
2322 cursor: 'move',
2323 scrollSensitivity: 40,
2324 forcePlaceholderSize: true,
2325 connectWith: '.evf-admin-grid',
2326 appendTo: document.body,
2327 containment: '.everest-forms-field-wrap',
2328
2329 out: function( event ) {
2330 $( '.evf-admin-grid' ).removeClass( 'evf-hover' );
2331 $( event.target ).removeClass( 'evf-item-hover' );
2332 $( event.target ).closest( '.evf-admin-row' ).removeClass( 'evf-hover' );
2333 EVFPanelBuilder.checkEmptyGrid();
2334 },
2335 over: function( event, ui ) {
2336 $( '.evf-admin-grid' ).addClass( 'evf-hover' );
2337 $( event.target ).addClass( 'evf-item-hover' );
2338 $( event.target ).closest( '.evf-admin-row' ).addClass( 'evf-hover' );
2339 EVFPanelBuilder.checkEmptyGrid();
2340 },
2341 receive: function( event, ui ) {
2342 if ( ui.sender.is( 'button' ) ) {
2343 EVFPanelBuilder.fieldDrop( ui.helper );
2344 }
2345 },
2346 update: function(event, ui) {
2347 $(document).trigger('evf_sort_update_complete',{event: event,ui: ui});
2348 },
2349 stop: function( event, ui ) {
2350 ui.item.removeAttr( 'style' );
2351 EVFPanelBuilder.checkEmptyGrid();
2352 }
2353 }).disableSelection();
2354
2355 $( '.evf-registered-buttons button.evf-registered-item' ).draggable({
2356 delay: 200,
2357 cancel: false,
2358 scroll: false,
2359 revert: 'invalid',
2360 scrollSensitivity: 40,
2361 forcePlaceholderSize: true,
2362 start: function() {
2363 $( this ).addClass( 'field-dragged' );
2364 },
2365 helper: function() {
2366 return $( this ).clone().insertAfter( $( this ).closest( '.everest-forms-tab-content' ).siblings( '.everest-forms-fields-tab' ) );
2367 },
2368 stop: function() {
2369 $( this ).removeClass( 'field-dragged' );
2370 },
2371 opacity: 0.75,
2372 containment: '#everest-forms-builder',
2373 connectToSortable: '.evf-admin-grid'
2374 }).disableSelection();
2375
2376 // Repeatable grid connect to sortable setter.
2377 $( ".evf-registered-item.evf-repeater-field" ).draggable( "option", "connectToSortable", ".evf-repeatable-grid" );
2378
2379 // Adapt hover behaviour on mouse event.
2380 $( '.evf-admin-row' ).on( 'mouseenter mouseleave', function( event ) {
2381 if ( 1 > event.buttons ) {
2382 if ( 'mouseenter' === event.type ) {
2383 $( this ).addClass( 'evf-hover' );
2384 } else {
2385 $( '.evf-admin-row' ).removeClass( 'evf-hover' );
2386 }
2387 }
2388 } );
2389
2390 // Refresh the position of placeholders on drag scroll.
2391 $( '.everest-forms-panel-content' ).on( 'scroll', function() {
2392 $( '.evf-admin-grid' ).sortable( 'refreshPositions' );
2393 $( '.evf-admin-field-wrapper' ).sortable( 'refreshPositions' );
2394 } );
2395 },
2396
2397 /**
2398 * Toggle fields tabs (Add Fields, Field Options).
2399 */
2400 fieldTabChoice: function( id ) {
2401 $( '.everest-forms-tab-content' ).scrollTop(0);
2402 $( '.everest-forms-fields-tab a' ).removeClass( 'active' );
2403 $( '.everest-forms-field, .everest-forms-title-desc' ).removeClass( 'active' );
2404
2405 $( '#' + id ).addClass( 'active' );
2406
2407 if ( 'add-fields' === id ) {
2408 $( '.everest-forms-add-fields' ).show();
2409 $( '.everest-forms-field-options' ).hide();
2410 } else {
2411 if ( 'field-options' === id ) {
2412 id = $( '.everest-forms-field' ).first().data( 'field-id' );
2413 $( '.everest-forms-field-options' ).show();
2414 $( '.everest-forms-field' ).first().addClass( 'active' );
2415 } else {
2416 $( '#everest-forms-field-' + id ).addClass( 'active' );
2417 }
2418 $( '.everest-forms-field-option' ).hide();
2419 $( '#everest-forms-field-option-' + id ).show();
2420 $( '.everest-forms-add-fields' ).hide();
2421 }
2422 },
2423 bindFormPreview: function () {},
2424 bindFormPreviewWithKeyEvent:function (){
2425 $( 'body' ).on( 'keydown', function( e ) {
2426 if (e.ctrlKey || e.metaKey) {
2427 if ( (
2428 "p" ===
2429 String.fromCharCode(e.which).toLowerCase() || 80 === e.which )
2430 ) {
2431 e.preventDefault();
2432 window.open( evf_data.preview_url );
2433 }
2434 }
2435
2436 });
2437 },
2438 bindFormEntriesWithKeyEvent:function (){
2439 $( 'body' ).on( 'keydown', function( e ) {
2440 if (e.ctrlKey || e.metaKey) {
2441 if ( (
2442 "e" ===
2443 String.fromCharCode(e.which).toLowerCase() || 69 === e.which )
2444 ) {
2445 e.preventDefault();
2446 window.open( evf_data.entries_url );
2447 }
2448 }
2449
2450 });
2451 },
2452 bindGridSwitcher: function () {
2453 $('body').on('click', '.evf-show-grid', function (e) {
2454 e.stopPropagation();
2455 EVFPanelBuilder.checkEmptyGrid();
2456 $(this).closest('.evf-toggle-row').find('.evf-toggle-row-content').stop(true).slideToggle(200);
2457 });
2458 $(document).on( 'click', function () {
2459 EVFPanelBuilder.checkEmptyGrid();
2460 $('.evf-show-grid').closest('.evf-toggle-row').find('.evf-toggle-row-content').stop(true).slideUp(200);
2461 });
2462 var max_number_of_grid = 4;
2463 $('body').on('click', '.evf-grid-selector', function () {
2464 var $this_single_row = $(this).closest('.evf-admin-row');
2465 if ( $(this).hasClass('active') ) {
2466 return;
2467 }
2468 var grid_id = parseInt( $( this ).attr( 'data-evf-grid' ), 10 );
2469 if ( grid_id > max_number_of_grid ) {
2470 return;
2471 }
2472
2473 var grid_node = $('<div class="evf-admin-grid evf-grid-' + grid_id + ' ui-sortable evf-empty-grid" />');
2474 var grids = $('<div/>');
2475
2476 $.each($this_single_row.find('.evf-admin-grid'), function () {
2477 $(this).children('*').each(function () {
2478 grids.append($(this).clone()); // "this" is the current element in the loop
2479 });
2480 });
2481 $this_single_row.find('.evf-admin-grid').remove();
2482 $this_single_row.find('.evf-clear ').remove();
2483 $this_single_row.append('<div class="clear evf-clear"></div>');
2484
2485 for ( var $grid_number = 1; $grid_number <= grid_id; $grid_number++ ) {
2486
2487 grid_node.attr('data-grid-id', $grid_number);
2488 $this_single_row.append(grid_node.clone());
2489
2490 }
2491 $this_single_row.append('<div class="clear evf-clear"></div>');
2492 $this_single_row.find('.evf-admin-grid').eq(0).append(grids.html());
2493 $this_single_row.find('.evf-grid-selector').removeClass('active');
2494 $(this).addClass('active');
2495 EVFPanelBuilder.bindFields();
2496 });
2497 },
2498 fieldDrop: function ( field ) {
2499 var field_type = field.attr( 'data-field-type' );
2500 var invalid_fields = ["payment-total"];
2501 if (
2502 invalid_fields.includes(
2503 field_type
2504 ) && field.closest('.evf-admin-row').hasClass('evf-repeater-fields')
2505 ) {
2506 $.confirm({
2507 title: false,
2508 content:'This field cannot be added to Repeater Fields',
2509 type: 'red',
2510 closeIcon: false,
2511 backgroundDismiss: false,
2512 icon: 'dashicons dashicons-warning',
2513 buttons: {
2514 cancel: {
2515 text: evf_data.i18n_close,
2516 btnClass: 'btn-default',
2517 },
2518 }
2519 } );
2520
2521 field.remove();
2522 return false;
2523 }
2524
2525 field.css({
2526 'left': '0',
2527 'width': '100%'
2528 }).append( '<i class="spinner is-active"></i>' );
2529
2530 $.ajax({
2531 url: evf_data.ajax_url,
2532 type: 'POST',
2533 data: {
2534 action: 'everest_forms_new_field_' + field_type,
2535 security: evf_data.evf_field_drop_nonce,
2536 field_type: field_type,
2537 form_id: evf_data.form_id
2538 },
2539 beforeSend: function() {
2540 $( document.body ).trigger( 'init_field_options_toggle' );
2541 },
2542 success: function( response ) {
2543 var field_preview = response.data.preview,
2544 field_options = response.data.options,
2545 form_field_id = response.data.form_field_id,
2546 field_type = response.data.field.type,
2547 dragged_el_id = $( field_preview ).attr( 'id' ),
2548 dragged_field_id = $( field_preview ).attr( 'data-field-id' );
2549
2550 $( '#everest-forms-field-id' ).val( form_field_id );
2551 $( '.everest-forms-field-options' ).find( '.no-fields' ).hide();
2552 $( '.everest-forms-field-options' ).append( field_options );
2553 $( '.everest-forms-field-option-row-icon_color input.colorpicker' ).wpColorPicker({
2554 change: function( event ) {
2555 var $this = $( this ),
2556 value = $this.val(),
2557 field_id = $this.closest( '.everest-forms-field-option-row' ).data( 'field-id' );
2558
2559 $( '#everest-forms-field-' + field_id + ' .rating-icon svg' ).css( 'fill', value );
2560 }
2561 });
2562
2563 field.after( field_preview );
2564
2565 if ( null !== $( '#everest-forms-panel-field-settings-enable_survey') && $( '#everest-forms-panel-field-settings-enable_survey' ).prop( 'checked' ) ) {
2566 $( '#everest-forms-field-option-' + dragged_field_id + '-survey_status' ).prop( 'checked', true );
2567 }
2568
2569 if ( null !== $( '#everest-forms-panel-field-settings-enable_quiz' ) && $( '#everest-forms-panel-field-settings-enable_quiz' ).prop( 'checked' ) ) {
2570 $( '#everest-forms-field-option-' + dragged_field_id + '-quiz_status' ).prop( 'checked', true );
2571 $( '#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' );
2572 }
2573
2574 field.remove();
2575
2576 // Triggers.
2577 $( document.body ).trigger( 'init_tooltips' );
2578 $( document.body ).trigger( 'init_field_options_toggle' );
2579 $( document.body ).trigger( 'evf_after_field_append', [dragged_el_id] );
2580
2581 // Conditional logic append rules.
2582 EVFPanelBuilder.conditionalLogicAppendField( dragged_el_id );
2583 EVFPanelBuilder.conditionalLogicAppendFieldIntegration( dragged_el_id );
2584 EVFPanelBuilder.paymentFieldAppendToQuantity( dragged_el_id );
2585 EVFPanelBuilder.paymentFieldAppendToDropdown( dragged_field_id, field_type );
2586
2587 // Initialization Datepickers.
2588 EVFPanelBuilder.init_datepickers();
2589
2590 // Hiding time min max options in setting for Datepickers.
2591 $('#everest-forms-field-option-' + dragged_field_id + '-enable_min_max_time').hide();
2592 $('label[for=everest-forms-field-option-' + dragged_field_id + '-enable_min_max_time]').hide();
2593 $('label[for=everest-forms-field-option-' + dragged_field_id + '-select_min_time]').hide();
2594 $('label[for=everest-forms-field-option-' + dragged_field_id + '-select_max_time]').hide();
2595 $('#everest-forms-field-option-' + dragged_field_id + '-min_time_hour').parent().hide();
2596 $('#everest-forms-field-option-' + dragged_field_id + '-max_time_hour').parent().hide();
2597
2598 // Trigger an event indicating completion of field_drop action.
2599 $( document.body ).trigger( 'evf_field_drop_complete', [ field_type, dragged_field_id, field_preview, field_options ] );
2600 EVFPanelBuilder.checkEmptyGrid();
2601 }
2602 });
2603 },
2604
2605 conditionalLogicAppendField: function( id ){
2606 var dragged_el = $('#' + id);
2607 var dragged_index = dragged_el.index();
2608
2609 var fields = $('.evf-field-conditional-field-select');
2610
2611 var field_type = dragged_el.attr( 'data-field-type' );
2612 var field_id = dragged_el.attr( 'data-field-id' );
2613 var field_label = dragged_el.find( '.label-title .text ' ).text();
2614
2615 $.fn.insertAt = function(elements, index, selected_id ) {
2616 var array = $.makeArray(this.children().clone(true));
2617 array.splice(index, 0, elements);
2618 $.each( array, function( index, el ) {
2619 if( selected_id === $( el )[0]['value'] ) {
2620 $( el )[0]['selected'] = true;
2621 array[ index ] = el;
2622 }
2623 } );
2624 this.empty().append(array);
2625 };
2626 var dragged_field_id = field_id;
2627 fields.each(function(index, el) {
2628 var selected_id = $( el ).val();
2629 var id_key = id.replace('everest-forms-field-', '');
2630 var name = $(el).attr('name');
2631 var name_key = name.substring(
2632 name.indexOf("[") + 1,
2633 name.indexOf("]")
2634 );
2635
2636 if (id_key === name_key) {
2637 $('.evf-admin-row .evf-admin-grid .everest-forms-field').each( function(){
2638 var form_field_type = $( this ).data('field-type'),
2639 form_field_id = $( this ).data('field-id'),
2640 form_field_label = $( this ).find('.label-title span').first().text();
2641 field_to_be_restricted =[];
2642 field_to_be_restricted = [
2643 'html',
2644 'title',
2645 'address',
2646 'image-upload',
2647 'file-upload',
2648 'date-time',
2649 'hidden',
2650 'scale-rating',
2651 'likert',
2652 'yes-no',
2653 ];
2654 if( $.inArray( form_field_type, field_to_be_restricted ) === -1 && dragged_field_id !== form_field_id ){
2655 if( 0 === fields.eq(index).find( 'option[data-field_id="'+form_field_id+'"]' ).length ) {
2656 fields.eq(index).append('<option class="evf-conditional-fields" data-field_type="'+form_field_type+'" data-field_id="'+form_field_id+'" value="'+form_field_id+'">'+form_field_label+'</option>');
2657 }
2658 }
2659 });
2660 } else {
2661 var el_to_append = '<option class="evf-conditional-fields" data-field_type="'+field_type+'" data-field_id="'+field_id+'" value="'+field_id+'">'+field_label+'</option>';
2662 if (
2663 "html" !== field_type &&
2664 "title" !== field_type &&
2665 "address" !== field_type &&
2666 "image-upload" !== field_type &&
2667 "file-upload" !== field_type &&
2668 "date-time" !== field_type &&
2669 "hidden" !== field_type &&
2670 "likert" !== field_type &&
2671 "scale-rating" !== field_type &&
2672 "yes-no" !== field_type &&
2673 "divider" !== field_type
2674 ) {
2675 fields
2676 .eq(index)
2677 .insertAt(el_to_append, dragged_index, selected_id);
2678 }
2679 }
2680 if( fields.eq( index ).find( 'option:not(.evf-conditional-fields)').length > 1 ) {
2681 fields.eq( index ).find( 'option:not(.evf-conditional-fields):gt(0)').remove();
2682 }
2683 });
2684 },
2685 conditionalLogicAppendRow: function( id ){
2686
2687 var new_row_option = $('#everest-forms-row-option-row_' + id);
2688
2689 var fields = $( '.everest-forms-field' );
2690
2691 fields.each( function() {
2692 var field = $(this),
2693 field_id = field.attr( 'data-field-id' ),
2694 field_type = field.attr( 'data-field-type' ),
2695 field_label = '';
2696
2697
2698 field.find( '.required').remove()
2699 field_label = field.find( '.label-title').html();
2700
2701 var el_to_append = '<option class="evf-conditional-fields" data-field_type="'+field_type+'" data-field_id="'+field_id+'" value="'+field_id+'">'+field_label+'</option>';
2702
2703 if (
2704 0 ===
2705 $(document).find(
2706 '.evf-admin-row[data-row-id="' +
2707 id +
2708 '"] #everest-forms-field-' +
2709 field_id
2710 ).length &&
2711 0 ===
2712 new_row_option.find(
2713 '.evf-field-conditional-field-select option[data-field_id="' +
2714 field_id +
2715 '"]'
2716 ).length &&
2717 "html" !== field_type &&
2718 "title" !== field_type &&
2719 "address" !== field_type &&
2720 "image-upload" !== field_type &&
2721 "file-upload" !== field_type &&
2722 "date-time" !== field_type &&
2723 "hidden" !== field_type &&
2724 "likert" !== field_type &&
2725 "scale-rating" !== field_type &&
2726 "divider" !== field_type
2727 ) {
2728 new_row_option
2729 .find(".evf-field-conditional-field-select")
2730 .append(el_to_append);
2731 }
2732 if( new_row_option.find( '.evf-field-conditional-field-select option:not(.evf-conditional-fields)').length > 1 ) {
2733 new_row_option.find( '.evf-field-conditional-field-select option:not(.evf-conditional-fields):gt(0)').remove();
2734 }
2735 })
2736 },
2737
2738 paymentFieldAppendToQuantity: function( id ) {
2739 var dragged_el = $( '#' + id );
2740
2741 var fields = $( '.everest-forms-field-option-row-map_field select' );
2742 var field_type = dragged_el.attr( 'data-field-type' );
2743 var field_id = dragged_el.attr( 'data-field-id' );
2744 var field_label = dragged_el.find( '.label-title .text ' ).text();
2745
2746 var el_to_append = '<option value="'+field_id+'">'+field_label+'</option>';
2747 if( 'payment-single' === field_type || 'payment-multiple' === field_type || 'payment-checkbox' === field_type ) {
2748 fields.append( el_to_append );
2749 }
2750 },
2751
2752 paymentFieldAppendToDropdown: function( dragged_field_id, field_type ){
2753 if('payment-quantity' === field_type || 'payment-coupon' === field_type || 'payment-subtotal' === field_type ) {
2754 var match_fields = [ 'payment-checkbox', 'payment-multiple', 'payment-single', 'range-slider' ],
2755 qty_dropdown = $('#everest-forms-field-option-' + dragged_field_id + '-map_field');
2756 match_fields.forEach(function(single_field){
2757 $('.everest-forms-field-'+single_field).each(function(){
2758 if( 'range-slider' === $(this).attr('data-field-type')) {
2759 if('true' === ($(this).find('.evf-range-slider-preview').attr('data-enable-payment-slider'))) {
2760 var id = $(this).attr('data-field-id'),
2761 label = $(this).find( ".label-title .text" ).text();
2762 var el_to_append = '<option value="'+id+'">'+label+'</option>';
2763 }else{
2764 return;
2765 }
2766 }
2767 var id = $(this).attr('data-field-id'),
2768 label = $(this).find( ".label-title .text" ).text();
2769 var el_to_append = '<option value="'+id+'">'+label+'</option>';
2770 qty_dropdown.append( el_to_append );
2771 });
2772 });
2773 }
2774 },
2775
2776 conditionalLogicAppendFieldIntegration: function( id ){
2777 var dragged_el = $('#' + id);
2778 var dragged_index = dragged_el.index();
2779
2780 var fields = $( '.evf-provider-conditional' ).find('.evf-conditional-field-select');
2781
2782 var field_type = dragged_el.attr( 'data-field-type' );
2783 var field_id = dragged_el.attr( 'data-field-id' );
2784 var field_label = dragged_el.find( '.label-title .text ' ).text();
2785
2786 $.fn.insertAt = function(elements, index) {
2787 var array = $.makeArray(this.children().clone(true));
2788 array.splice(index, 0, elements);
2789 this.empty().append(array);
2790 };
2791
2792 fields.each(function(index, el) {
2793 var id_key = id.replace('everest-forms-field-', '');
2794 var name = $(el).attr('name');
2795 var name_key = name.substring(
2796 name.indexOf("[") + 1,
2797 name.indexOf("]")
2798 );
2799
2800 if (id_key === name_key) {
2801 $('.evf-admin-row .evf-admin-grid .everest-forms-field').each( function(){
2802 var field_type = $( this ).data('field-type'),
2803 field_id = $( this ).data('field-id'),
2804 field_label = $( this ).find('.label-title span').first().text();
2805 field_to_be_restricted =[];
2806 field_to_be_restricted = [
2807 "html",
2808 "title",
2809 "address",
2810 "image-upload",
2811 "file-upload",
2812 "signature",
2813 "divider",
2814 "date-time",
2815 "hidden",
2816 "scale-rating",
2817 "likert",
2818 "yes-no",
2819 dragged_el.attr("data-field-type"),
2820 ];
2821
2822 if( $.inArray( field_type, field_to_be_restricted ) === -1 ){
2823 fields.eq(index).append('<option class="evf-conditional-fields" data-field_type="'+field_type+'" data-field_id="'+field_id+'" value="'+field_id+'">'+field_label+'</option>');
2824 }
2825 });
2826 } else {
2827 var el_to_append = '<option class="evf-conditional-fields" data-field_type="'+field_type+'" data-field_id="'+field_id+'" value="'+field_id+'">'+field_label+'</option>';
2828 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 ) {
2829 fields.eq(index).insertAt( el_to_append, dragged_index );
2830 }
2831 }
2832 });
2833 },
2834
2835 conditionalLogicRemoveField: function( id ){
2836 $( '.evf-field-conditional-field-select option[value = ' +id +' ]' ).remove();
2837 },
2838
2839 conditionalLogicRemoveFieldIntegration: function( id ){
2840 $( '.evf-provider-conditional .evf-conditional-field-select option[value = ' +id +' ]' ).remove();
2841 },
2842
2843 paymentFieldRemoveFromQuantity: function( id ) {
2844 $('.everest-forms-field-option-row-map_field select option[value = ' +id +' ]').remove();
2845 },
2846
2847 bindFieldSettings: function () {
2848 $( 'body' ).on( 'click', '.everest-forms-preview .everest-forms-field, .everest-forms-preview .everest-forms-field .everest-forms-field-setting', function(e) {
2849 e.preventDefault();
2850 var field_id = $( this ).closest( '.everest-forms-field' ).attr( 'data-field-id' );
2851 $( '.everest-forms-tab-content' ).scrollTop(0);
2852 EVFPanelBuilder.switchToFieldOptionPanel( field_id );
2853 } );
2854 },
2855
2856 toggleLabelEdit: function( label, input ) {
2857 $( label ).toggleClass( 'everest-forms-hidden' );
2858 $( input ).toggleClass( 'everest-forms-hidden' );
2859
2860 if ( $( input ).is( ':visible' ) ) {
2861 $( input ).focus();
2862 }
2863 },
2864
2865 bindToggleHandleActions: function () {
2866 $( 'body' ).on( 'click', '.toggle-handle', function ( e ) {
2867 var label = $( this ).data( 'label' ),
2868 input = $( this ).data( 'input' );
2869
2870 if ( ! $( input ).is(':visible') ) {
2871 EVFPanelBuilder.toggleLabelEdit( label, input );
2872 }
2873 });
2874 },
2875
2876 bindLabelEditInputActions: function () {
2877 $( 'body' ).on( 'focusout', '.label-edit-input', function ( e ) {
2878 var label = $( this ).data( 'label' ),
2879 input = this;
2880
2881 EVFPanelBuilder.toggleLabelEdit( label, input );
2882 });
2883 },
2884
2885 /**
2886 * Sync an input element with other elements like labels. An element with `sync-input` class will be synced to the elements
2887 * specified in `sync-targets` data.
2888 *
2889 * `Warning:` This is an one way sync, meaning only the text `sync-targets` will be updated when the source element's value changes
2890 * and the source element's value will not be updated if the value of `sync-targets` changes.
2891 */
2892 bindSyncedInputActions: function () {
2893 $( 'body' ).on( 'input', '.sync-input', function ( e ) {
2894 var changed_value = $( this ).val(),
2895 sync_targets = $( this ).data( 'sync-targets' );
2896
2897 if ( changed_value && sync_targets ) {
2898 $( sync_targets ).text( changed_value );
2899 }
2900 });
2901 }
2902 };
2903
2904 EVFPanelBuilder.init();
2905 })(jQuery, window.evf_data);
2906
2907 jQuery(function () {
2908
2909 if ( jQuery('#everest-forms-panel-field-settingsemail-evf_send_confirmation_email').attr("checked") != 'checked' ) {
2910 jQuery('#everest-forms-panel-field-settingsemail-evf_send_confirmation_email-wrap').nextAll().hide();
2911 }
2912
2913 jQuery( '#everest-forms-panel-field-settingsemail-evf_send_confirmation_email' ).on( 'change', function () {
2914
2915 if ( jQuery( this ).attr('checked') != 'checked') {
2916 jQuery('#everest-forms-panel-field-settingsemail-evf_send_confirmation_email-wrap').nextAll().hide();
2917 } else {
2918 jQuery('#everest-forms-panel-field-settingsemail-evf_send_confirmation_email-wrap').nextAll().show();
2919 }
2920 });
2921
2922 // Query String Toogle.
2923 jQuery( '#everest-forms-panel-field-settings-enable_redirect_query_string-wrap input' ).on( 'change', function () {
2924 var $this = jQuery( this );
2925 if ( ! $this.is( ':checked' ) ) {
2926 jQuery('#everest-forms-panel-field-settings-query_string-wrap').hide();
2927 } else {
2928 jQuery('#everest-forms-panel-field-settings-query_string-wrap').show();
2929 }
2930 });
2931
2932 var mySelect = jQuery('#everest-forms-panel-field-settings-redirect_to option:selected').val();
2933
2934 if ( mySelect == 'same' ) {
2935 jQuery('#everest-forms-panel-field-settings-custom_page-wrap').hide();
2936 jQuery('#everest-forms-panel-field-settings-enable_redirect_query_string-wrap').hide();
2937 jQuery('#everest-forms-panel-field-settings-query_string-wrap').hide();
2938 jQuery('#everest-forms-panel-field-settings-external_url-wrap').hide();
2939 }
2940 else if(mySelect == 'custom_page') {
2941 jQuery('#everest-forms-panel-field-settings-custom_page-wrap').show();
2942 jQuery('#everest-forms-panel-field-settings-external_url-wrap').hide();
2943 }
2944 else if(mySelect == 'external_url'){
2945 jQuery('#everest-forms-panel-field-settings-external_url-wrap').show();
2946 jQuery('#everest-forms-panel-field-settings-custom_page-wrap').hide();
2947 jQuery('#everest-forms-panel-field-settings-enable_redirect_query_string-wrap').hide();
2948 jQuery('#everest-forms-panel-field-settings-query_string-wrap').hide();
2949 }
2950
2951 jQuery( '#everest-forms-panel-field-settings-redirect_to' ).on( 'change', function () {
2952 if ( this.value == 'same' ) {
2953 jQuery('#everest-forms-panel-field-settings-custom_page-wrap').hide();
2954 jQuery('#everest-forms-panel-field-settings-external_url-wrap').hide();
2955 jQuery('#everest-forms-panel-field-settings-enable_redirect_query_string-wrap').hide();
2956 jQuery('#everest-forms-panel-field-settings-query_string-wrap').hide();
2957 }
2958 else if ( this.value == 'custom_page') {
2959 jQuery('#everest-forms-panel-field-settings-custom_page-wrap').show();
2960 jQuery('#everest-forms-panel-field-settings-enable_redirect_query_string-wrap').show();
2961 jQuery('#everest-forms-panel-field-settings-external_url-wrap').hide();
2962
2963 if(jQuery('#everest-forms-panel-field-settings-enable_redirect_query_string').is(':checked')){
2964 jQuery('#everest-forms-panel-field-settings-query_string-wrap').show();
2965 } else{
2966 jQuery('#everest-forms-panel-field-settings-query_string-wrap').hide();
2967 }
2968 }
2969 else if ( this.value == 'external_url') {
2970 jQuery('#everest-forms-panel-field-settings-custom_page-wrap').hide();
2971 jQuery('#everest-forms-panel-field-settings-enable_redirect_query_string-wrap').hide();
2972 jQuery('#everest-forms-panel-field-settings-query_string-wrap').hide();
2973 jQuery('#everest-forms-panel-field-settings-external_url-wrap').show();
2974 }
2975 });
2976 jQuery( '.evf-panel-field-options-button.evf-disabled-tab' ).hide();
2977
2978 // Conditional Logic fields for General Settings in Form for Submission Redirection.
2979
2980 jQuery( '.everest-forms-conditional-field-settings-redirect_to').each(function() {
2981 var conditional_rule_selection =this.value;
2982 if ( 'custom_page' == conditional_rule_selection ) {
2983 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-custom_page').show();
2984 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-external_url').hide();
2985 }
2986 else if( 'external_url' == conditional_rule_selection ) {
2987 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-custom_page').hide();
2988 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-external_url').show();
2989 } else {
2990 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-custom_page').hide();
2991 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-external_url').hide();
2992 }
2993
2994 })
2995
2996 jQuery( document ).on( 'change', '.everest-forms-conditional-field-settings-redirect_to', function () {
2997 if ( 'custom_page' == this.value ) {
2998 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-custom_page').show();
2999 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-external_url').hide();
3000 }
3001 else if( 'external_url' == this.value ) {
3002 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-custom_page').hide();
3003 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-external_url').show();
3004 } else {
3005 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-custom_page').hide();
3006 jQuery(this).parents('.evf-field-conditional-container').find('.everest-forms-conditional-field-settings-external_url').hide();
3007 }
3008 });
3009
3010 });
3011
3012 jQuery( function ( $ ) {
3013
3014 // Add Fields - Open/close.
3015 $( document.body ).on( 'init_add_fields_toogle', function() {
3016 $( '.everest-forms-add-fields' ).on( 'click', '.everest-forms-add-fields-group > a', function( event ) {
3017 event.preventDefault();
3018 $( this ).parent( '.everest-forms-add-fields-group' ).toggleClass( 'closed' ).toggleClass( 'open' );
3019 });
3020 $( '.everest-forms-add-fields' ).on( 'click', '.everest-forms-add-fields-group a', function() {
3021 $( this ).next( '.evf-registered-buttons' ).stop().slideToggle();
3022 });
3023 $( '.everest-forms-add-fields-group.closed' ).each( function() {
3024 $( this ).find( '.evf-registered-buttons' ).hide();
3025 });
3026 } ).trigger( 'init_add_fields_toogle' );
3027
3028 // Fields Options - Open/close.
3029 $( document.body ).on( 'click', '.everest-forms-field-option .everest-forms-field-option-group > a', function( event ) {
3030 event.preventDefault();
3031 $( this ).parent( '.everest-forms-field-option-group' ).toggleClass( 'closed' ).toggleClass( 'open' );
3032 });
3033 $( document.body ).on( 'click', '.everest-forms-field-option .everest-forms-field-option-group a', function( event ) {
3034 // If the user clicks on some form input inside, the box should not be toggled.
3035 if ( $( event.target ).filter( ':input, option, .sort' ).length ) {
3036 return;
3037 }
3038
3039 $( this ).next( '.everest-forms-field-option-group-inner' ).stop().slideToggle();
3040 });
3041 $( document.body ).on( 'init_field_options_toggle', function() {
3042 $( '.everest-forms-field-option-group.closed' ).each( function() {
3043 $( this ).find( '.everest-forms-field-option-group-inner' ).hide();
3044 });
3045 } ).trigger( 'init_field_options_toggle' );
3046
3047 $( document ).on( 'click', function() {
3048 $( '.evf-smart-tag-lists' ).hide();
3049 });
3050
3051 $( '.evf-smart-tag-lists' ).hide();
3052
3053 // Toggle Smart Tags.
3054 $( document.body ).on('click', '.evf-toggle-smart-tag-display', function(e) {
3055 e.stopPropagation();
3056 $('.evf-smart-tag-lists').hide();
3057 $('.evf-smart-tag-lists ul').empty();
3058 $( this ).parent().find('.evf-smart-tag-lists').toggle('show');
3059
3060 var type = $( this ).data('type');
3061
3062 var allowed_field = $ ( this ).data( 'fields' );
3063 get_all_available_field( allowed_field, type , $( this ) );
3064 });
3065
3066 $( document.body ).on('click', '.smart-tag-field', function(e) {
3067
3068 var field_id = $( this ).data('field_id'),
3069 field_label = $( this ).text(),
3070 type = $( this ).data('type'),
3071 $parent = $ ( this ).parent().parent().parent(),
3072 $input = $parent.find('input[type=text]'),
3073 $textarea = $parent.find('textarea');
3074 if ( field_id !== 'fullname' && field_id !== 'email' && field_id !== 'subject' && field_id !== 'message' && 'other' !== type ) {
3075 field_label = field_label.split(/[\s-_]/);
3076 for(var i = 0 ; i < field_label.length ; i++){
3077 if ( i === 0 ) {
3078 field_label[i] = field_label[i].charAt(0).toLowerCase() + field_label[i].substr(1);
3079 } else {
3080 field_label[i] = field_label[i].charAt(0).toUpperCase() + field_label[i].substr(1);
3081 }
3082 }
3083 field_label = field_label.join('');
3084 field_id = field_label+'_'+field_id;
3085 } else {
3086 field_id = field_id;
3087 }
3088 if ( 'field' === type ) {
3089 $input.val( $input.val() + '{field_id="'+field_id+'"}' );
3090 $textarea.val($textarea.val()+'{field_id="'+field_id+'"}' );
3091 $textarea.trigger('change');
3092 } else if ( 'other' === type ) {
3093 $input.val( $input.val() + '{'+field_id+'}' );
3094 $textarea.val($textarea.val() + '{'+field_id+'}' );
3095 } else if ( 'regex' === type ) {
3096 $input.val($input.val() + field_id.replace(field_label+'_','') );
3097 $textarea.val( $textarea.val() + field_id.replace(field_label+'_','') );
3098 }
3099 });
3100
3101 // Toggle form status.
3102 $( document ).on( 'change', '.wp-list-table .everest-forms-toggle-form input', function(e) {
3103 e.stopPropagation();
3104 $.post( evf_data.ajax_url, {
3105 action: 'everest_forms_enabled_form',
3106 security: evf_data.evf_enabled_form,
3107 form_id: $( this ).data( 'form_id' ),
3108 enabled: $( this ).prop( 'checked' ) ? 1 : 0
3109 });
3110 });
3111
3112 // Toggle email notification.
3113 $( document ).on( 'change', '.evf-content-email-settings .evf-toggle-switch input', function(e) {
3114 var $this = $( this ),
3115 value = $this.prop( 'checked' );
3116
3117 if ( false === value ) {
3118 $this.val('');
3119 $this.closest( '.evf-content-email-settings' ).find( '.email-disable-message' ).remove();
3120 $this.closest( '.evf-content-section-title' ).siblings( '.evf-content-email-settings-inner' ).addClass( 'everest-forms-hidden' );
3121 $( '<p class="email-disable-message everest-forms-notice everest-forms-notice-info">' + evf_data.i18n_email_disable_message + '</p>' ).insertAfter( $this.closest( '.evf-content-section-title' ) );
3122 } else if ( true === value ) {
3123 $this.val('1');
3124 $this.closest( '.evf-content-section-title' ).siblings( '.evf-content-email-settings-inner' ).removeClass( 'everest-forms-hidden' );
3125 $this.closest( '.evf-content-email-settings' ).find( '.email-disable-message' ).remove();
3126 }
3127 });
3128
3129
3130 $( document ).on( 'click', '.everest-forms-min-max-date-format input', function() {
3131 var minDate = $( this ).closest( '.everest-forms-date' ).find( '.everest-forms-min-date' ).val();
3132 var maxDate = $(this).closest('.everest-forms-date').find('.everest-forms-min-date').val();
3133
3134 if ( $( this ).is( ':checked' ) ) {
3135 var setDateRange = $( this ).parent().next( '.everest-forms-min-max-date-range-format' );
3136 if( setDateRange.find( 'input[type="checkbox"]' ).is( ':checked' ) ) {
3137 setDateRange.next( '.everest-forms-min-max-date-option' ).addClass( 'everest-forms-hidden' );
3138 setDateRange.next().next( '.everest-forms-min-max-date-range-option' ).removeClass( 'everest-forms-hidden' );
3139 } else {
3140 setDateRange.next( '.everest-forms-min-max-date-option' ).removeClass( 'everest-forms-hidden' );
3141 setDateRange.next().next( '.everest-forms-min-max-date-range-option' ).addClass( 'everest-forms-hidden' );
3142 }
3143
3144 $( this ).parent().next( '.everest-forms-min-max-date-range-format' ).removeClass( 'everest-forms-hidden' );
3145
3146 if( '' === minDate ){
3147 $('.everest-forms-min-date').addClass('flatpickr-field').flatpickr({
3148 disableMobile : true,
3149 onChange : function(selectedDates, dateStr, instance) {
3150 $( '.everest-forms-min-date' ).val(dateStr);
3151 },
3152 onOpen: function(selectedDates, dateStr, instance) {
3153 instance.set('maxDate', $('.everest-forms-max-date').val());
3154 },
3155 });
3156 }
3157 if('' === maxDate ){
3158 $( '.everest-forms-max-date' ).addClass( 'flatpickr-field' ).flatpickr({
3159 disableMobile : true,
3160 onChange : function(selectedDates, dateStr, instance) {
3161 $( '.everest-forms-max-date' ).val(dateStr);
3162 },
3163 onOpen: function(selectedDates, dateStr, instance) {
3164 instance.set('minDate', $( '.everest-forms-min-date' ).val());
3165 },
3166 });
3167 }
3168 } else {
3169 $( this ).parent().next().next( '.everest-forms-min-max-date-option' ).addClass( 'everest-forms-hidden' );
3170 $( this ).parent().next().next().next( '.everest-forms-min-max-date-range-option' ).addClass( 'everest-forms-hidden' );
3171 $( this ).parent().next( '.everest-forms-min-max-date-range-format' ).addClass( 'everest-forms-hidden' );
3172 }
3173 });
3174
3175 $( document ).on( 'click', '.everest-forms-min-max-date-range-format input[type="checkbox"]', function() {
3176 if ( $( this ).is( ':checked' ) ) {
3177 $( this ).parent().next( '.everest-forms-min-max-date-option' ).addClass( 'everest-forms-hidden' );
3178 $( this ).parent().next().next( '.everest-forms-min-max-date-range-option' ).removeClass( 'everest-forms-hidden' );
3179 } else {
3180 $( this ).parent().next( '.everest-forms-min-max-date-option' ).removeClass( 'everest-forms-hidden' );
3181 $( this ).parent().next().next( '.everest-forms-min-max-date-range-option' ).addClass( 'everest-forms-hidden' );
3182 }
3183 });
3184
3185 function get_all_available_field( allowed_field, type , el ) {
3186 var all_fields_without_email = [];
3187 var all_fields = [];
3188 var email_field = [];
3189 var phone_field = [];
3190 $('.evf-admin-row .evf-admin-grid .everest-forms-field').each( function(){
3191 var field_type = $( this ).data('field-type');
3192 var field_id = $( this ).data('field-id');
3193 if ( 'email' === field_type ){
3194 var e_field_label = $( this ).find('.label-title span').first().text();
3195 var e_field_id = field_id;
3196 email_field[ e_field_id ] = e_field_label;
3197 } else if( 'phone' === field_type){
3198 var e_field_label = $( this ).find('.label-title span').first().text();
3199 var e_field_id = field_id;
3200 phone_field[ e_field_id ] = e_field_label;
3201 } else {
3202 var field_label = $( this ).find('.label-title span').first().text();
3203 all_fields_without_email[ field_id ] = field_label;
3204 }
3205 all_fields[ field_id ] = $( this ).find('.label-title span').first().text();
3206 });
3207
3208 if( 'other' === type || 'all' === type ){
3209 var other_smart_tags = evf_data.smart_tags_other;
3210 console.log($(el));
3211 for( var key in other_smart_tags ) {
3212 $(el).parent().find('.evf-smart-tag-lists .evf-others').append('<li class = "smart-tag-field" data-type="other" data-field_id="'+key+'">'+other_smart_tags[key]+'</li>');
3213 }
3214 }
3215
3216
3217 if( 'regex' == type ){
3218 var regex_lists = evf_data.regex_expression_lists;
3219 regex_lists.forEach(function(key,value) {
3220 $(el).parent().find('.evf-smart-tag-lists .evf-regex').append('<li class = "smart-tag-field" data-type="regex" data-field_id="'+key.value+'">'+key.text+'</li>');
3221 });
3222 }
3223
3224 if ( 'fields' === type || 'all' === type ) {
3225 if ( allowed_field === 'email' ) {
3226 if ( Object.keys(email_field).length < 1 ){
3227 $(el).parent().find('.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")').addClass('everest-forms-hidden');
3228 } else {
3229 $(el).parent().find('.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")').removeClass('everest-forms-hidden');
3230 }
3231 $(el).parent().find('.evf-smart-tag-lists .other-tag-title').remove();
3232 $(el).parent().find('.evf-smart-tag-lists .evf-others').remove();
3233 $(el).parent().find('.evf-smart-tag-lists').append('<div class="smart-tag-title other-tag-title">Others</div><ul class="evf-others"></ul>');
3234 $(el).parent().find('.evf-smart-tag-lists .evf-others').append('<li class="smart-tag-field" data-type="other" data-field_id="admin_email">Site Admin Email</li><li class="smart-tag-field" data-type="other" data-field_id="user_email">User Email</li>');
3235 for (var key in email_field ) {
3236 $(el).parent().find('.evf-smart-tag-lists .evf-fields').append('<li class = "smart-tag-field" data-type="field" data-field_id="'+key+'">'+email_field[key]+'</li>');
3237 }
3238 } else if ( allowed_field === 'phone' ) {
3239 if ( Object.keys(phone_field).length < 1 ){
3240 $(el).parent().find('.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")').addClass('everest-forms-hidden');
3241 } else {
3242 $(el).parent().find('.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")').removeClass('everest-forms-hidden');
3243 }
3244 $(el).parent().find('.evf-smart-tag-lists .other-tag-title').remove();
3245 $(el).parent().find('.evf-smart-tag-lists .evf-others').remove();
3246 for (var key in phone_field ) {
3247 $(el).parent().find('.evf-smart-tag-lists .evf-fields').append('<li class = "smart-tag-field" data-type="field" data-field_id="'+key+'">'+phone_field[key]+'</li>');
3248 }
3249 } else {
3250 if ( Object.keys(all_fields).length < 1 ){
3251 $(el).parent().find('.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")').addClass('everest-forms-hidden');
3252 } else {
3253 $(el).parent().find('.evf-smart-tag-lists .smart-tag-title:not(".other-tag-title")').removeClass('everest-forms-hidden');
3254 }
3255 for (var meta in all_fields ) {
3256 $(el).parent().find('.evf-smart-tag-lists .evf-fields').append('<li class = "smart-tag-field" data-type="field" data-field_id="'+meta+'">'+all_fields[meta]+'</li>');
3257 }
3258 }
3259 }
3260
3261 if ( 'calculations' === type ) {
3262 var calculations = [
3263 "number",
3264 "payment-single",
3265 "range-slider",
3266 "payment-checkbox",
3267 "payment-multiple",
3268 ];
3269 $(document).find('.everest-forms-field').each(function() {
3270 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')) {
3271 $(el).parent().find('.evf-smart-tag-lists .calculations').append('<li class = "smart-tag-field" data-type="field" data-field_id="'+$(this).attr('data-field-id')+'">'+$(this).find('.label-title .text').text()+'</li>');
3272 }
3273 })
3274 }
3275
3276 if ( 'ai-fields' === type ) {
3277 var aiFields = [
3278 "text",
3279 ];
3280 $(document).find('.everest-forms-field').each(function() {
3281 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')) {
3282 $(el).parent().find('.evf-smart-tag-lists .evf-fields-ai').append('<li class = "smart-tag-field" data-type="field" data-field_id="'+$(this).attr('data-field-id')+'">'+$(this).find('.label-title .text').text()+'</li>');
3283 }
3284 })
3285 }
3286 }
3287 });
3288
3289 jQuery(function ($) {
3290 $(document).ready(function () {
3291
3292 /**
3293 * Custom CSS
3294 */
3295 const customCssElement = $('#everest-forms-panel-field-settings-evf-custom-css');
3296 var cssEditor = wp.CodeMirror.fromTextArea(customCssElement[0],
3297 {
3298 "indentUnit": 2,
3299 "indentWithTabs": true,
3300 "inputStyle": "contenteditable",
3301 "lineNumbers": true,
3302 "lineWrapping": true,
3303 "styleActiveLine": true,
3304 "continueComments": true,
3305 "extraKeys": {
3306 "Ctrl-Space": "autocomplete",
3307 "Ctrl-/": "toggleComment",
3308 "Cmd-/": "toggleComment",
3309 "Alt-F": "findPersistent",
3310 "Ctrl-F": "findPersistent",
3311 "Cmd-F": "findPersistent"
3312 },
3313 "direction": "ltr",
3314 "gutters": [],
3315 "mode": "text/css",
3316 "lint": false,
3317 "autoCloseBrackets": true,
3318 "autoCloseTags": true,
3319 "autoRefresh": true,
3320 "matchTags": {
3321 "bothTags": true
3322 },
3323 "tabSize": 2,
3324 "theme": 'default',
3325 });
3326
3327 cssEditor.on('change', function () {
3328 customCssElement.html(cssEditor.getValue());
3329 });
3330
3331
3332 /**
3333 * Custom JS
3334 */
3335 const customJsElement = $('#everest-forms-panel-field-settings-evf-custom-js');
3336 var jsEditor = wp.CodeMirror.fromTextArea(customJsElement[0],
3337 {
3338 "indentUnit": 2,
3339 "indentWithTabs": true,
3340 "inputStyle": "contenteditable",
3341 "lineNumbers": true,
3342 "lineWrapping": true,
3343 "styleActiveLine": true,
3344 "continueComments": true,
3345 "extraKeys": {
3346 "Ctrl-Space": "autocomplete",
3347 "Ctrl-/": "toggleComment",
3348 "Cmd-/": "toggleComment",
3349 "Alt-F": "findPersistent",
3350 "Ctrl-F": "findPersistent",
3351 "Cmd-F": "findPersistent"
3352 },
3353 "direction": "ltr",
3354 "gutters": [],
3355 "mode": "javascript",
3356 "lint": false,
3357 "autoCloseBrackets": true,
3358 "autoCloseTags": true,
3359 "autoRefresh": true,
3360 "matchTags": {
3361 "bothTags": true
3362 },
3363 "tabSize": 2,
3364 });
3365
3366 jsEditor.on('change', function () {
3367 customJsElement.html(jsEditor.getValue());
3368 });
3369
3370 $('#everest-forms-panel-field-settings-evf-enable-custom-css, #everest-forms-panel-field-settings-evf-enable-custom-js').on('change', e => {
3371 showHideEditors();
3372 });
3373
3374 showHideEditors();
3375
3376 /**
3377 * Show/Hide the custom css and js input boxes based on the enabled/disabled state.
3378 */
3379 function showHideEditors() {
3380 if ($('#everest-forms-panel-field-settings-evf-enable-custom-css').is(':checked')) {
3381 $('#everest-forms-panel-field-settings-evf-custom-css-wrap').show(500);
3382 } else {
3383 $('#everest-forms-panel-field-settings-evf-custom-css-wrap').hide(500);
3384 }
3385
3386 if ($('#everest-forms-panel-field-settings-evf-enable-custom-js').is(':checked')) {
3387 $('#everest-forms-panel-field-settings-evf-custom-js-wrap').show(500);
3388 } else {
3389 $('#everest-forms-panel-field-settings-evf-custom-js-wrap').hide(500);
3390 }
3391 }
3392 });
3393 });
3394