nas / static /js /main.js
Starchik1's picture
Upload 25 files
9da4125 verified
// Основные функции 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 = '<div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" style="width: 0%"></div>';
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 = '<img src="' + e.target.result + '" class="img-thumbnail" style="max-height: 200px;">';
}
reader.readAsDataURL(input.files[0]);
}
}
// Функция для фильтрации файлов в текущей папке
function filterFiles() {
var input = document.getElementById('fileFilter');
var filter = input.value.toUpperCase();
var table = document.querySelector('table');
var tr = table.getElementsByTagName('tr');
for (var i = 1; i < tr.length; i++) { // Начинаем с 1, чтобы пропустить заголовок таблицы
var td = tr[i].getElementsByTagName('td')[0]; // Первая ячейка с именем файла
if (td) {
var txtValue = td.textContent || td.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
tr[i].style.display = '';
} else {
tr[i].style.display = 'none';
}
}
}
}