Restore to commit 74e578279624c6045ca440a3459ebfa1f8d54191
This commit is contained in:
250
chat/templates/FAQ Manager/admin/js/admin-script.js
Normal file
250
chat/templates/FAQ Manager/admin/js/admin-script.js
Normal file
@@ -0,0 +1,250 @@
|
||||
jQuery(document).ready(function($) {
|
||||
|
||||
// Sortable functionality
|
||||
$('#pc-faq-sortable').sortable({
|
||||
handle: '.sort-handle',
|
||||
placeholder: 'pc-faq-sortable-placeholder',
|
||||
helper: 'clone',
|
||||
opacity: 0.9,
|
||||
cursor: 'move',
|
||||
tolerance: 'pointer',
|
||||
start: function(event, ui) {
|
||||
ui.placeholder.height(ui.item.outerHeight());
|
||||
},
|
||||
update: function(event, ui) {
|
||||
$('#pc-faq-save-order').addClass('highlight');
|
||||
}
|
||||
});
|
||||
|
||||
// Save order
|
||||
$('#pc-faq-save-order').on('click', function() {
|
||||
var $button = $(this);
|
||||
var $status = $('.pc-faq-save-status');
|
||||
|
||||
if ($button.prop('disabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
var faqIds = [];
|
||||
$('#pc-faq-sortable .pc-faq-item').each(function() {
|
||||
faqIds.push($(this).data('faq-id'));
|
||||
});
|
||||
|
||||
$button.prop('disabled', true);
|
||||
$status.text(pc_faq_manager.saving).removeClass('saved error').addClass('saving');
|
||||
|
||||
$.post(pc_faq_manager.ajax_url, {
|
||||
action: 'pc_faq_reorder',
|
||||
nonce: pc_faq_manager.nonce,
|
||||
faq_ids: faqIds
|
||||
})
|
||||
.done(function(response) {
|
||||
if (response.success) {
|
||||
$status.text(pc_faq_manager.saved).removeClass('saving error').addClass('saved');
|
||||
$button.removeClass('highlight');
|
||||
} else {
|
||||
$status.text(pc_faq_manager.error).removeClass('saving saved').addClass('error');
|
||||
}
|
||||
})
|
||||
.fail(function() {
|
||||
$status.text(pc_faq_manager.error).removeClass('saving saved').addClass('error');
|
||||
})
|
||||
.always(function() {
|
||||
$button.prop('disabled', false);
|
||||
setTimeout(function() {
|
||||
$status.text('').removeClass('saving saved error');
|
||||
}, 3000);
|
||||
});
|
||||
});
|
||||
|
||||
// Edit FAQ modal
|
||||
var $modal = $('#pc-faq-edit-modal');
|
||||
var $backdrop = $('.pc-faq-modal-backdrop');
|
||||
var currentEditingId = null;
|
||||
|
||||
function openEditModal(faqId) {
|
||||
var $item = $('.pc-faq-item[data-faq-id="' + faqId + '"]');
|
||||
var title = $item.find('.faq-question h4').text();
|
||||
var content = $item.find('.faq-content').text();
|
||||
|
||||
$('#pc-faq-edit-title').val(title);
|
||||
$('#pc-faq-edit-content').val(content);
|
||||
currentEditingId = faqId;
|
||||
|
||||
$modal.show();
|
||||
$backdrop.show();
|
||||
$('body').css('overflow', 'hidden');
|
||||
}
|
||||
|
||||
function closeEditModal() {
|
||||
$modal.hide();
|
||||
$backdrop.hide();
|
||||
$('body').css('overflow', '');
|
||||
currentEditingId = null;
|
||||
}
|
||||
|
||||
$('.pc-faq-edit').on('click', function() {
|
||||
var faqId = $(this).data('faq-id');
|
||||
openEditModal(faqId);
|
||||
});
|
||||
|
||||
$('.pc-faq-modal-close, .pc-faq-modal-cancel, .pc-faq-modal-backdrop').on('click', function() {
|
||||
closeEditModal();
|
||||
});
|
||||
|
||||
// Save edited FAQ
|
||||
$('.pc-faq-modal-save').on('click', function() {
|
||||
if (!currentEditingId) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $button = $(this);
|
||||
var title = $('#pc-faq-edit-title').val().trim();
|
||||
var content = $('#pc-faq-edit-content').val();
|
||||
|
||||
if (!title || !content) {
|
||||
alert('Please fill in both the question and answer.');
|
||||
return;
|
||||
}
|
||||
|
||||
if ($button.prop('disabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$button.prop('disabled', true);
|
||||
|
||||
$.post(pc_faq_manager.ajax_url, {
|
||||
action: 'pc_faq_edit',
|
||||
nonce: pc_faq_manager.nonce,
|
||||
faq_id: currentEditingId,
|
||||
title: title,
|
||||
content: content
|
||||
})
|
||||
.done(function(response) {
|
||||
if (response.success) {
|
||||
// Update the item in the list
|
||||
var $item = $('.pc-faq-item[data-faq-id="' + currentEditingId + '"]');
|
||||
$item.find('.faq-question h4').text(title);
|
||||
$item.find('.faq-content').text(content.replace(/<[^>]*>/g, '').substring(0, 100) + '...');
|
||||
$item.find('.faq-excerpt').text(content.replace(/<[^>]*>/g, '').substring(0, 50) + '...');
|
||||
|
||||
closeEditModal();
|
||||
} else {
|
||||
alert('Failed to update FAQ: ' + (response.data.message || 'Unknown error'));
|
||||
}
|
||||
})
|
||||
.fail(function() {
|
||||
alert('Failed to update FAQ. Please try again.');
|
||||
})
|
||||
.always(function() {
|
||||
$button.prop('disabled', false);
|
||||
});
|
||||
});
|
||||
|
||||
// Delete FAQ
|
||||
$('.pc-faq-delete').on('click', function() {
|
||||
var $button = $(this);
|
||||
var faqId = $button.data('faq-id');
|
||||
var $item = $button.closest('.pc-faq-item');
|
||||
|
||||
if (!confirm(pc_faq_manager.confirm_delete)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($button.prop('disabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$button.prop('disabled', true);
|
||||
|
||||
$.post(pc_faq_manager.ajax_url, {
|
||||
action: 'pc_faq_delete',
|
||||
nonce: pc_faq_manager.nonce,
|
||||
faq_id: faqId
|
||||
})
|
||||
.done(function(response) {
|
||||
if (response.success) {
|
||||
$item.fadeOut(300, function() {
|
||||
$(this).remove();
|
||||
|
||||
// Check if we need to show empty state
|
||||
var remainingItems = $('#pc-faq-sortable .pc-faq-item').length;
|
||||
if (remainingItems === 0) {
|
||||
location.reload();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
alert('Failed to delete FAQ: ' + (response.data.message || 'Unknown error'));
|
||||
}
|
||||
})
|
||||
.fail(function() {
|
||||
alert('Failed to delete FAQ. Please try again.');
|
||||
})
|
||||
.always(function() {
|
||||
$button.prop('disabled', false);
|
||||
});
|
||||
});
|
||||
|
||||
// Add new FAQ form
|
||||
$('#pc-faq-add-form').on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var $form = $(this);
|
||||
var $button = $form.find('button[type="submit"]');
|
||||
var title = $('#pc-faq-title').val().trim();
|
||||
var content = $('#pc-faq-content').val();
|
||||
|
||||
if (!title || !content) {
|
||||
showMessage('Please fill in both the question and answer.', 'error');
|
||||
return;
|
||||
}
|
||||
|
||||
if ($button.prop('disabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$button.prop('disabled', true);
|
||||
|
||||
$.post(pc_faq_manager.ajax_url, {
|
||||
action: 'pc_faq_add_new',
|
||||
nonce: pc_faq_manager.nonce,
|
||||
title: title,
|
||||
content: content
|
||||
})
|
||||
.done(function(response) {
|
||||
if (response.success) {
|
||||
showMessage('FAQ created successfully! Redirecting...', 'success');
|
||||
setTimeout(function() {
|
||||
window.location.href = 'admin.php?page=pc-faq-manager';
|
||||
}, 1500);
|
||||
} else {
|
||||
showMessage('Failed to create FAQ: ' + (response.data.message || 'Unknown error'), 'error');
|
||||
}
|
||||
})
|
||||
.fail(function() {
|
||||
showMessage('Failed to create FAQ. Please try again.', 'error');
|
||||
})
|
||||
.always(function() {
|
||||
$button.prop('disabled', false);
|
||||
});
|
||||
});
|
||||
|
||||
function showMessage(message, type) {
|
||||
var $message = $('#pc-faq-add-message');
|
||||
$message.removeClass('notice-success notice-error')
|
||||
.addClass('notice-' + type)
|
||||
.html('<p>' + message + '</p>')
|
||||
.show();
|
||||
|
||||
setTimeout(function() {
|
||||
$message.fadeOut();
|
||||
}, 5000);
|
||||
}
|
||||
|
||||
// ESC key to close modal
|
||||
$(document).on('keydown', function(e) {
|
||||
if (e.keyCode === 27 && $modal.is(':visible')) {
|
||||
closeEditModal();
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user