auto-sync: 2026-05-06 10:10:01
This commit is contained in:
25
memory/2026-05-06.md
Normal file
25
memory/2026-05-06.md
Normal file
@@ -0,0 +1,25 @@
|
||||
|
||||
## Enduro Trails — работа 06.05.2026
|
||||
|
||||
### Линейка (ruler) — полный UX редизайн
|
||||
- Расстояние сегмента под каждым маркером, первая точка зелёная "Старт"
|
||||
- Крестик × (button, 32px tap zone) справа от расстояния в одной строке
|
||||
- `anchor: 'center'` — маркер точно привязан к точке тапа
|
||||
- `updateRulerLabels()` — пересчёт всех расстояний и цветов после удаления точки
|
||||
- Панель `#ruler-info`: компактная (fit-content), показывается только после первой точки
|
||||
- Toast "Тапни на карту" при входе в режим, исчезает через 3 сек или при первом тапе
|
||||
- Кнопки: ✓ Завершить (выход без удаления) + ✕ deleteRuler() (удалить всё)
|
||||
- Тап на линию/маркер → показать панель + возобновить режим рисования
|
||||
- Логика tb-ruler: нет линейки→рисовать, режим активен→скрыть линейку, скрыта→показать+рисовать
|
||||
|
||||
### Метки (named markers)
|
||||
- Починен баг: popup явно закрывается перед удалением маркера
|
||||
|
||||
### Диагностика сброса сессии
|
||||
- Найдена причина: cron `heartbeat-session-reset` каждую ночь в 00:00 UTC удалял `agent:main:main`
|
||||
- Cron отключён (enabled: false)
|
||||
- Реальная причина пересоздания DM сессий — компакция (не cron)
|
||||
|
||||
### Бэклог добавлен
|
||||
- F-20: перетаскивание точек линейки
|
||||
- F-21: сохранение линейки между сессиями
|
||||
@@ -1,7 +1,7 @@
|
||||
# BRD: Enduro Trails — Фаза 5 «Редизайн»
|
||||
|
||||
**Версия:** 2.0
|
||||
**Дата:** 2026-05-05
|
||||
**Версия:** 2.1
|
||||
**Дата:** 2026-05-06
|
||||
**Автор:** Стрим 🌊
|
||||
**Статус:** ✅ Реализовано (с дополнениями)
|
||||
|
||||
@@ -81,9 +81,51 @@
|
||||
- Кнопки: добавить точку, развернуть sheet
|
||||
- `miniAddWaypoint()` — теперь корректно устанавливает `routeMode = true` перед `addingWaypoint = true`
|
||||
|
||||
### ✅ Поиск точек маршрута (добавлено 05.05.2026)
|
||||
|
||||
- Убран верхний search bar, поиск перенесён прямо в список waypoints
|
||||
- Кнопка-лупа в каждом `wl-item` → inline Nominatim поиск
|
||||
- `btn-theme` перенесён в `map-controls-r`
|
||||
|
||||
### ✅ Метки (named markers, добавлено 05.05.2026)
|
||||
|
||||
- 6 типов меток: 🚩 Флаг, 🏕 Лагерь, 🔧 Ремонт, ⛽ Заправка, 💧 Вода, 📍 Точка
|
||||
- Сохраняются в `localStorage` (лимит 50)
|
||||
- Попап с координатами и кнопками: → Точка A, → Точка B, 🗑 Удалить
|
||||
- Баг исправлен: `removeMarker()` теперь явно закрывает попап перед удалением маркера
|
||||
|
||||
### ✅ Линейка — полный UX редизайн (06.05.2026)
|
||||
|
||||
**Маркеры:**
|
||||
- Первая точка — зелёная (`#2EA043`) с подписью «Старт»
|
||||
- Остальные точки — синие с расстоянием сегмента от предыдущей точки
|
||||
- Крестик × (кнопка `button`) справа от расстояния в одной строке — удаляет точку
|
||||
- `anchor: 'center'` — маркер точно привязан к точке тапа
|
||||
- Label абсолютно позиционирован ниже dot
|
||||
|
||||
**Панель общего расстояния (`#ruler-info`):**
|
||||
- Компактная: `width: fit-content`, `max-width: 320px`, прижата к левому краю
|
||||
- Показывается только после добавления первой точки
|
||||
- Кнопка **✓ Завершить** — выход из режима рисования, линейка остаётся на карте
|
||||
- Кнопка **✕** (`deleteRuler()`) — удаляет всю линейку
|
||||
|
||||
**Логика кнопки тулбара (tb-ruler):**
|
||||
- Нет линейки → войти в режим рисования + показать toast-подсказку
|
||||
- Режим активен → выйти из режима, скрыть линейку (точки сохраняются в памяти)
|
||||
- Линейка скрыта → показать линейку и войти в режим рисования
|
||||
|
||||
**Toast-подсказка:**
|
||||
- «Тапни на карту чтобы добавить точку» — появляется при входе в режим, исчезает через 3 сек или при первом тапе
|
||||
|
||||
**Восстановление панели:**
|
||||
- Тап на линию (`ruler-line`) → показать панель + возобновить режим рисования
|
||||
- Тап на маркер линейки → то же самое
|
||||
|
||||
**`updateRulerLabels()`** — пересчитывает все расстояния и цвета точек с нуля после удаления любой точки
|
||||
|
||||
---
|
||||
|
||||
## 4. Баги исправленные в ходе фазы
|
||||
## 4. Баги исправленные в ходе фазы (включая 06.05.2026)
|
||||
|
||||
| Баг | Причина | Фикс |
|
||||
|-----|---------|------|
|
||||
@@ -94,6 +136,11 @@
|
||||
| Расстояние между точками по прямой | `renderWaypointsList` вызывался до построения маршрута, `routeResults` был пуст | Добавлен `renderWaypointsList()` после `drawRouteResults()` |
|
||||
| Расстояние не обновлялось при смене варианта | `selectRoute`/`selectMiniRoute` не вызывали `renderWaypointsList` | Добавлен `renderWaypointsList()` в обе функции |
|
||||
| Деплой статики не работал | `deploy_app2.js` копирует только `app.py`; образ перезаписывает статику при рестарте | SFTP → `docker restart` → `docker cp` (порядок важен!) |
|
||||
| Крестик × линейки не срабатывал | Слишком маленькая тапабельная зона (`span` 11px) | Заменён на `button` с `min-width/height: 32px`, `font-size: 16px` |
|
||||
| Тап на линию не показывал панель | Общий `map.on('click')` перехватывал событие раньше | `e.originalEvent.stopPropagation()` на `ruler-line` click |
|
||||
| Кнопка ✕ в панели не удаляла линейку | `toggleRuler()` при `rulerMode=false + точки есть` только показывал панель | Создана отдельная функция `deleteRuler()` |
|
||||
| Попап метки зависал при удалении | `removeMarker()` не закрывал попап перед удалением | Добавлен явный `popup.remove()` перед `marker.remove()` |
|
||||
| `#ruler-info` показывался до добавления точек | Панель открывалась при входе в режим | Панель показывается только после первой точки |
|
||||
|
||||
---
|
||||
|
||||
@@ -114,6 +161,17 @@
|
||||
| Расстояние по маршруту между точками (сумма = route.distance_m) | ✅ |
|
||||
| Обновление расстояний при смене варианта маршрута | ✅ |
|
||||
| Деплой + health check OK | ✅ |
|
||||
| Линейка: расстояние сегмента под каждым маркером | ✅ |
|
||||
| Линейка: крестик удаления точки с нормальной тапабельной зоной | ✅ |
|
||||
| Линейка: панель компактная, fit-content | ✅ |
|
||||
| Линейка: кнопки Завершить / Удалить всё | ✅ |
|
||||
| Линейка: toast-подсказка при входе в режим | ✅ |
|
||||
| Линейка: первая точка зелёная «Старт» | ✅ |
|
||||
| Линейка: тап на линию/маркер возобновляет режим | ✅ |
|
||||
| Линейка: логика кнопки тулбара (скрыть/показать/рисовать) | ✅ |
|
||||
| Метки: 6 типов, сохранение в localStorage | ✅ |
|
||||
| Метки: попап с кнопками A/B/Удалить | ✅ |
|
||||
| Поиск точек маршрута inline (Nominatim) | ✅ |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -97,6 +97,9 @@ docker restart prototype-enduro-trails-1
|
||||
| F-14 | "Разведка" | Грунтовки вокруг точки, статистика по типам, POI | ⏳ Бэклог | 4 |
|
||||
| F-15 | "Народные треки" | OSM Traces, Wikiloc, Komoot, 4x4travel | ⏳ Бэклог | 8 |
|
||||
| F-16 | Тёмная тема + редизайн | Две темы (авто/светлая/тёмная), SunCalc, мобильный UI, drag-and-drop точек, расстояние по маршруту | ✅ Готово | 5 |
|
||||
| F-22 | Линейка UX | Расстояние сегмента под маркером, крестик удаления, зелёный Старт, панель fit-content, toast, toggle скрыть/показать, deleteRuler | ✅ Готово | 5.2 |
|
||||
| F-23 | Метки UX | Починен баг удаления через попап (popup.remove() перед marker.remove()) | ✅ Готово | 5.2 |
|
||||
| F-24 | Поиск точек маршрута | Inline Nominatim поиск в каждом wl-item, убран верхний search bar | ✅ Готово | 5.2 |
|
||||
| F-17 | PWA + офлайн | Service Worker, MBTiles, GPS-трекинг | ⏳ Бэклог | 7 |
|
||||
| F-18 | Светлая карта | Создать `style-light.json` — светлый стиль карты для светлой темы. Сейчас при светлой теме карта остаётся тёмной (`style-light.json` отсутствует) | ⏳ Бэклог | 5.1 |
|
||||
| F-19 | Иконка колеса + спиннер | Заменить иконку колеса в мини-баре на нормальную мотокросс (спицы, кноблинг). Спиннер в основном листе маршрута пока строится | ⏳ Бэклог | 5.1 |
|
||||
|
||||
12
tasks/enduro-trails/prototype/static/app.js
vendored
12
tasks/enduro-trails/prototype/static/app.js
vendored
@@ -141,7 +141,11 @@ function rebuildMapOverlays() {
|
||||
const pts = [...rulerPoints];
|
||||
rulerPoints = [];
|
||||
rulerTotal = 0;
|
||||
rulerMarkers.forEach(m => m.remove());
|
||||
rulerMarkers.forEach(m => {
|
||||
const el = m.getElement();
|
||||
if (el && el.parentNode) el.parentNode.removeChild(el);
|
||||
m.remove();
|
||||
});
|
||||
rulerMarkers = [];
|
||||
const map = window._map;
|
||||
if (map.getSource('ruler')) map.removeSource('ruler');
|
||||
@@ -1663,7 +1667,11 @@ function exitRulerMode() {
|
||||
function clearRuler() {
|
||||
rulerPoints = [];
|
||||
rulerTotal = 0;
|
||||
rulerMarkers.forEach(m => m.remove());
|
||||
rulerMarkers.forEach(m => {
|
||||
const el = m.getElement();
|
||||
if (el && el.parentNode) el.parentNode.removeChild(el);
|
||||
m.remove();
|
||||
});
|
||||
rulerMarkers = [];
|
||||
const map = window._map;
|
||||
try { if (map.getLayer('ruler-line')) map.removeLayer('ruler-line'); } catch(e) {}
|
||||
|
||||
Reference in New Issue
Block a user