fix: Modal backdrop not removed after icon selection

- Manually remove backdrop and modal classes on selectIcon
- Add hidden.bs.modal listener to clean up backdrop
This commit is contained in:
mirivlad 2026-04-17 19:46:59 +08:00
parent d652e24ad0
commit 4f407c0d46
1 changed files with 20 additions and 6 deletions

View File

@ -403,7 +403,6 @@
if (currentTargetInput) { if (currentTargetInput) {
currentTargetInput.value = iconName; currentTargetInput.value = iconName;
// Обновляем preview - ищем span с иконкой рядом с input
var preview = currentTargetInput.nextElementSibling; var preview = currentTargetInput.nextElementSibling;
if (preview && preview.querySelector) { if (preview && preview.querySelector) {
var iconEl = preview.querySelector('i'); var iconEl = preview.querySelector('i');
@ -411,7 +410,6 @@
iconEl.className = 'fas ' + iconName; iconEl.className = 'fas ' + iconName;
} }
} else { } else {
// Fallback: ищем по id
var previewFallback = document.getElementById('iconPreview'); var previewFallback = document.getElementById('iconPreview');
if (previewFallback) { if (previewFallback) {
previewFallback.className = 'fas ' + iconName; previewFallback.className = 'fas ' + iconName;
@ -419,10 +417,21 @@
} }
} }
var modal = bootstrap.Modal.getInstance(document.getElementById('iconPickerModal')); var modalEl = document.getElementById('iconPickerModal');
if (modal) { if (modalEl) {
modal.hide(); modalEl.classList.remove('show');
modalEl.style.display = 'none';
modalEl.setAttribute('aria-hidden', 'true');
modalEl.removeAttribute('aria-modal');
} }
var backdrop = document.querySelector('.modal-backdrop');
if (backdrop) {
backdrop.remove();
}
document.body.classList.remove('modal-open');
document.body.style.paddingRight = '';
document.body.style.overflow = '';
} }
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
@ -455,12 +464,17 @@
// Открытие модала - запоминаем какой input открыл // Открытие модала - запоминаем какой input открыл
document.getElementById('iconPickerModal').addEventListener('show.bs.modal', function(e) { document.getElementById('iconPickerModal').addEventListener('show.bs.modal', function(e) {
// Находим активный input через кнопку
var activeBtn = document.querySelector('[data-bs-target="#iconPickerModal"][data-icon-input]'); var activeBtn = document.querySelector('[data-bs-target="#iconPickerModal"][data-icon-input]');
if (activeBtn) { if (activeBtn) {
currentTargetInput = document.getElementById(activeBtn.dataset.iconInput); currentTargetInput = document.getElementById(activeBtn.dataset.iconInput);
} }
}); });
// Удаляем backdrop при закрытии модала
document.getElementById('iconPickerModal').addEventListener('hidden.bs.modal', function(e) {
var backdrop = document.querySelector('.modal-backdrop');
if (backdrop) backdrop.remove();
});
}); });
})(); })();
</script> </script>