diff --git a/HISTORY/2026-09-06-layer2-ux-first-file-timer.md b/HISTORY/2026-09-06-layer2-ux-first-file-timer.md new file mode 100644 index 0000000..fefa720 --- /dev/null +++ b/HISTORY/2026-09-06-layer2-ux-first-file-timer.md @@ -0,0 +1,26 @@ +# 2026-09-06: UX-индикация ожидания первого файла + +## Наблюдение + +При начале загрузки пользователь мог увидеть длительное отсутствие визуального прогресса на первом файле. Причина: первый PUT ещё не успел вызвать событие `XHR upload.onprogress`, а цепочка дополнительно выполняет первичное установление соединений и передачу файла в буфер ВМ. + +Это не является зависанием, но без пояснения пользователь может нажать «Отмена». + +## Изменение + +В demo `site/templates/index.html` добавлены: + +- отдельный блок текущей фазы загрузки; +- пояснение, что выполняются соединение с буфером ВМ, PUT, перенос в RAM и очистка буфера; +- таймер `Прошло: MM:SS`, запускающийся до первого сетевого ответа; +- остановка таймера при завершении, ошибке или отмене; +- сообщение о том, что уже переданные до отмены файлы остаются в RAM сессии. + +В `PLAN.md` добавлен TODO следующей UX-правки: отдельные этапы `PUT`, `GET`, `DELETE`, прогресс пачки, обратная связь при ретраях и проверка мобильного сценария. + +## Проверка + +- `node build.mjs` выполнен успешно. +- `node --test tests/test_upload_layer2.test.mjs`: 9 тестов пройдены. +- `python3 -m pytest tests/ -v`: 10 тестов пройдены. +- Версия приложения повышена до `0.2.1` в `package.json` и `site/app.py`. diff --git a/PLAN.md b/PLAN.md index a2415cb..6758a7f 100644 --- a/PLAN.md +++ b/PLAN.md @@ -9,6 +9,15 @@ > Актуальное описание: [README.md](README.md) и > [upload/README.md](upload/README.md). История перехода на picker-only и > исправлений находится в [HISTORY/2026-09-05-file-picker.md](HISTORY/2026-09-05-file-picker.md). + +## TODO следующей правки: UX загрузки + +- Показывать таймер и понятное пояснение уже до первого сетевого ответа. +- Отдельно отображать этапы `PUT в буфер ВМ`, `GET в RAM`, `DELETE из буфера`. +- Показывать прогресс пачки: текущий файл, общее количество, уже доставленные файлы. +- Не оставлять пользователя без обратной связи при DNS/TLS/CORS-задержке и повторных попытках. +- Перед отменой явно сообщать, сколько файлов уже доставлено в RAM и что будет сохранено. +- Проверить UX на мобильном экране и при медленном соединении. > > Весь текст ниже сохранён только как исторический план и не должен использоваться > для новых изменений без отдельного пересмотра требований. diff --git a/package.json b/package.json index 6ee2367..0b678f5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "upload-platform-file-picker", "private": true, - "version": "0.2.0", + "version": "0.2.1", "type": "module", "scripts": { "build": "node build.mjs", diff --git a/site/app.py b/site/app.py index 0103b07..be21ce1 100644 --- a/site/app.py +++ b/site/app.py @@ -28,7 +28,7 @@ try: except (OSError, json.JSONDecodeError): CONFIG = DEFAULT_CONFIG -VERSION = "0.2.0" +VERSION = "0.2.1" app = Flask( __name__, diff --git a/site/static/style.css b/site/static/style.css index 861fbfc..7cdd352 100644 --- a/site/static/style.css +++ b/site/static/style.css @@ -28,6 +28,9 @@ button.quiet { color: #5d6a61; background: transparent; } button:disabled { opacity: .45; cursor: not-allowed; } /* Резервная область сообщения интегратора сохраняет высоту и не двигает таблицу. */ .status { min-height: 22px; color: #56745f; font: 13px sans-serif; } +.upload-progress-explanation { display: grid; gap: 4px; margin-top: 14px; color: #46604e; font: 13px/1.45 sans-serif; } +.upload-progress-explanation strong { color: #1b4d3e; } +.upload-progress-explanation span:last-child { color: #6b796f; font-variant-numeric: tabular-nums; } /* Горизонтальный scroll на узких экранах не ломает таблицу дерева. */ .table-wrap { overflow-x: auto; border-top: 1px solid #b9c7ba; } table { width: 100%; border-collapse: collapse; font: 14px/1.4 sans-serif; } diff --git a/site/templates/index.html b/site/templates/index.html index 9c4a2db..9606108 100644 --- a/site/templates/index.html +++ b/site/templates/index.html @@ -30,6 +30,11 @@ +