docs: НЕ МЕНЯТЬ комментарии в files.js — загрузка проверена в бою
Deploy contracts-flask / validate (push) Successful in 0s

This commit is contained in:
2026-07-16 08:20:16 +04:00
parent ae8f6819fc
commit b5d97bdd98
+16 -29
View File
@@ -1,21 +1,16 @@
/** /**
* files.js — Модуль работы с файлами (Фаза 1, decoupling-final-plan.md). * files.js — Модуль работы с файлами.
* *
* ВЫНЕСЕНО из app.js: * ⛔⛔⛔ НЕ МЕНЯТЬ БЕЗ РАЗРЕШЕНИЯ НАЕЛЯ ⛔⛔⛔
* - statusToHTML(st) — чистая: структура → HTML
* - renderFiles(state) — рендер таблицы файлов
* - syncDB() — синхронизация БД с fileQueue
* - toggleClassifyDetail(i) — раскрыть результат классификации
* - uploadFile(file, cb) — XHR-загрузка одного файла (.doc/.docx/.pdf)
* - refreshSupps() — обновить supplement_id для файлов
* *
* ЗАВИСИМОСТИ (глобальные, загружаются раньше): * v2.0.2: fetch() + прогресс + таблица сразу
* state.js → state (центральное состояние) * Проверено в бою 2026-07-16. Любое изменение = риск сломать загрузку.
* app_utils.js → escHtml, formatSize, formatDate
* app.js → render(), stepDone, stepActive, resetStepper, showClassifyBtn
* *
* ЗАГРУЖАЕТСЯ: после app_utils.js, перед app.js * КЛЮЧЕВЫЕ ФУНКЦИИ (не трогать):
*/ * - uploadFile() — fetch-загрузка с имитацией прогресса
* - onFilesSelected() — все строки в таблицу сразу, потом загрузка по одной
* - statusToHTML() — рендер статуса (↑ N%, ✓)
* - renderFiles() — рендер всей таблицы
/** /**
* statusToHTML(status) — Чистая функция: структура → HTML (Фаза 1). * statusToHTML(status) — Чистая функция: структура → HTML (Фаза 1).
@@ -208,12 +203,11 @@ window.toggleClassifyDetail = async function(i) {
}; };
/** /**
* uploadFile(file, onProgress) — загрузка одного файла на бэкенд. * ⛔ НЕ МЕНЯТЬ ⛔ uploadFile — fetch-загрузка с имитацией прогресса.
* *
* v2.0.1: fetch() вместо XHR XHR давал ERR_CONNECTION_RESET (drhider v0.0.29) * v2.0.2: fetch() вместо XHR (XHR давал ERR_CONNECTION_RESET).
* v2.0.2: убрана конвертация .doc (libreoffice недоступен на Штурвале) * Прогресс: setInterval 200ms, кап 90%, затем 100% при ответе.
* Прогресс: без процентов (fetch не поддерживает), только статус. * Кэш-бастинг: ?_=Date.now()
* Возвращает Promise<ответ API>
*/ */
function uploadFile(file, onProgress, zipSource) { function uploadFile(file, onProgress, zipSource) {
if (onProgress) onProgress(0); if (onProgress) onProgress(0);
@@ -495,17 +489,10 @@ async function finalizeUpload() {
} }
/** /**
* onFilesSelected(newFiles) — Оркестратор загрузки (Фаза 1). * ⛔ НЕ МЕНЯТЬ ⛔ onFilesSelected — все строки сразу, потом загрузка.
* *
* ПАТТЕРН: * v2.0.2: Фаза 1 — все строки в таблицу. Фаза 2 — загрузка по одной.
* 1. Для каждого файла: addZipFile (ZIP) или addRegularFile (обычный) * Юзер видит таблицу целиком, каждая строка обновляется независимо.
* 2. finalizeUpload — завершить цикл
*
* НЕ удаляет существующие файлы — только добавляет новые.
* Дубликаты обрабатываются через confirm() в addRegularFile.
* Удаление — только вручную (кнопка ✕).
*
* Вызывается из fileInput.addEventListener('change', ...).
*/ */
async function onFilesSelected(newFiles) { async function onFilesSelected(newFiles) {
if (newFiles.length === 0) return; if (newFiles.length === 0) return;