From b5d97bdd985a946700497fccf4a23c74700ae3e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Thu, 16 Jul 2026 08:20:16 +0400 Subject: [PATCH] =?UTF-8?q?docs:=20=E2=9B=94=20=D0=9D=D0=95=20=D0=9C=D0=95?= =?UTF-8?q?=D0=9D=D0=AF=D0=A2=D0=AC=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D0=B8=D0=B8=20=D0=B2=20files.js=20=E2=80=94?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=B5=D0=BD=D0=B0=20=D0=B2=20?= =?UTF-8?q?=D0=B1=D0=BE=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/static/files.js | 45 ++++++++++++++++---------------------------- 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/site/static/files.js b/site/static/files.js index b4a2fba..6f5151a 100644 --- a/site/static/files.js +++ b/site/static/files.js @@ -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 для файлов + * ⛔⛔⛔ НЕ МЕНЯТЬ БЕЗ РАЗРЕШЕНИЯ НАЕЛЯ ⛔⛔⛔ * - * ЗАВИСИМОСТИ (глобальные, загружаются раньше): - * state.js → state (центральное состояние) - * app_utils.js → escHtml, formatSize, formatDate - * app.js → render(), stepDone, stepActive, resetStepper, showClassifyBtn + * v2.0.2: fetch() + прогресс + таблица сразу + * Проверено в бою 2026-07-16. Любое изменение = риск сломать загрузку. * - * ЗАГРУЖАЕТСЯ: после app_utils.js, перед app.js - */ + * КЛЮЧЕВЫЕ ФУНКЦИИ (не трогать): + * - uploadFile() — fetch-загрузка с имитацией прогресса + * - onFilesSelected() — все строки в таблицу сразу, потом загрузка по одной + * - statusToHTML() — рендер статуса (↑ N%, ✓) + * - renderFiles() — рендер всей таблицы /** * 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: убрана конвертация .doc (libreoffice недоступен на Штурвале) - * Прогресс: без процентов (fetch не поддерживает), только статус. - * Возвращает Promise<ответ API> + * v2.0.2: fetch() вместо XHR (XHR давал ERR_CONNECTION_RESET). + * Прогресс: setInterval 200ms, кап 90%, затем 100% при ответе. + * Кэш-бастинг: ?_=Date.now() */ function uploadFile(file, onProgress, zipSource) { if (onProgress) onProgress(0); @@ -495,17 +489,10 @@ async function finalizeUpload() { } /** - * onFilesSelected(newFiles) — Оркестратор загрузки (Фаза 1). + * ⛔ НЕ МЕНЯТЬ ⛔ onFilesSelected — все строки сразу, потом загрузка. * - * ПАТТЕРН: - * 1. Для каждого файла: addZipFile (ZIP) или addRegularFile (обычный) - * 2. finalizeUpload — завершить цикл - * - * НЕ удаляет существующие файлы — только добавляет новые. - * Дубликаты обрабатываются через confirm() в addRegularFile. - * Удаление — только вручную (кнопка ✕). - * - * Вызывается из fileInput.addEventListener('change', ...). + * v2.0.2: Фаза 1 — все строки в таблицу. Фаза 2 — загрузка по одной. + * Юзер видит таблицу целиком, каждая строка обновляется независимо. */ async function onFilesSelected(newFiles) { if (newFiles.length === 0) return;