fix: harden browser file picker and remove legacy
This commit is contained in:
+6
-30
@@ -1,7 +1,7 @@
|
||||
# Справочник кода Upload Platform
|
||||
|
||||
Документ описывает актуальную picker-only реализацию. VM upload, backend sessions
|
||||
и API загрузки являются legacy и в текущем коде не используются.
|
||||
и API загрузки относятся к отменённой архитектуре и в текущем коде отсутствуют.
|
||||
|
||||
## Архитектура
|
||||
|
||||
@@ -71,7 +71,7 @@ Flask отдаёт страницу и готовый bundle. Все выбра
|
||||
|
||||
| Функция | Вход | Выход | Побочные эффекты |
|
||||
|---|---|---|---|
|
||||
| `rebaseTree(root, prefix)` | Дерево и префикс папки | То же дерево | Рекурсивно меняет `path`; для leaf создаёт File с новым именем. |
|
||||
| `rebaseTree(root, prefix)` | Дерево и префикс папки | То же дерево | Рекурсивно меняет `path`; для leaf сохраняет базовое имя `File.name`. |
|
||||
|
||||
Модуль является единственной реализацией rebasing для ZIP внутри выбранной папки
|
||||
и для nested ZIP.
|
||||
@@ -107,26 +107,6 @@ callback задан. `finally` обязательно освобождает `bu
|
||||
`render` считает все leaf-файлы, включая свернутые группы. `renderNode` показывает
|
||||
дочерние строки только при `expanded === true`.
|
||||
|
||||
### `init_upload_table.js` (legacy)
|
||||
|
||||
| Функция | Вход | Выход | Назначение |
|
||||
|---|---|---|---|
|
||||
| `removeFileMeta(state, node)` | state и удаляемое поддерево | `void` | Рекурсивно удаляет dedup-ключи. Внутренняя функция. |
|
||||
| `removeNode(state, id)` | state и id | `void` | Удаляет узел из родительского массива. Внутренняя функция. |
|
||||
| `initUploadTable(cfg)` | `allowedExt` и четыре DOM-элемента | API-объект | Создаёт state, события, render и публичные операции. |
|
||||
|
||||
Публичный API legacy-совместимости:
|
||||
|
||||
| Метод | Вход | Результат |
|
||||
|---|---|---|
|
||||
| `pickFiles()` | нет | Открывает обычный file input. |
|
||||
| `pickFolder()` | нет | Открывает folder input. |
|
||||
| `addFiles(files)` | FileList/Array | Добавляет файлы с фильтрацией и ZIP-разбором. |
|
||||
| `getFiles()` | нет | `{path, name, size, file}[]` только для leaf. |
|
||||
| `remove(id)` | id узла | Удаляет узел и его dedup-ключи. |
|
||||
| `render()` | нет | Перерисовывает текущий state. |
|
||||
| `clear()` | нет | Очищает дерево и dedup Set. |
|
||||
|
||||
## `upload/frontend/zip`
|
||||
|
||||
### `list_zip_files.js`
|
||||
@@ -134,7 +114,7 @@ callback задан. `finally` обязательно освобождает `bu
|
||||
| Функция | Вход | Выход | Назначение |
|
||||
|---|---|---|---|
|
||||
| `extensionAllowed(name, allowedExt)` | Имя и расширения | boolean | Проверяет расширение. Внутренняя. |
|
||||
| `makeFile(data, name)` | Байты и путь | `File` | Создаёт browser File. Внутренняя. |
|
||||
| `makeFile(data, name)` | Байты и путь | `File` | Создаёт browser File с базовым именем. Внутренняя. |
|
||||
| `safeEntryParts(entryName)` | Сырой ZIP-путь | сегменты или null | Отбрасывает traversal и опасные пути. Внутренняя. |
|
||||
| `node(kind, name, path, children, file)` | Метаданные узла | node | Создаёт узел. Внутренняя. |
|
||||
| `addPath(root, parts, fileNode)` | Дерево, сегменты, узел | `void` | Создаёт папки и вставляет узел. Внутренняя. |
|
||||
@@ -168,7 +148,7 @@ vendor script не требуется.
|
||||
| `VERSION` | константа | Версия страницы |
|
||||
| `index()` / `/` | HTTP GET | HTML с version и config |
|
||||
| `health()` / `/health` | HTTP GET | `ok`, HTTP 200 |
|
||||
| `upload_frontend(filename)` | HTTP GET и относительный путь | Legacy-файл из `upload/frontend` |
|
||||
| `upload_frontend(filename)` | HTTP GET и относительный путь | Совместимый маршрут для исходных frontend-модулей |
|
||||
| `file_picker_dist(filename)` | HTTP GET и имя bundle | Bundle из `dist` |
|
||||
|
||||
### `site/templates/index.html`
|
||||
@@ -176,9 +156,5 @@ vendor script не требуется.
|
||||
Шаблон создаёт mount, подключает IIFE bundle с query-параметром версии для
|
||||
сброса browser cache и вызывает `FilePicker.initFilePicker`.
|
||||
|
||||
## Legacy
|
||||
|
||||
`upload/frontend/table/set_status.js` не импортируется актуальной страницей и
|
||||
сохранён как legacy-заготовка. Vendor `site/static/vendor/fflate.min.js` не
|
||||
документируется построчно: это внешняя библиотека, используемая как готовый
|
||||
runtime dependency.
|
||||
Vendor `site/static/vendor/fflate.min.js` не документируется построчно: это
|
||||
внешняя библиотека, используемая как готовый runtime dependency.
|
||||
|
||||
Reference in New Issue
Block a user