# v0.0.47 — Выбор целой папки (рекурсивно, как раскрытие ZIP) — 2026-08-19 ## Проблема Нативный `` (`site/templates/index.html:133`) не умеет выбирать папку целиком: клик по папке просто «входит» внутрь. Нужно выбирать целую папку и рекурсивно забирать все файлы — как при раскрытии архива. ## Решение - Второй `` + кнопка «📁 Выбрать папку» (вызов `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. Регрессия: обычный «Выбрать файлы» работает как раньше.