// Основные функции JavaScript для приложения document.addEventListener('DOMContentLoaded', function() { // Инициализация всплывающих подсказок Bootstrap var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl); }); // Автоматическое закрытие алертов через 5 секунд setTimeout(function() { var alerts = document.querySelectorAll('.alert'); alerts.forEach(function(alert) { var bsAlert = new bootstrap.Alert(alert); bsAlert.close(); }); }, 5000); // Обработка загрузки файлов с отображением прогресса var uploadForm = document.querySelector('form[action*="upload_file"]'); if (uploadForm) { uploadForm.addEventListener('submit', function(e) { var fileInput = this.querySelector('input[type="file"]'); if (fileInput.files.length > 0) { var fileSize = fileInput.files[0].size; if (fileSize > 100 * 1024 * 1024) { // 100MB e.preventDefault(); alert('Файл слишком большой. Максимальный размер файла - 100MB.'); return false; } // Показываем индикатор загрузки var modalBody = this.querySelector('.modal-body'); var progressDiv = document.createElement('div'); progressDiv.className = 'progress mt-3'; progressDiv.innerHTML = '
'; modalBody.appendChild(progressDiv); // Имитация прогресса загрузки (в реальном приложении здесь был бы AJAX запрос с отслеживанием прогресса) var progressBar = progressDiv.querySelector('.progress-bar'); var width = 0; var interval = setInterval(function() { if (width >= 90) { clearInterval(interval); } else { width += 5; progressBar.style.width = width + '%'; } }, 300); } }); } // Подтверждение удаления файлов и папок var deleteForms = document.querySelectorAll('form[action*="delete_file"]'); deleteForms.forEach(function(form) { form.addEventListener('submit', function(e) { if (!confirm('Вы уверены, что хотите удалить этот элемент?')) { e.preventDefault(); return false; } }); }); // Функция для копирования ссылки на общий файл в буфер обмена var shareLinks = document.querySelectorAll('.share-link-copy'); shareLinks.forEach(function(link) { link.addEventListener('click', function(e) { e.preventDefault(); var shareUrl = this.getAttribute('data-share-url'); // Создаем временный элемент для копирования var tempInput = document.createElement('input'); tempInput.value = shareUrl; document.body.appendChild(tempInput); tempInput.select(); document.execCommand('copy'); document.body.removeChild(tempInput); // Показываем уведомление alert('Ссылка скопирована в буфер обмена!'); }); }); }); // Функция для предварительного просмотра изображений перед загрузкой function previewImage(input) { if (input.files && input.files[0]) { var reader = new FileReader(); reader.onload = function(e) { var previewContainer = document.getElementById('imagePreview'); if (!previewContainer) { previewContainer = document.createElement('div'); previewContainer.id = 'imagePreview'; previewContainer.className = 'mt-3 text-center'; input.parentNode.appendChild(previewContainer); } previewContainer.innerHTML = '