Files
drhider/History/2026-08-19-folder-select-recursive.md
T

46 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# v0.0.47 — Выбор целой папки (рекурсивно, как раскрытие ZIP) — 2026-08-19
## Проблема
Нативный `<input type="file">` (`site/templates/index.html:133`) не умеет выбирать
папку целиком: клик по папке просто «входит» внутрь. Нужно выбирать целую папку
и рекурсивно забирать все файлы — как при раскрытии архива.
## Решение
- Второй `<input type="file" id="folderInput" webkitdirectory multiple>` + кнопка
«📁 Выбрать папку» (вызов `folderInput.click()`).
`webkitdirectory` взаимоисключающ с обычным выбором файлов на одном input —
поэтому отдельный input, а не переключатель.
- Браузер сам отдаёт ВСЕ файлы папки рекурсивно (включая подпапки) с полем
`file.webkitRelativePath`. Имя добавляемого файла = `webkitRelativePath`
(структура папок сохраняется до итогового ZIP, как у архива сохраняется
внутренний `e.name`).
- Обработка — та же логика, что у раскрытия ZIP (`listZipFiles`):
- `.zip` → рекурсивное раскрытие (вложенные zip тоже);
- документы `.pdf .doc .docx .txt .md` → в таблицу;
- прочее (картинки и т.п.) → пропускается.
- Сортировка входящих файлов по `webkitRelativePath` — детерминированный порядок.
## Файлы
- `site/templates/index.html`
- CSS: `.folder-btn` (полная ширина), `#folderInput { display:none }`
- HTML: скрытый `#folderInput` + кнопка в `.file-input-wrap`
- JS: `const folderInput`, обработчик `change` (рекурсия+фильтр+имена с путями)
- `resetAll()` и `load` — сброс `folderInput.value`
- `site/app.py` — VERSION 0.0.46 → 0.0.47
## Бэкенд — не менялся
- `extract_text` (drhider/extractor.py:204) берёт расширение через
`os.path.splitext` — пути в имени не мешают.
- `build_zip` (drhider/builder.py) пишет `ZipInfo` с путями как есть;
`_resolve_name` дедуплицирует по полному имени — одноимённые файлы в разных
подпапках не сталкиваются.
- Аплоад идёт из массива `sf` (`uploadFiles`), а не из `fi.files` — файлы из
папки уходят на бэк обычным путём.
## Проверка
1. «Выбрать папку» → папка с подпапками, вложенными .zip и картинками →
в таблице только документы, рекурсивно; .zip раскрыт; картинки пропущены;
имена с путями.
2. Обфускация → скачать ZIP → вложенность папок сохранена, всё обфусцировано.
3. Регрессия: обычный «Выбрать файлы» работает как раньше.