Files
shopify-ai-backup/chat/templates/Form Builder/admin/js/admin-script.js

241 lines
8.9 KiB
JavaScript

/**
* PC Form Builder Admin Scripts
*
* JavaScript functionality for the form builder admin interface.
*
* @package PCFormBuilder
*/
(function($) {
'use strict';
var PCFB_Admin = {
fieldIndex: 0,
deletedFields: [],
init: function() {
this.initFieldTypeButtons();
this.initFieldToggle();
this.initFieldDelete();
this.initDeleteModal();
this.initFormBuilder();
},
initFieldTypeButtons: function() {
var self = this;
$('.pcfb-add-field-btn').on('click', function(e) {
e.preventDefault();
var fieldType = $(this).data('field-type');
self.addField(fieldType);
});
},
addField: function(fieldType) {
var self = this;
var container = $('#pcfb-fields-container');
if (container.find('.pcfb-empty-fields').length > 0) {
container.find('.pcfb-empty-fields').remove();
}
var fieldIndex = this.getNextFieldIndex();
var nonce = pcfbAdminVars.nonce;
$.ajax({
url: pcfbAdminVars.ajaxurl,
type: 'POST',
data: {
action: 'pcfb_add_field',
field_type: fieldType,
field_index: fieldIndex,
nonce: nonce
},
success: function(response) {
if (response.success) {
container.append(response.data.html);
self.reindexFields();
self.initFieldToggle();
self.initFieldDelete();
self.updateLabelOnChange();
}
},
error: function() {
alert(pcfbAdminVars.i18n.confirmDeleteField);
}
});
},
getNextFieldIndex: function() {
var maxIndex = 0;
$('#pcfb-fields-container [name^="fields["]').each(function() {
var match = $(this).attr('name').match(/fields\[(\d+)\]/);
if (match && parseInt(match[1]) > maxIndex) {
maxIndex = parseInt(match[1]);
}
});
return maxIndex + 1;
},
reindexFields: function() {
var fields = $('#pcfb-fields-container .pcfb-field-item');
fields.each(function(index) {
var field = $(this);
field.find('[name^="fields["]').each(function() {
var name = $(this).attr('name');
var newName = name.replace(/fields\[\d+\]/, 'fields[' + index + ']');
$(this).attr('name', newName);
});
});
},
initFieldToggle: function() {
$('.pcfb-toggle-field').off('click').on('click', function(e) {
e.preventDefault();
$(this).closest('.pcfb-field-item').toggleClass('collapsed');
});
},
initFieldDelete: function() {
var self = this;
$('.pcfb-delete-field').off('click').on('click', function(e) {
e.preventDefault();
var fieldItem = $(this).closest('.pcfb-field-item');
var fieldId = fieldItem.data('field-id');
if (confirm(pcfbAdminVars.i18n.confirmDeleteField)) {
if (fieldId && fieldId !== 'new') {
self.deletedFields.push(fieldId);
$('<input type="hidden" name="deleted_fields[]" value="' + fieldId + '">').appendTo('#pcfb-form-builder');
}
fieldItem.fadeOut(300, function() {
$(this).remove();
self.reindexFields();
self.checkEmptyFields();
});
}
});
},
checkEmptyFields: function() {
var container = $('#pcfb-fields-container');
if (container.find('.pcfb-field-item').length === 0) {
container.html('<div class="pcfb-empty-fields"><p>' + pcfbAdminVars.i18n.fieldLabel + '</p></div>');
}
},
updateLabelOnChange: function() {
$('.pcfb-field-label-input').off('input').on('input', function() {
var label = $(this).val();
var fieldItem = $(this).closest('.pcfb-field-item');
var fieldName = fieldItem.find('.pcfb-field-name-display');
var baseName = this.getAttribute('name').match(/fields\[(\d+)\]\[field_label\]/);
if (baseName) {
var slug = label.toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_|_$/g, '');
if (slug === '') {
slug = 'field_' + baseName[1];
}
fieldName.text(slug);
var hiddenName = fieldItem.find('input[name^="fields["][name$="[field_name]"]');
hiddenName.val(slug);
}
});
},
initDeleteModal: function() {
var self = this;
$(document).on('click', '.pcfb-delete-form, .pcfb-delete-form-btn, .pcfb-delete-form-link', function(e) {
if (e.target.tagName === 'BUTTON' || $(this).hasClass('pcfb-delete-form') || $(this).hasClass('pcfb-delete-form-btn') || $(this).hasClass('pcfb-delete-form-link')) {
e.preventDefault();
var formId = $(this).data('form-id');
var formName = $(this).data('form-name');
$('#pcfb-delete-form-id').val(formId);
$('#pcfb-delete-form-name').text(formName);
$('#pcfb-delete-modal').addClass('active').show();
}
});
$('.pcfb-modal-close, .pcfb-modal-cancel').on('click', function(e) {
e.preventDefault();
$('#pcfb-delete-modal').removeClass('active').hide();
});
$('#pcfb-delete-modal').on('click', function(e) {
if ($(e.target).is('#pcfb-delete-modal')) {
$(this).removeClass('active').hide();
}
});
},
initFormBuilder: function() {
var self = this;
if ($('#pcfb-fields-container').length > 0) {
$('#pcfb-fields-container').sortable({
handle: '.pcfb-field-header',
placeholder: 'pcfb-field-placeholder',
tolerance: 'pointer',
update: function() {
self.reindexFields();
}
});
}
if ($('#pcfb-sections-container').length > 0) {
$('#pcfb-sections-container').sortable({
handle: '.pcfb-section-header',
placeholder: 'pcfb-section-placeholder',
tolerance: 'pointer'
});
}
$('#pcfb-add-section').on('click', function(e) {
e.preventDefault();
self.addSection();
});
$('#pcfb-form-builder').on('submit', function(e) {
var formName = $('#form-name').val().trim();
if (!formName) {
e.preventDefault();
alert(pcfbAdminVars.i18n.fieldLabel);
$('#form-name').focus();
return false;
}
var hasRequiredFields = false;
$('.pcfb-field-item').each(function() {
if ($(this).find('[name*="[validation_rules][required]"]').is(':checked')) {
hasRequiredFields = true;
}
});
});
},
addSection: function() {
var container = $('#pcfb-sections-container');
var sectionCount = container.find('.pcfb-section-box').length;
var sectionHtml = '<div class="pcfb-section-box" data-section-id="new-' + sectionCount + '">' +
'<div class="pcfb-section-header">' +
'<span class="dashicons dashicons-menu"></span>' +
'<span class="pcfb-section-title">Section ' + (sectionCount + 1) + '</span>' +
'</div>' +
'<div class="pcfb-section-content">' +
'<input type="hidden" name="sections[' + sectionCount + '][id]" value="">' +
'<input type="hidden" name="sections[' + sectionCount + '][title]" value="Section ' + (sectionCount + 1) + '">' +
'<p class="description">Drag fields into this section or click to configure.</p>' +
'</div>' +
'</div>';
container.append(sectionHtml);
}
};
$(document).ready(function() {
PCFB_Admin.init();
});
})(jQuery);