/** * Системный компонент: Управление модальным окном Медиа-менеджера и AJAX загрузкой */ function openMediaModal() { var modal = document.getElementById("mediaModal"); if (modal) { modal.style.display = "flex"; document.getElementById("uploadPrompt").innerText = "📄 Кликните сюда для выбора картинки"; document.getElementById("modalFileInp").value = ""; } } function closeMediaModal() { var modal = document.getElementById("mediaModal"); if (modal) modal.style.display = "none"; } /** * Асинхронная отправка файла на бэкенд без перезагрузки страницы */ function sendModalFile(event) { // Жестко глушим любые системные события браузера, чтобы предотвратить submit формы редактора if (event) { event.preventDefault(); event.stopPropagation(); } var fileInp = document.getElementById("modalFileInp"); if (!fileInp || !fileInp.files || fileInp.files.length === 0) { alert("Пожалуйста, выберите файл для загрузки."); return; } var urlParams = new URLSearchParams(window.location.search); var pageId = urlParams.get('id') || 'start'; var targetFile = fileInp.files.item(0); var formData = new FormData(); formData.append("uploadfile", targetFile); // Выполняем асинхронный фоновый запрос к бэкенду fetch('?id=' + encodeURIComponent(pageId) + '&do=api_upload', { method: 'POST', body: formData }) .then(function(response) { if (!response.ok) { throw new Error("Ошибка сети: сервер вернул статус " + response.status); } return response.json(); }) .then(function(data) { if (data.success) { // Вставляем полученный тег в поле редактора insertTags(data.tag, '', ''); closeMediaModal(); } else { alert("Ошибка сервера: " + data.error); } }) .catch(function(error) { console.error('AJAX Error:', error); alert("Критическая ошибка при фоновой отправке файла: " + error.message); }); } document.addEventListener("DOMContentLoaded", function() { var fileInp = document.getElementById("modalFileInp"); if (fileInp) { fileInp.addEventListener("change", function() { if (this.files && this.files.length > 0) { var currentFile = this.files.item(0); document.getElementById("uploadPrompt").innerText = "✅ Выбран файл: " + currentFile.name; } }); } });