tmp_27.06.2026
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| tmp_27.06.2026 [2026/06/27 14:48] – VladPolskiy | tmp_27.06.2026 [2026/06/27 15:35] (текущий) – VladPolskiy | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | |||
| // assets/ | // assets/ | ||
| document.addEventListener(' | document.addEventListener(' | ||
| - | | + | // --- НАДЕЖНОЕ УПРАВЛЕНИЕ МОДАЛКОЙ С ДЕБАГ-МАЯКОМ --- |
| - | const btnDownloadZip | + | // --- УПРАВЛЕНИЕ ЗАГРУЗЧИКОМ ПРОЕКТОВ --- |
| - | const filesList | + | |
| - | const textEditor | + | const projectModal |
| - | const tabButtons | + | const btnModalCancel |
| + | const btnModalSubmit | ||
| + | const newProjectName | ||
| + | const modalErrorBox | ||
| + | |||
| + | const folderInput | ||
| + | const btnSelectFolder | ||
| + | const folderStatus | ||
| + | |||
| + | if (btnCreateProject && projectModal) { | ||
| + | |||
| + | // Функция проверки условий для активации кнопки " | ||
| + | function checkInputsValidity() { | ||
| + | const nameVal = newProjectName.value.trim(); | ||
| + | const hasFiles = folderInput.files && folderInput.files.length > 0; | ||
| + | |||
| + | if (nameVal !== "" | ||
| + | btnModalSubmit.disabled = false; // Включаем кнопку | ||
| + | btnModalSubmit.style.opacity = " | ||
| + | } else { | ||
| + | btnModalSubmit.disabled = true; // Выключаем кнопку | ||
| + | btnModalSubmit.style.opacity = " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Следим за вводом имени | ||
| + | newProjectName.addEventListener(' | ||
| + | |||
| + | // Клик по кастомной кнопке | ||
| + | btnSelectFolder.addEventListener('click', | ||
| + | folderInput.click(); | ||
| + | }); | ||
| + | |||
| + | // Следим за тем, что пользователь выбрал папку на ПК | ||
| + | folderInput.addEventListener(' | ||
| + | if (this.files && this.files.length > 0) { | ||
| + | // Берем имя корневой папки, которую выбрал юзер | ||
| + | const firstFile = this.files[0]; | ||
| + | const rootFolderName = firstFile.webkitRelativePath.split('/' | ||
| + | folderStatus.innerHTML = `Выбрано файлов: | ||
| + | } else { | ||
| + | folderStatus.textContent = " | ||
| + | } | ||
| + | checkInputsValidity(); | ||
| + | }); | ||
| + | |||
| + | // Открытие модалки | ||
| + | btnCreateProject.addEventListener(' | ||
| + | newProjectName.value = ''; | ||
| + | folderInput.value = ''; | ||
| + | folderStatus.textContent = " | ||
| + | if (modalErrorBox) modalErrorBox.classList.add(' | ||
| + | btnModalSubmit.disabled = true; | ||
| + | btnModalSubmit.style.opacity = " | ||
| + | projectModal.classList.remove(' | ||
| + | newProjectName.focus(); | ||
| + | }); | ||
| + | |||
| + | // Отмена | ||
| + | btnModalCancel.addEventListener(' | ||
| + | projectModal.classList.add(' | ||
| + | }); | ||
| + | |||
| + | // Нажатие на кнопку " | ||
| + | btnModalSubmit.addEventListener(' | ||
| + | const projectName = newProjectName.value.trim(); | ||
| + | if (modalErrorBox) modalErrorBox.classList.add(' | ||
| + | |||
| + | const formData = new FormData(); | ||
| + | formData.append(' | ||
| + | |||
| + | // КРИТИЧЕСКИ ВАЖНО: Пакуем файлы вместе с их путями вложения | ||
| + | for (let i = 0; i < folderInput.files.length; | ||
| + | let file = folderInput.files[i]; | ||
| + | formData.append(' | ||
| + | // Передаем бэкенду относительный путь (например: | ||
| + | formData.append(' | ||
| + | } | ||
| + | |||
| + | // Меняем статус кнопки на время тяжелой загрузки | ||
| + | btnModalSubmit.disabled = true; | ||
| + | btnModalSubmit.textContent = " | ||
| + | |||
| + | try { | ||
| + | const response = await fetch(' | ||
| + | method: ' | ||
| + | body: formData | ||
| + | }); | ||
| + | const result = await response.json(); | ||
| + | |||
| + | if (result.success) { | ||
| + | projectModal.classList.add(' | ||
| + | btnModalSubmit.textContent = " | ||
| + | location.reload(); | ||
| + | } else { | ||
| + | btnModalSubmit.disabled = false; | ||
| + | btnModalSubmit.textContent = " | ||
| + | if (modalErrorBox) { | ||
| + | modalErrorBox.textContent = result.error; | ||
| + | modalErrorBox.classList.remove(' | ||
| + | } | ||
| + | } | ||
| + | } catch (error) { | ||
| + | // Возвращаем кнопку в исходное рабочее состояние | ||
| + | btnModalSubmit.disabled = false; | ||
| + | btnModalSubmit.textContent = " | ||
| + | |||
| + | // КРАСИВО ВЫВОДИМ ОШИБКУ СЕТИ В ТВОЮ ПЛАШКУ БЕЗ ВСЯКИХ АЛЕРТОВ | ||
| + | if (modalErrorBox) { | ||
| + | modalErrorBox.textContent = " | ||
| + | modalErrorBox.classList.remove(' | ||
| + | } | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| // Локальное хранилище для текстов текущего выбранного релиза, | // Локальное хранилище для текстов текущего выбранного релиза, | ||
| Строка 99: | Строка 218: | ||
| }); | }); | ||
| }); | }); | ||
| + | |||
| + | |||
tmp_27.06.2026.1782560884.txt.gz · Последнее изменение: — VladPolskiy
