35 lines
2.4 KiB
Markdown
35 lines
2.4 KiB
Markdown
# v0.0.66 — Блокировки UI: предсказуемое поведение во всех состояниях (2026-08-24)
|
|
|
|
_ux-frontend. По замечанию: во время обработки «Выбрать файлы» оставалась активной —
|
|
юзер мог менять список и ломать состояние/индексы. Требование: ВСЁ предсказуемо,
|
|
учтены ВСЕ действия юзера._
|
|
|
|
## Состояния и доступные действия
|
|
|
|
| Состояние | Выбрать файлы | ✕ удалить | Обфусцировать | Прервать | Скачать | Новая сессия |
|
|
|---|---|---|---|---|---|---|
|
|
| Простой | ✅ | ✅ | ✅ | — | — | — |
|
|
| Загрузка (1/2) | 🔒 | 🔒 | 🔒 | — | — | — |
|
|
| Обработка (2/2) | 🔒 | 🔒 | 🔒 | ✅ | — | — |
|
|
| Результат готов | 🔒 | 🔒 | 🔒 | — | ✅ | ✅ |
|
|
| Ошибка | ✅ | ✅ | ✅ | — | — | — |
|
|
|
|
## Реализация
|
|
- Глобальный флаг `busy` + `setBusy(b)`: блокирует `fileInput` и скрывает кнопки «✕»
|
|
(CSS `body.busy .remove-btn { display:none }`).
|
|
- Двойная защита: обработчики `change` (выбор файлов) и `rm` (удаление) игнорируют
|
|
вызовы при `busy`.
|
|
- `uploadFiles()`: guard `if (busy) return` + `setBusy(true)`; ранние выходы (ошибки
|
|
фазы 1, test-режим) — `setBusy(false)`.
|
|
- **Заморозка сессии после результата**: `complete`/`cancelled` → `sessionDone=true`,
|
|
`fi`/`uploadBtn` выключены, показаны «Скачать» и новая кнопка **«🔄 Новая сессия»**
|
|
(`resetAll`). Ошибки — снимают блокировку (можно повторить).
|
|
- При закрытии вкладки (beforeunload) — `resetAll` сбрасывает всё.
|
|
|
|
## Найденный и исправленный баг при правке
|
|
- При добавлении заморозки случайно затёрлась строка `activeES.addEventListener('complete', ...)`
|
|
— JS-синтаксис сломался («Missing catch»). Восстановлено ДО пуша; `node --check` — OK.
|
|
|
|
## Проверка
|
|
- `node --check` (извлечённый <script>) — OK; `py_compile` — OK.
|