Files
enduro-trails/docs/work-items/ET-002/02-trz.md

4.5 KiB
Raw Blame History

type, work_item_id, title, version, status, created_at, authors
type work_item_id title version status created_at authors
trz ET-002 ТЗ: Чекбокс показа/скрытия POI в попапе рельефа 1 approved 2026-05-20
agent:analyst

ТЗ — ET-002: Чекбокс показа/скрытия POI в попапе рельефа

1. Функциональные требования

REQ-F-01: Чекбокс POI в попапе рельефа

Система должна отображать чекбокс «POI» в попапе кнопки «Рельеф» (terrain-popup), расположенный после чекбокса «Тропы» (trails-path-cb), отделённый горизонтальной линией (<hr>).

REQ-F-02: Состояние по умолчанию

При первом посещении (отсутствие ключа в localStorage) чекбокс POI должен быть включён (checked), маркеры POI видимы.

REQ-F-03: Скрытие POI

При снятии чекбокса система должна установить visibility: 'none' для слоёв poi-circles и poi-labels через map.setLayoutProperty().

REQ-F-04: Показ POI

При установке чекбокса система должна установить visibility: 'visible' для слоёв poi-circles и poi-labels.

REQ-F-05: Сохранение состояния

Система должна сохранять состояние чекбокса в localStorage под ключом poi-visible (значения: '1' — показывать, '0' — скрывать).

REQ-F-06: Восстановление состояния при загрузке

При загрузке страницы система должна:

  1. Прочитать значение localStorage.getItem('poi-visible')
  2. Если значение '0' — снять чекбокс и скрыть слои POI
  3. Если значение '1' или отсутствует (null) — установить чекбокс и показать слои POI

REQ-F-07: Синхронизация с layerState

Изменение чекбокса должно обновлять layerState.poi (true/false), чтобы состояние было консистентно с внутренней моделью приложения.

2. Нефункциональные требования

REQ-NF-01: Производительность

Переключение видимости POI должно происходить мгновенно (< 50 мс), без перезагрузки тайлов.

REQ-NF-02: Совместимость

Решение должно работать во всех браузерах, поддерживающих MapLibre GL JS (Chrome 80+, Firefox 78+, Safari 14+, Edge 80+).

REQ-NF-03: Мобильная адаптация

Чекбокс должен быть доступен и нажимаем на мобильных устройствах (touch target ≥ 44px).

REQ-NF-04: Отсутствие регрессий

Существующие чекбоксы (Тени рельефа, Перепады, Грунтовки, Тропы) должны продолжать работать без изменений.

3. UI-спецификация

Расположение в HTML

<!-- Внутри #terrain-popup, после trails-path-cb -->
<hr style="margin:6px 0;border-color:rgba(128,128,128,0.3)">
<label class="terrain-checkbox">
  <input type="checkbox" id="poi-visible-cb" onchange="onPoiCheckbox()" checked>
  <span>POI</span>
</label>

Стилизация

Использовать существующий класс terrain-checkbox — единообразие с остальными чекбоксами в попапе.

4. Данные

  • localStorage ключ: poi-visible
  • Значения: '1' (показывать) | '0' (скрывать)
  • MapLibre слои: poi-circles, poi-labels
  • Состояние в JS: layerState.poi

5. API

Нет изменений в backend API. Вся логика — клиентская.

6. Затрагиваемые файлы

Файл Изменение
src/web/index.html Добавить чекбокс в terrain-popup
src/web/app.js Добавить функцию onPoiCheckbox(), логику восстановления состояния при загрузке