Restore to commit 74e578279624c6045ca440a3459ebfa1f8d54191
This commit is contained in:
369
chat/templates/Community Suggestions/admin/js/admin-script.js
Normal file
369
chat/templates/Community Suggestions/admin/js/admin-script.js
Normal file
@@ -0,0 +1,369 @@
|
||||
jQuery(document).ready(function($) {
|
||||
|
||||
// View suggestion details modal
|
||||
window.pcPreviewSuggestion = function(suggestionId) {
|
||||
$.ajax({
|
||||
url: pcCommunitySuggestionsAdmin.ajax_url,
|
||||
type: 'POST',
|
||||
data: {
|
||||
action: 'pc_get_suggestion',
|
||||
suggestion_id: suggestionId,
|
||||
nonce: pcCommunitySuggestionsAdmin.nonce
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
pcShowSuggestionModal(response.data);
|
||||
} else {
|
||||
alert(pcCommunitySuggestionsAdmin.i18n.action_failed + ': ' + response.data.message);
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
alert(pcCommunitySuggestionsAdmin.i18n.action_failed);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function pcShowSuggestionModal(suggestion) {
|
||||
const modalHtml = `
|
||||
<div class="pc-modal" style="display: none;">
|
||||
<div class="pc-modal-overlay"></div>
|
||||
<div class="pc-modal-content">
|
||||
<div class="pc-modal-header">
|
||||
<h3>${suggestion.title}</h3>
|
||||
<button class="pc-modal-close" onclick="pcCloseModal()">×</button>
|
||||
</div>
|
||||
<div class="pc-modal-body">
|
||||
<div class="pc-suggestion-content">
|
||||
${suggestion.content}
|
||||
</div>
|
||||
<div class="pc-suggestion-meta">
|
||||
<p><strong>Author:</strong> ${suggestion.author}</p>
|
||||
<p><strong>Submitted:</strong> ${suggestion.date}</p>
|
||||
<p><strong>Upvotes:</strong> ${suggestion.upvotes}</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="pc-modal-footer">
|
||||
<button class="button button-primary" onclick="pcCloseModal()">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
$('body').append(modalHtml);
|
||||
$('.pc-modal').fadeIn(200);
|
||||
|
||||
// Prevent background scrolling
|
||||
$('body').css('overflow', 'hidden');
|
||||
}
|
||||
|
||||
window.pcCloseModal = function() {
|
||||
$('.pc-modal').fadeOut(200, function() {
|
||||
$(this).remove();
|
||||
});
|
||||
$('body').css('overflow', '');
|
||||
};
|
||||
|
||||
// Add comment functionality
|
||||
window.pcAddComment = function(suggestionId) {
|
||||
var $commentsRow = $('#pc-comments-' + suggestionId);
|
||||
$commentsRow.slideToggle();
|
||||
};
|
||||
|
||||
window.pcSubmitComment = function(suggestionId) {
|
||||
var $textarea = $('#pc-comment-' + suggestionId);
|
||||
var comment = $textarea.val().trim();
|
||||
|
||||
if (!comment) {
|
||||
alert('Please enter a comment.');
|
||||
return;
|
||||
}
|
||||
|
||||
var $button = $textarea.siblings('button');
|
||||
var originalText = $button.text();
|
||||
$button.prop('disabled', true).text('Adding...');
|
||||
|
||||
$.ajax({
|
||||
url: pcCommunitySuggestionsAdmin.ajax_url,
|
||||
type: 'POST',
|
||||
data: {
|
||||
action: 'pc_add_comment',
|
||||
suggestion_id: suggestionId,
|
||||
comment: comment,
|
||||
nonce: pcCommunitySuggestionsAdmin.nonce
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
var commentHtml = '<div class="pc-comment-item" data-comment-id="' + response.data.comment.id + '">' +
|
||||
'<div class="pc-comment-header">' +
|
||||
'<strong>' + response.data.comment.author + '</strong> ' +
|
||||
'<span class="pc-comment-date">' + response.data.comment.date + '</span>' +
|
||||
'</div>' +
|
||||
'<div class="pc-comment-content">' + response.data.comment.content + '</div>' +
|
||||
'<div class="pc-comment-actions">' +
|
||||
'<button class="button button-small button-link-delete" onclick="pcDeleteComment(' + response.data.comment.id + ')">Delete</button>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
|
||||
var $commentsList = $('#pc-comments-list-' + suggestionId);
|
||||
$commentsList.find('.pc-no-comments').remove();
|
||||
$commentsList.append(commentHtml);
|
||||
|
||||
$textarea.val('');
|
||||
alert(response.data.message);
|
||||
} else {
|
||||
alert(response.data.message || pcCommunitySuggestionsAdmin.i18n.action_failed);
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
alert(pcCommunitySuggestionsAdmin.i18n.action_failed);
|
||||
},
|
||||
complete: function() {
|
||||
$button.prop('disabled', false).text(originalText);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
window.pcDeleteComment = function(commentId) {
|
||||
if (!confirm('Are you sure you want to delete this comment?')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: pcCommunitySuggestionsAdmin.ajax_url,
|
||||
type: 'POST',
|
||||
data: {
|
||||
action: 'pc_delete_comment',
|
||||
comment_id: commentId,
|
||||
nonce: pcCommunitySuggestionsAdmin.nonce
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
$('.pc-comment-item[data-comment-id="' + commentId + '"]').fadeOut(300, function() {
|
||||
$(this).remove();
|
||||
});
|
||||
alert(response.data.message);
|
||||
} else {
|
||||
alert(response.data.message || pcCommunitySuggestionsAdmin.i18n.action_failed);
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
alert(pcCommunitySuggestionsAdmin.i18n.action_failed);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Close modal on overlay click
|
||||
$(document).on('click', '.pc-modal-overlay', function(e) {
|
||||
if (e.target === this) {
|
||||
pcCloseModal();
|
||||
}
|
||||
});
|
||||
|
||||
// Close modal on ESC key
|
||||
$(document).on('keydown', function(e) {
|
||||
if (e.key === 'Escape' && $('.pc-modal').is(':visible')) {
|
||||
pcCloseModal();
|
||||
}
|
||||
});
|
||||
|
||||
// Add modal styles
|
||||
$('<style>')
|
||||
.text(`
|
||||
.pc-modal {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 99999;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.pc-modal-overlay {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.pc-modal-content {
|
||||
background: #fff;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
|
||||
max-width: 600px;
|
||||
width: 90%;
|
||||
max-height: 80vh;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
z-index: 100000;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.pc-modal-header {
|
||||
padding: 20px 25px;
|
||||
border-bottom: 1px solid #dcdcde;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.pc-modal-header h3 {
|
||||
margin: 0;
|
||||
font-size: 1.3em;
|
||||
color: #1d2327;
|
||||
flex: 1;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.pc-modal-close {
|
||||
background: none;
|
||||
border: none;
|
||||
font-size: 24px;
|
||||
cursor: pointer;
|
||||
padding: 0;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
line-height: 1;
|
||||
color: #646970;
|
||||
}
|
||||
|
||||
.pc-modal-close:hover {
|
||||
color: #2271b1;
|
||||
}
|
||||
|
||||
.pc-modal-body {
|
||||
padding: 25px;
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.pc-suggestion-content {
|
||||
margin-bottom: 20px;
|
||||
line-height: 1.6;
|
||||
color: #2c3338;
|
||||
}
|
||||
|
||||
.pc-suggestion-content p {
|
||||
margin: 0 0 15px 0;
|
||||
}
|
||||
|
||||
.pc-suggestion-content p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.pc-suggestion-meta {
|
||||
border-top: 1px solid #dcdcde;
|
||||
padding-top: 20px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.pc-suggestion-meta p {
|
||||
margin: 0 0 8px 0;
|
||||
}
|
||||
|
||||
.pc-suggestion-meta p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.pc-modal-footer {
|
||||
padding: 20px 25px;
|
||||
border-top: 1px solid #dcdcde;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 782px) {
|
||||
.pc-modal-content {
|
||||
width: 95%;
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
.pc-modal-header {
|
||||
padding: 15px 20px;
|
||||
}
|
||||
|
||||
.pc-modal-body {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.pc-modal-footer {
|
||||
padding: 15px 20px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Dark mode support */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
.pc-modal-content {
|
||||
background: #2c3338;
|
||||
border: 1px solid #3c434a;
|
||||
}
|
||||
|
||||
.pc-modal-header,
|
||||
.pc-modal-footer {
|
||||
border-color: #3c434a;
|
||||
}
|
||||
|
||||
.pc-modal-header h3 {
|
||||
color: #dcdcde;
|
||||
}
|
||||
|
||||
.pc-modal-close {
|
||||
color: #9ca1a7;
|
||||
}
|
||||
|
||||
.pc-modal-close:hover {
|
||||
color: #2271b1;
|
||||
}
|
||||
|
||||
.pc-suggestion-content {
|
||||
color: #c3c4c7;
|
||||
}
|
||||
|
||||
.pc-suggestion-meta {
|
||||
border-color: #3c434a;
|
||||
}
|
||||
}
|
||||
`)
|
||||
.appendTo('head');
|
||||
|
||||
// Handle bulk actions
|
||||
$('.pc-bulk-action').on('change', function() {
|
||||
const action = $(this).val();
|
||||
if (action) {
|
||||
const checked = $('.pc-bulk-checkbox:checked');
|
||||
if (checked.length === 0) {
|
||||
alert(pcCommunitySuggestionsAdmin.i18n.no_items_selected);
|
||||
$(this).val('');
|
||||
return;
|
||||
}
|
||||
|
||||
const suggestionIds = checked.map(function() {
|
||||
return $(this).val();
|
||||
}).get();
|
||||
|
||||
if (confirm(pcCommunitySuggestionsAdmin.i18n.confirm_bulk_action.replace('{count}', checked.length).replace('{action}', action))) {
|
||||
$.ajax({
|
||||
url: pcCommunitySuggestionsAdmin.ajax_url,
|
||||
type: 'POST',
|
||||
data: {
|
||||
action: 'pc_get_stats',
|
||||
nonce: pcCommunitySuggestionsAdmin.nonce
|
||||
},
|
||||
success: function(response) {
|
||||
if (response.success) {
|
||||
$('#pc-stat-total').text(response.data.total);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Update stats every 30 seconds if on stats page
|
||||
if ($('.pc-settings-stats').length) {
|
||||
setInterval(pcUpdateStats, 30000);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user