замена js алертов
This commit is contained in:
167
js/comment.js
167
js/comment.js
@@ -206,8 +206,6 @@ if ($fileInput.length && $fileInput[0].files.length > 0) {
|
||||
var $commentBlock = $btn.closest('.mod_comment_comment');
|
||||
$commentBlock.fadeOut(300, function() { $(this).remove(); });
|
||||
}
|
||||
// показать / скрыть комментарий
|
||||
|
||||
|
||||
// показать / скрыть комментарий
|
||||
if (action === 'unlock' || action === 'lock') {
|
||||
@@ -239,7 +237,7 @@ if (action === 'unlock' || action === 'lock') {
|
||||
|
||||
$card.removeClass('opacity-75 border-warning');
|
||||
|
||||
// Надежное скрытие: используем callback, чтобы после анимации точно убрать элемент
|
||||
// используем callback, чтобы после анимации убрать элемент
|
||||
$card.find('.alert-warning').stop(true, true).fadeOut(300, function() {
|
||||
$(this).remove(); // Удаляем плашку из кода совсем, чтобы при следующем "скрыть" она создалась чисто
|
||||
});
|
||||
@@ -391,50 +389,85 @@ $doc.on('mouseleave', '.rating-edit-block, #rating_wrapper', function() {
|
||||
$('#user_rating_stars_' + cid + ' .star-choice').removeClass('bi-star-fill').addClass('bi-star');
|
||||
});
|
||||
|
||||
// --- ГОЛОСОВАНИЕ (РЕЙТИНГ УЖЕ ОПУБЛИКОВАННЫХ) ---
|
||||
$doc.on('mouseenter', '.star-item', function() {
|
||||
var $parent = $(this).parent();
|
||||
if ($parent.hasClass('comment-like')) {
|
||||
$(this).css('transform', 'scale(1.2)');
|
||||
}
|
||||
else {
|
||||
$(this).prevAll().addBack().removeClass('bi-star').addClass('bi-star-fill');
|
||||
$(this).nextAll().removeClass('bi-star-fill').addClass('bi-star');
|
||||
}
|
||||
});
|
||||
// --- ГОЛОСОВАНИЕ (РЕЙТИНГ УЖЕ ОПУБЛИКОВАННЫХ) ---
|
||||
$doc.on('mouseenter', '.star-item', function() {
|
||||
var $parent = $(this).parent();
|
||||
if ($parent.hasClass('comment-like')) {
|
||||
$(this).css('transform', 'scale(1.2)');
|
||||
} else {
|
||||
$(this).prevAll().addBack().removeClass('bi-star').addClass('bi-star-fill');
|
||||
$(this).nextAll().removeClass('bi-star-fill').addClass('bi-star');
|
||||
}
|
||||
});
|
||||
|
||||
$doc.on('mouseleave', '.star-item', function() {
|
||||
var $parent = $(this).parent();
|
||||
if ($parent.hasClass('comment-like')) { $(this).css('transform', 'scale(1)'); }
|
||||
});
|
||||
$doc.on('mouseleave', '.star-item', function() {
|
||||
var $parent = $(this).parent();
|
||||
if ($parent.hasClass('comment-like')) { $(this).css('transform', 'scale(1)'); }
|
||||
});
|
||||
|
||||
$doc.on('click', '.star-item', function() {
|
||||
var $container = $(this).closest('.comment-rating-container');
|
||||
var commentId = $container.data('id');
|
||||
var voteValue = $(this).data('value');
|
||||
// Голосование
|
||||
$(document).on('click', '.star-item', function() {
|
||||
var $this = $(this);
|
||||
// Находим основной контейнер звезд с рамкой
|
||||
var $container = $this.closest('.comment-rating-container');
|
||||
var commentId = $container.data('id');
|
||||
var voteValue = $this.data('value');
|
||||
|
||||
$.ajax({
|
||||
url: 'index.php?module=comment&action=vote&ajax=1',
|
||||
type: 'POST',
|
||||
data: { comment_id: commentId, vote: voteValue, ajax: 1 },
|
||||
success: function(response) {
|
||||
var res = response.toString().trim();
|
||||
if (res.indexOf('success') !== -1) {
|
||||
$container.html('<span class="text-success small fw-bold">' + COMMENT_JS_THX + '</span>');
|
||||
setTimeout(function(){ location.reload(); }, 1000);
|
||||
} else if (res.indexOf('already_voted') !== -1) {
|
||||
alert(COMMENT_JS_VOTE_A);
|
||||
} else if (res.indexOf('own_comment') !== -1) {
|
||||
alert(COMMENT_JS_VOTE_B);
|
||||
} else if (res.indexOf('forbidden_anon') !== -1) {
|
||||
alert(COMMENT_JS_VOTE_C);
|
||||
} else {
|
||||
alert(COMMENT_JS_VOTE_ERR);
|
||||
}
|
||||
},
|
||||
error: function(xhr) {alert(COMMENT_JS_VOTE_ERR_A + ' ' + xhr.status);}
|
||||
$.ajax({
|
||||
url: 'index.php?module=comment&action=vote&ajax=1',
|
||||
type: 'POST',
|
||||
data: { comment_id: commentId, vote: voteValue, ajax: 1 },
|
||||
success: function(response) {
|
||||
var res = response.toString().trim();
|
||||
|
||||
// Функция для подмены блока на время
|
||||
var showStatus = function(type, message, icon) {
|
||||
var statusHtml =
|
||||
'<div class="alert alert-' + type + ' alert-vote-status d-flex align-items-center fade show m-0" ' +
|
||||
'style="font-size: 0.8rem; padding: 5px 15px; border-radius: 6px; border-left: 4px solid; min-height: 38px; width: fit-content; display: inline-flex !important;">' +
|
||||
'<i class="bi ' + icon + ' me-2"></i>' +
|
||||
'<span>' + message + '</span>' +
|
||||
'</div>';
|
||||
|
||||
// 1. Создаем объект алерта
|
||||
var $newAlert = $(statusHtml);
|
||||
|
||||
// 2. заменяем контейнер звезд на алерт
|
||||
$container.replaceWith($newAlert);
|
||||
|
||||
// 3. Через 4 секунды возвращаем звезды обратно
|
||||
setTimeout(function() {
|
||||
$newAlert.fadeOut(400, function() {
|
||||
// Заменяем алерт обратно на сохраненный контейнер звезд
|
||||
$(this).replaceWith($container);
|
||||
$container.hide().fadeIn(300);
|
||||
});
|
||||
});
|
||||
}, 4000);
|
||||
};
|
||||
|
||||
if (res.indexOf('success') !== -1) {
|
||||
// При успехе заменяем содержимое на "Спасибо" и обновляем
|
||||
$container.html('<span class="text-success small fw-bold px-2"><i class="bi bi-check2-circle me-1"></i>' + COMMENT_JS_THX + '</span>');
|
||||
setTimeout(function(){ location.reload(); }, 1200);
|
||||
}
|
||||
else if (res.indexOf('already_voted') !== -1) {
|
||||
showStatus('info', COMMENT_JS_VOTE_A, 'bi-info-circle-fill');
|
||||
}
|
||||
else if (res.indexOf('own_comment') !== -1) {
|
||||
showStatus('warning', COMMENT_JS_VOTE_B, 'bi-exclamation-triangle-fill');
|
||||
}
|
||||
else if (res.indexOf('forbidden_anon') !== -1) {
|
||||
showStatus('danger', COMMENT_JS_VOTE_C, 'bi-person-x-fill');
|
||||
}
|
||||
else {
|
||||
showStatus('danger', COMMENT_JS_VOTE_ERR, 'bi-x-circle-fill');
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
showStatus('danger', COMMENT_JS_VOTE_ERR_A + ' (Код: ' + xhr.status + ')', 'bi-wifi-off', 5000);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$doc.on('click', '#mod_comment_close', function(e) { e.preventDefault(); cAction(this, 'close'); });
|
||||
$doc.on('click', '#mod_comment_open', function(e) { e.preventDefault(); cAction(this, 'open'); });
|
||||
@@ -459,11 +492,26 @@ $doc.on('mouseleave', '.rating-edit-block, #rating_wrapper', function() {
|
||||
$('#in_message').focus();
|
||||
});
|
||||
|
||||
// Удаление
|
||||
$doc.off('click', '.mod_comment_delete').on('click', '.mod_comment_delete', function(e) {
|
||||
e.preventDefault();
|
||||
if (confirm(COMMENT_JS_DELDEL_CONFIRM)) cAction(this, 'delete');
|
||||
});
|
||||
// Удаление через модальное окно Bootstrap
|
||||
$doc.off('click', '.mod_comment_delete').on('click', '.mod_comment_delete', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
var deleteBtn = this; // Запоминаем кнопку, на которую нажали
|
||||
|
||||
// Инициализируем модальное окно Bootstrap
|
||||
var modalElement = document.getElementById('deleteCommentModal');
|
||||
var confirmModal = new bootstrap.Modal(modalElement);
|
||||
|
||||
// Показываем окно
|
||||
confirmModal.show();
|
||||
|
||||
// Находим кнопку подтверждения внутри модалки
|
||||
// Используем .one('click'), чтобы событие сработало только один раз
|
||||
$('#confirmDeleteButton').off('click').one('click', function() {
|
||||
cAction(deleteBtn, 'delete'); // Выполняем удаление
|
||||
confirmModal.hide(); // Закрываем окно
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// Универсальный обработчик для переключателя видимости
|
||||
@@ -1037,7 +1085,28 @@ $doc.on('submit', '#mod_comment_new form', function(e) {
|
||||
beforeSend: function() { $btn.prop('disabled', true).text(COMMENT_JS_LOADS_R); },
|
||||
success: function(data) {
|
||||
if (data.includes('wrong_securecode')) {
|
||||
alert(COMMENT_JS_SEC_CODE_WRONG);
|
||||
// Очищаем старую ошибку
|
||||
$('#captcha_error_msg').empty();
|
||||
$('#securecode').removeClass('is-invalid');
|
||||
|
||||
// Создаем простой алерт Bootstrap под инпутом
|
||||
var $err = $('<div class="alert alert-danger alert-dismissible fade show mt-2 mb-0 py-2 d-flex align-items-center" role="alert" style="font-size: 0.85rem;">' +
|
||||
'<i class="bi bi-exclamation-triangle-fill me-2"></i>' +
|
||||
'<span>' + COMMENT_JS_SEC_CODE_WRONG + '</span>' +
|
||||
'<button type="button" class="btn-close" data-bs-dismiss="alert" style="padding: 0.8rem;"></button>' +
|
||||
'</div>');
|
||||
|
||||
// Вставляем и подсвечиваем
|
||||
$('#captcha_error_msg').append($err);
|
||||
$('#securecode').addClass('is-invalid').val('').focus();
|
||||
|
||||
// Автоудаление
|
||||
setTimeout(function() {
|
||||
$err.fadeOut(400, function() {
|
||||
$(this).remove();
|
||||
$('#securecode').removeClass('is-invalid');
|
||||
});
|
||||
}, 6000);
|
||||
getCaptha();
|
||||
$btn.prop('disabled', false).text(originalBtnText);
|
||||
$('#upload_progress_container').addClass('d-none');
|
||||
|
||||
@@ -183,23 +183,24 @@
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
{if $im}
|
||||
<div class="row mb-3 align-items-center">
|
||||
<div class="col-md-4">
|
||||
<label for="securecode" class="form-label">{#COMMENT_FORM_CODE#}</label>
|
||||
<div id="captcha_block">
|
||||
<span id="captcha" class="d-block mb-1">
|
||||
<img src="{$ABS_PATH}inc/captcha.php" alt="{#COMMENT_FORM_CODE#}" class="img-fluid border rounded" style="cursor: pointer;" width="120" height="60" border="0" />
|
||||
</span>
|
||||
<a href="javascript:void(0);" id="reload_captcha" class="small text-decoration-none text-muted"><i class="bi bi-arrow-clockwise"></i> {#COMMENT_CAPTCHA_UPD#}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<label for="securecode" class="form-label">{#COMMENT_FORM_CODE_ENTER#}*</label>
|
||||
<input name="securecode" type="text" id="securecode" maxlength="10" class="form-control" placeholder="{#COMMENT_FORM_CODE_ENTER#}" />
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{if $im}
|
||||
<div class="row mb-3 align-items-center">
|
||||
<div class="col-md-4">
|
||||
<label for="securecode" class="form-label">{#COMMENT_FORM_CODE#}</label>
|
||||
<div id="captcha_block">
|
||||
<span id="captcha" class="d-block mb-1">
|
||||
<img src="{$ABS_PATH}inc/captcha.php" alt="{#COMMENT_FORM_CODE#}" class="img-fluid border rounded" style="cursor: pointer;" width="120" height="60" border="0" />
|
||||
</span>
|
||||
<a href="javascript:void(0);" id="reload_captcha" class="small text-decoration-none text-muted"><i class="bi bi-arrow-clockwise"></i> {#COMMENT_CAPTCHA_UPD#}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<label for="securecode" class="form-label">{#COMMENT_FORM_CODE_ENTER#}*</label>
|
||||
<input name="securecode" type="text" id="securecode" maxlength="10" class="form-control" placeholder="{#COMMENT_FORM_CODE_ENTER#}" />
|
||||
<div id="captcha_error_msg"></div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="mt-4">
|
||||
<button type="submit" class="btn btn-success me-2">
|
||||
@@ -229,22 +230,24 @@
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{* Модальное окно удаления *}
|
||||
<div class="modal fade" id="deleteCommentModal" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header bg-danger text-white">
|
||||
<h5 class="modal-title">{#COMMENT_MOD_DEL_CONFIRM#}</h5>
|
||||
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
|
||||
</div>
|
||||
<div class="modal-body">{#COMMENT_MOD_DEL_CONFIRM_A#}</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{#COMMENT_MOD_DEL_CANCEL#}</button>
|
||||
<button type="button" class="btn btn-danger" id="confirmDeleteButton">{#COMMENT_MOD_DEL_DEL#}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{* Модальное окно удаления *}
|
||||
<div class="modal fade" id="deleteCommentModal" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header bg-danger text-white">
|
||||
<h5 class="modal-title">{#COMMENT_MOD_DEL_CONFIRM#}</h5>
|
||||
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
|
||||
</div>
|
||||
<div class="modal-body text-center py-4">
|
||||
{#COMMENT_MOD_DEL_CONFIRM_A#}
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{#COMMENT_MOD_DEL_CANCEL#}</button>
|
||||
<button type="button" class="btn btn-danger" id="confirmDeleteButton">{#COMMENT_MOD_DEL_DEL#}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var COMMENT_SITE_CLOSE = '{#COMMENT_SITE_CLOSE#}';
|
||||
|
||||
Reference in New Issue
Block a user