File size: 5,921 Bytes
9da4125
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// Основные функции 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';
            }
        }
    }
}