250 lines
7.8 KiB
JavaScript
250 lines
7.8 KiB
JavaScript
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();
|
|
}
|
|
});
|
|
}); |