ET-005: переключатель единиц измерения расстояний (км/мили) #6

Merged
admin merged 9 commits from feature/ET-005- into main 2026-05-22 01:50:13 +03:00
Owner

Summary

  • Новый модуль src/web/units.js — централизованный форматтер расстояний: выбор единицы (км/мили), персистентность в localStorage (ключ distance_unit, дефолт km), Units.formatDistance() как единственный источник истины.
  • Сегментированный toggle км/мили добавлен в попап рельефа (переиспользован готовый компонент .seg-control).
  • Все места захардкоженного форматирования в app.js переведены на Units.formatDistance(); пересчёт видимых расстояний выполняет единый оркестратор onUnitChange() по событию unitchange (карточки маршрутов, лист точек, мини-карточка, линейка, масштабная линейка, связка, «красивый» маршрут).
  • Каноническая единица — метры; конвертация только в момент форматирования (без дрейфа округления при многократном переключении).

Соответствие ADR / рискам

  • ADR-0001 (Вариант A): клиентское решение, units.js подключён строго перед app.js (R7).
  • R1: grep-аудит — все display call-sites переведены на форматтер.
  • R3: масштабная линейка сделана unit-aware.
  • R4: единый разделитель дробной части (запятая).
  • R5: formatDistance(meters, {precision}) — карточки сохраняют целочисленный вид.
  • R6: экспорт GPX и параметры построения маршрута остаются метрическими.

Test plan

  • make lint — ruff: All checks passed
  • make test — 31 passed, 4 skipped (пре-существующие OSRM-интеграционные)
  • make build — Docker-образ собирается
  • JS unit-тесты tests/unit/units.test.js (20 тестов, TP-01..TP-04, AC-2/AC-3) через node --test
  • Python-обёртка tests/unit/test_unit_toggle.py — статические проверки структуры + запуск JS-тестов
  • e2e TP-05 (mobile 375px) — требует Playwright, вне доступной инфраструктуры

Refs: ET-005

## Summary - Новый модуль `src/web/units.js` — централизованный форматтер расстояний: выбор единицы (км/мили), персистентность в `localStorage` (ключ `distance_unit`, дефолт `km`), `Units.formatDistance()` как единственный источник истины. - Сегментированный toggle км/мили добавлен в попап рельефа (переиспользован готовый компонент `.seg-control`). - Все места захардкоженного форматирования в `app.js` переведены на `Units.formatDistance()`; пересчёт видимых расстояний выполняет единый оркестратор `onUnitChange()` по событию `unitchange` (карточки маршрутов, лист точек, мини-карточка, линейка, масштабная линейка, связка, «красивый» маршрут). - Каноническая единица — метры; конвертация только в момент форматирования (без дрейфа округления при многократном переключении). ## Соответствие ADR / рискам - ADR-0001 (Вариант A): клиентское решение, `units.js` подключён строго перед `app.js` (R7). - R1: grep-аудит — все display call-sites переведены на форматтер. - R3: масштабная линейка сделана unit-aware. - R4: единый разделитель дробной части (запятая). - R5: `formatDistance(meters, {precision})` — карточки сохраняют целочисленный вид. - R6: экспорт GPX и параметры построения маршрута остаются метрическими. ## Test plan - [x] `make lint` — ruff: All checks passed - [x] `make test` — 31 passed, 4 skipped (пре-существующие OSRM-интеграционные) - [x] `make build` — Docker-образ собирается - [x] JS unit-тесты `tests/unit/units.test.js` (20 тестов, TP-01..TP-04, AC-2/AC-3) через `node --test` - [x] Python-обёртка `tests/unit/test_unit_toggle.py` — статические проверки структуры + запуск JS-тестов - [ ] e2e TP-05 (mobile 375px) — требует Playwright, вне доступной инфраструктуры Refs: ET-005
admin added 7 commits 2026-05-21 22:36:38 +03:00
docs: init ET-005 business request
All checks were successful
CI / lint (push) Successful in 4s
CI / test (push) Successful in 4s
CI / build (push) Successful in 2s
d16a4747a0
docs(ET-005): BRD
All checks were successful
CI / lint (push) Successful in 4s
CI / test (push) Successful in 4s
CI / build (push) Successful in 1s
420df39347
docs(ET-005): TRZ
All checks were successful
CI / lint (push) Successful in 4s
CI / test (push) Successful in 4s
CI / build (push) Successful in 1s
2f2beb0447
docs(ET-005): Acceptance Criteria
All checks were successful
CI / lint (push) Successful in 3s
CI / test (push) Successful in 4s
CI / build (push) Successful in 2s
2d29106c45
docs(ET-005): Test Plan
All checks were successful
CI / lint (push) Successful in 4s
CI / test (push) Successful in 4s
CI / build (push) Successful in 1s
2458a3efe0
architect(ET-005): ADR, infra-requirements, data-requirements, tech-risks
All checks were successful
CI / lint (push) Successful in 4s
CI / test (push) Successful in 5s
CI / build (push) Successful in 1s
bafbea2dab
feat(web): переключатель единиц измерения расстояний (км/мили)
All checks were successful
CI / lint (push) Successful in 4s
CI / test (push) Successful in 5s
CI / build (push) Successful in 2s
CI / lint (pull_request) Successful in 4s
CI / test (pull_request) Successful in 4s
CI / build (pull_request) Successful in 1s
2fe5cfe453
Добавляет сегментированный toggle км/мили в попап рельефа. Новый модуль
src/web/units.js — единственный источник истины по выбору единицы, её
персистентности (localStorage: distance_unit, дефолт km) и форматированию
отображаемых расстояний (Units.formatDistance).

Все места форматирования в app.js переведены на централизованный
форматтер; пересчёт всех видимых расстояний выполняет единый оркестратор
onUnitChange по событию unitchange (карточки маршрутов, лист точек,
линейка, масштабная линейка, связка, «красивый» маршрут).

Экспорт GPX и параметры построения маршрута остаются метрическими
(риск R6). units.js подключается строго перед app.js (риск R7).

Refs: ET-005
admin added 1 commit 2026-05-21 22:59:25 +03:00
reviewer(ET): auto-commit from reviewer run_id=11
All checks were successful
CI / lint (push) Successful in 4s
CI / test (push) Successful in 5s
CI / lint (pull_request) Successful in 3s
CI / build (push) Successful in 2s
CI / test (pull_request) Successful in 4s
CI / build (pull_request) Successful in 3s
d32ad8f018
claude-bot approved these changes 2026-05-22 00:22:58 +03:00
Dismissed
claude-bot left a comment
Collaborator

APPROVED by reviewer agent (run_id=11). 0 P0/P1 findings. See docs/work-items/ET-005/12-review.md

APPROVED by reviewer agent (run_id=11). 0 P0/P1 findings. See docs/work-items/ET-005/12-review.md
admin added 1 commit 2026-05-22 00:29:14 +03:00
tester(ET): auto-commit from tester run_id=12
All checks were successful
CI / lint (push) Successful in 4s
CI / test (push) Successful in 4s
CI / lint (pull_request) Successful in 4s
CI / test (pull_request) Successful in 5s
CI / build (push) Successful in 3s
CI / build (pull_request) Successful in 1s
3f6e7ae284
admin dismissed claude-bot's review 2026-05-22 00:29:14 +03:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

claude-bot approved these changes 2026-05-22 01:50:06 +03:00
claude-bot left a comment
Collaborator

Re-approved after tester commit. All tests PASS.

Re-approved after tester commit. All tests PASS.
admin merged commit 6effac9cce into main 2026-05-22 01:50:13 +03:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/enduro-trails#6