mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 17:21:38 -05:00
632 lines
15 KiB
Markdown
632 lines
15 KiB
Markdown
|
|
# Dawarich JavaScript Features Documentation
|
||
|
|
|
||
|
|
This document provides a detailed overview of all JavaScript features implemented in the Dawarich application, organized by functionality.
|
||
|
|
|
||
|
|
## Table of Contents
|
||
|
|
|
||
|
|
- [Map Features](#map-features)
|
||
|
|
- [Routes & Tracks](#routes--tracks)
|
||
|
|
- [Visits Management](#visits-management)
|
||
|
|
- [Areas](#areas)
|
||
|
|
- [Photos Integration](#photos-integration)
|
||
|
|
- [Live Mode](#live-mode)
|
||
|
|
- [Visualization Features](#visualization-features)
|
||
|
|
- [Search & Navigation](#search--navigation)
|
||
|
|
- [Family Sharing](#family-sharing)
|
||
|
|
- [Controllers](#controllers)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Map Features
|
||
|
|
|
||
|
|
### Main Maps Controller (`maps_controller.js`)
|
||
|
|
|
||
|
|
The primary controller managing all map interactions and visualizations.
|
||
|
|
|
||
|
|
#### Core Functionality
|
||
|
|
|
||
|
|
- **Map Initialization**
|
||
|
|
- Leaflet.js-based interactive map
|
||
|
|
- Multiple base layer support (OpenStreetMap, custom tiles)
|
||
|
|
- User-preferred layer persistence
|
||
|
|
- PostGIS coordinate system support
|
||
|
|
- Custom panes for z-index management
|
||
|
|
|
||
|
|
- **Layer Management**
|
||
|
|
- Points layer (location markers)
|
||
|
|
- Routes layer (polylines)
|
||
|
|
- Tracks layer (GPS tracks)
|
||
|
|
- Heatmap layer
|
||
|
|
- Fog of War layer
|
||
|
|
- Scratch map layer (visited countries)
|
||
|
|
- Areas layer (user-defined regions)
|
||
|
|
- Photos layer (geotagged images)
|
||
|
|
- Visits layer (detected location visits)
|
||
|
|
- Family members layer
|
||
|
|
|
||
|
|
- **Settings Panel**
|
||
|
|
- Route opacity adjustment (10-100%)
|
||
|
|
- Fog of War radius customization
|
||
|
|
- Time/distance thresholds for route splitting
|
||
|
|
- Points rendering mode (raw/simplified)
|
||
|
|
- Live map toggle
|
||
|
|
- Speed-colored routes configuration
|
||
|
|
- Speed color scale editor with gradient stops
|
||
|
|
|
||
|
|
- **Calendar Panel**
|
||
|
|
- Year selection dropdown
|
||
|
|
- Month navigation grid
|
||
|
|
- Tracked months visualization
|
||
|
|
- Visited cities display
|
||
|
|
- Date range filtering
|
||
|
|
|
||
|
|
- **Scale & Stats Control**
|
||
|
|
- Distance scale (km/miles)
|
||
|
|
- Total distance display
|
||
|
|
- Points count display
|
||
|
|
- Dynamic unit conversion
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Routes & Tracks
|
||
|
|
|
||
|
|
### Routes (`maps/polylines.js`)
|
||
|
|
|
||
|
|
#### Features
|
||
|
|
|
||
|
|
- **Intelligent Route Splitting**
|
||
|
|
- Distance-based splitting (meters between points)
|
||
|
|
- Time-based splitting (minutes between points)
|
||
|
|
- Configurable thresholds
|
||
|
|
|
||
|
|
- **Speed Visualization**
|
||
|
|
- Color-coded routes based on GPS velocity
|
||
|
|
- Customizable color gradient scale
|
||
|
|
- Speed ranges: 0-15 km/h (green), 15-30 km/h (cyan), 30-50 km/h (magenta), 50-100 km/h (yellow), 100+ km/h (red)
|
||
|
|
- Real-time gradient editor
|
||
|
|
|
||
|
|
- **Interactive Features**
|
||
|
|
- Hover highlighting with increased opacity
|
||
|
|
- Click to lock selection
|
||
|
|
- Start/end markers (🚥 and 🏁)
|
||
|
|
- Popup with route details:
|
||
|
|
- Start and end timestamps
|
||
|
|
- Duration (days, hours, minutes)
|
||
|
|
- Total distance
|
||
|
|
- Current segment speed
|
||
|
|
|
||
|
|
- **Performance Optimizations**
|
||
|
|
- Canvas renderer for large datasets
|
||
|
|
- Batch processing for updates
|
||
|
|
- Custom pane management (z-index 450)
|
||
|
|
|
||
|
|
### Tracks (`maps/tracks.js`)
|
||
|
|
|
||
|
|
GPS tracks represent processed and analyzed routes with elevation data.
|
||
|
|
|
||
|
|
#### Features
|
||
|
|
|
||
|
|
- **Track Visualization**
|
||
|
|
- Distinct red color (vs blue routes)
|
||
|
|
- Elevated pane (z-index 460)
|
||
|
|
- Start (🚀) and end (🎯) markers
|
||
|
|
|
||
|
|
- **Track Information Display**
|
||
|
|
- Start/end timestamps
|
||
|
|
- Duration
|
||
|
|
- Distance
|
||
|
|
- Average speed
|
||
|
|
- Elevation gain/loss
|
||
|
|
- Max/min altitude
|
||
|
|
|
||
|
|
- **Real-time Updates**
|
||
|
|
- WebSocket integration via TracksChannel
|
||
|
|
- Incremental track updates (create/update/delete)
|
||
|
|
- Time range filtering
|
||
|
|
- Memory-efficient updates
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Visits Management
|
||
|
|
|
||
|
|
### Visits System (`maps/visits.js`)
|
||
|
|
|
||
|
|
Advanced location visit detection and management system.
|
||
|
|
|
||
|
|
#### Core Features
|
||
|
|
|
||
|
|
- **Visit Detection**
|
||
|
|
- Automatic visit suggestions based on dwell time
|
||
|
|
- Confirmed vs suggested visits (separate layers)
|
||
|
|
- Custom panes for proper z-index ordering
|
||
|
|
- Visual distinction (blue for confirmed, orange/dashed for suggested)
|
||
|
|
|
||
|
|
- **Area Selection Tool**
|
||
|
|
- Click-and-drag rectangle selection
|
||
|
|
- Filter visits within selected area
|
||
|
|
- Points within bounds calculation
|
||
|
|
- Date-grouped summary panel
|
||
|
|
|
||
|
|
- **Visit Drawer UI**
|
||
|
|
- Sliding side panel
|
||
|
|
- Hierarchical visit list
|
||
|
|
- Visit status indicators
|
||
|
|
- Quick actions (confirm/decline)
|
||
|
|
|
||
|
|
- **Visit Operations**
|
||
|
|
- Confirm suggested visits
|
||
|
|
- Decline unwanted visits
|
||
|
|
- Merge multiple visits
|
||
|
|
- Bulk operations (confirm/decline multiple)
|
||
|
|
- Delete visits with confirmation
|
||
|
|
- Edit visit name and location
|
||
|
|
|
||
|
|
- **Interactive Features**
|
||
|
|
- Checkbox selection with smart visibility
|
||
|
|
- Adjacent visit highlighting
|
||
|
|
- Map circle highlighting on hover
|
||
|
|
- Click visit to center map
|
||
|
|
- Possible places dropdown
|
||
|
|
- Duration formatting
|
||
|
|
|
||
|
|
- **Visit Details**
|
||
|
|
- Name and address
|
||
|
|
- Start and end timestamps
|
||
|
|
- Duration estimation
|
||
|
|
- Location coordinates
|
||
|
|
- City, state, country
|
||
|
|
- Status (suggested/confirmed/declined)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Areas
|
||
|
|
|
||
|
|
### Area Management (`maps/areas.js`)
|
||
|
|
|
||
|
|
User-defined geographic areas for visit tracking.
|
||
|
|
|
||
|
|
#### Features
|
||
|
|
|
||
|
|
- **Area Creation**
|
||
|
|
- Leaflet.draw integration
|
||
|
|
- Circle drawing tool
|
||
|
|
- Interactive popup form
|
||
|
|
- Name input validation
|
||
|
|
- Custom pane (z-index 605)
|
||
|
|
|
||
|
|
- **Area Display**
|
||
|
|
- Red circle markers
|
||
|
|
- Semi-transparent fill
|
||
|
|
- Hover effects (increased opacity)
|
||
|
|
- Click to show details
|
||
|
|
|
||
|
|
- **Area Information**
|
||
|
|
- Name
|
||
|
|
- Radius (meters)
|
||
|
|
- Center coordinates
|
||
|
|
- Area ID badge
|
||
|
|
|
||
|
|
- **Area Management**
|
||
|
|
- Delete confirmation
|
||
|
|
- Theme-aware styling
|
||
|
|
- API integration for CRUD operations
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Photos Integration
|
||
|
|
|
||
|
|
### Photo Layer (`maps/photos.js`)
|
||
|
|
|
||
|
|
Integration with Immich and Photoprism for geotagged photos.
|
||
|
|
|
||
|
|
#### Features
|
||
|
|
|
||
|
|
- **Photo Sources**
|
||
|
|
- Immich integration
|
||
|
|
- Photoprism integration
|
||
|
|
- Source URL configuration
|
||
|
|
|
||
|
|
- **Photo Markers**
|
||
|
|
- 48x48px thumbnail markers
|
||
|
|
- Lazy loading with retry logic
|
||
|
|
- Loading spinner animation
|
||
|
|
- Error handling
|
||
|
|
|
||
|
|
- **Photo Popups**
|
||
|
|
- Full thumbnail preview
|
||
|
|
- Original filename
|
||
|
|
- Capture timestamp
|
||
|
|
- Location (city, state, country)
|
||
|
|
- Source system link
|
||
|
|
- Type indicator (📷 photo / 🎥 video)
|
||
|
|
- Hover shadow effects
|
||
|
|
|
||
|
|
- **Performance**
|
||
|
|
- Promise-based loading
|
||
|
|
- Progressive rendering
|
||
|
|
- Automatic retry (3 attempts)
|
||
|
|
- Date range filtering
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Live Mode
|
||
|
|
|
||
|
|
### Live Map Handler (`maps/live_map_handler.js`)
|
||
|
|
|
||
|
|
Real-time GPS tracking with memory-efficient streaming.
|
||
|
|
|
||
|
|
#### Features
|
||
|
|
|
||
|
|
- **Memory Management**
|
||
|
|
- Bounded data structures (max 1000 points)
|
||
|
|
- Automatic old point removal
|
||
|
|
- Prevents memory leaks
|
||
|
|
- Incremental updates
|
||
|
|
|
||
|
|
- **Real-time Updates**
|
||
|
|
- WebSocket integration (PointsChannel)
|
||
|
|
- Live marker addition
|
||
|
|
- Incremental polyline segments
|
||
|
|
- Heatmap updates
|
||
|
|
- Auto-pan to new location
|
||
|
|
|
||
|
|
- **Layer Synchronization**
|
||
|
|
- Markers layer updates
|
||
|
|
- Polylines layer incremental updates
|
||
|
|
- Heatmap point management
|
||
|
|
- Fog of War updates
|
||
|
|
|
||
|
|
- **Performance**
|
||
|
|
- No full layer recreation
|
||
|
|
- Direct marker references
|
||
|
|
- Efficient last marker tracking
|
||
|
|
- Smart cleanup on disable
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Visualization Features
|
||
|
|
|
||
|
|
### Fog of War (`maps/fog_of_war.js`)
|
||
|
|
|
||
|
|
Gamification feature showing unexplored areas.
|
||
|
|
|
||
|
|
#### Features
|
||
|
|
|
||
|
|
- **Canvas-based Rendering**
|
||
|
|
- Overlay at z-index 400
|
||
|
|
- RGBA fog layer (0,0,0,0.4)
|
||
|
|
- destination-out composite operation
|
||
|
|
- Responsive to map size changes
|
||
|
|
|
||
|
|
- **Smart Fog Clearing**
|
||
|
|
- Circular cleared areas around points
|
||
|
|
- Line connections between nearby points
|
||
|
|
- Configurable clear radius (meters)
|
||
|
|
- Time threshold for connections
|
||
|
|
- Rounded line caps and joins
|
||
|
|
|
||
|
|
- **Dynamic Updates**
|
||
|
|
- Pan and zoom responsive
|
||
|
|
- Real-time recalculation
|
||
|
|
- Map resize handling
|
||
|
|
- Stored parameters for efficiency
|
||
|
|
|
||
|
|
### Scratch Map (`maps/scratch_layer.js`)
|
||
|
|
|
||
|
|
World map showing visited countries.
|
||
|
|
|
||
|
|
#### Features
|
||
|
|
|
||
|
|
- **Country Visualization**
|
||
|
|
- GeoJSON country borders
|
||
|
|
- Golden overlay (fillColor: #FFD700)
|
||
|
|
- Orange borders (color: #FFA500)
|
||
|
|
- ISO 3166-1 Alpha-2 code matching
|
||
|
|
|
||
|
|
- **Data Management**
|
||
|
|
- Country code mapping
|
||
|
|
- Unique country extraction
|
||
|
|
- Cached world borders data
|
||
|
|
- Automatic refresh
|
||
|
|
|
||
|
|
- **Integration**
|
||
|
|
- Layer control toggle
|
||
|
|
- Marker data updates
|
||
|
|
- Visibility state tracking
|
||
|
|
|
||
|
|
### Heatmap
|
||
|
|
|
||
|
|
Built-in Leaflet.heat plugin for density visualization.
|
||
|
|
|
||
|
|
- **Configuration**
|
||
|
|
- 20px radius
|
||
|
|
- 0.2 intensity per point
|
||
|
|
- Automatic color gradient
|
||
|
|
- Layer control toggle
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Search & Navigation
|
||
|
|
|
||
|
|
### Location Search (`maps/location_search.js`)
|
||
|
|
|
||
|
|
Advanced location search with visit history.
|
||
|
|
|
||
|
|
#### Features
|
||
|
|
|
||
|
|
- **Search Interface**
|
||
|
|
- Inline search bar (400px wide)
|
||
|
|
- Search toggle button with Lucide icon
|
||
|
|
- Keyboard shortcuts (Enter, Escape, Arrow keys)
|
||
|
|
- Click-outside-to-close
|
||
|
|
- Auto-position next to button
|
||
|
|
|
||
|
|
- **Suggestions System**
|
||
|
|
- Real-time autocomplete (300ms debounce)
|
||
|
|
- Keyboard navigation (↑↓ arrows)
|
||
|
|
- Suggestion highlighting
|
||
|
|
- 2-character minimum query
|
||
|
|
|
||
|
|
- **Search Results**
|
||
|
|
- Hierarchical results (location → years → visits)
|
||
|
|
- Collapsible year sections
|
||
|
|
- Visit count per location
|
||
|
|
- Date range display
|
||
|
|
- Duration estimates
|
||
|
|
|
||
|
|
- **Visit Navigation**
|
||
|
|
- Click visit to zoom and highlight
|
||
|
|
- Time filter events
|
||
|
|
- 4-hour window around visit
|
||
|
|
- Special visit markers (green circles)
|
||
|
|
|
||
|
|
- **Visit Creation**
|
||
|
|
- Create visit from search result
|
||
|
|
- Pre-filled form with location data
|
||
|
|
- Datetime picker for start/end
|
||
|
|
- Duration calculation
|
||
|
|
- Validation
|
||
|
|
|
||
|
|
- **Map Integration**
|
||
|
|
- Position relative to button
|
||
|
|
- Maintains position during map pan/zoom
|
||
|
|
- Prevents map scroll interference
|
||
|
|
- Visits layer refresh after creation
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Family Sharing
|
||
|
|
|
||
|
|
### Family Members Controller (`family_members_controller.js`)
|
||
|
|
|
||
|
|
Real-time family member location sharing.
|
||
|
|
|
||
|
|
#### Features
|
||
|
|
|
||
|
|
- **Family Member Markers**
|
||
|
|
- Circular avatars with email initials
|
||
|
|
- Green color scheme (#10B981)
|
||
|
|
- White border and shadow
|
||
|
|
- Distinct from other markers
|
||
|
|
|
||
|
|
- **Real-time Updates**
|
||
|
|
- ActionCable integration (FamilyLocationsChannel)
|
||
|
|
- Incremental position updates
|
||
|
|
- Recent update animation (< 5 minutes)
|
||
|
|
- Pulse effect for active updates
|
||
|
|
|
||
|
|
- **Location Information**
|
||
|
|
- Email address
|
||
|
|
- Coordinates (6 decimal precision)
|
||
|
|
- Battery level with colored icons
|
||
|
|
- Battery status (charging/full)
|
||
|
|
- Last seen timestamp
|
||
|
|
|
||
|
|
- **Battery Indicators**
|
||
|
|
- Lucide battery icons
|
||
|
|
- Color-coded: red (≤20%), orange (≤50%), green (>50%)
|
||
|
|
- Charging icon when plugged in
|
||
|
|
- Full battery indicator
|
||
|
|
|
||
|
|
- **Map Integration**
|
||
|
|
- Permanent tooltips (last seen + battery)
|
||
|
|
- Detailed popups on click
|
||
|
|
- Theme-aware styling
|
||
|
|
- Auto-zoom to fit all members
|
||
|
|
- Layer control integration
|
||
|
|
|
||
|
|
- **Refresh Management**
|
||
|
|
- 60-second periodic refresh (fallback)
|
||
|
|
- Manual refresh button
|
||
|
|
- Automatic stop when layer disabled
|
||
|
|
- User feedback on manual refresh
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Controllers
|
||
|
|
|
||
|
|
### Base Controller (`base_controller.js`)
|
||
|
|
|
||
|
|
Common functionality for all Stimulus controllers.
|
||
|
|
|
||
|
|
### Other Controllers
|
||
|
|
|
||
|
|
- **`datetime_controller.js`**: Date/time picker initialization
|
||
|
|
- **`imports_controller.js`**: File import progress tracking
|
||
|
|
- **`trips_controller.js`**: Trip management UI
|
||
|
|
- **`stat_page_controller.js`**: Statistics page interactions
|
||
|
|
- **`clipboard_controller.js`**: Copy-to-clipboard functionality
|
||
|
|
- **`notifications_controller.js`**: Real-time notifications
|
||
|
|
- **`sharing_modal_controller.js`**: Public sharing UI
|
||
|
|
- **`map_preview_controller.js`**: Embedded map previews
|
||
|
|
- **`visit_modal_map_controller.js`**: Visit creation map
|
||
|
|
- **`add_visit_controller.js`**: Visit addition flow
|
||
|
|
- **`public_stat_map_controller.js`**: Public stat sharing maps
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Technical Details
|
||
|
|
|
||
|
|
### Map Controls & UI
|
||
|
|
|
||
|
|
- **Top-Right Buttons** (`maps/map_controls.js`)
|
||
|
|
- Select Area tool
|
||
|
|
- Add Visit button
|
||
|
|
- Calendar toggle
|
||
|
|
- Visits drawer toggle
|
||
|
|
- Consistent ordering and styling
|
||
|
|
|
||
|
|
- **Theme Support** (`maps/theme_utils.js`)
|
||
|
|
- Dark/light theme detection
|
||
|
|
- Automatic control styling
|
||
|
|
- Button theme adaptation
|
||
|
|
- Panel theme colors
|
||
|
|
- Oklahoma-based color system
|
||
|
|
|
||
|
|
### Helper Functions (`maps/helpers.js`)
|
||
|
|
|
||
|
|
- **Date Formatting**: Timezone-aware timestamp conversion
|
||
|
|
- **Distance Formatting**: km/miles with proper units
|
||
|
|
- **Speed Formatting**: km/h or mph conversion
|
||
|
|
- **Duration Formatting**: Days, hours, minutes display
|
||
|
|
- **Haversine Distance**: Accurate geographic distance calculation
|
||
|
|
- **Flash Messages**: User notification system
|
||
|
|
|
||
|
|
### Markers (`maps/markers.js`, `maps/marker_factory.js`)
|
||
|
|
|
||
|
|
- **Standard Markers**: CircleMarkers with popups
|
||
|
|
- **Live Markers**: Optimized for streaming
|
||
|
|
- **Popup Content**: Delete button, coordinates, timestamp, battery, velocity
|
||
|
|
- **Marker Clustering**: Performance optimization for large datasets
|
||
|
|
|
||
|
|
### Layers Configuration (`maps/layers.js`)
|
||
|
|
|
||
|
|
- **Raster Maps** (`raster_maps_config.js`)
|
||
|
|
- OpenStreetMap
|
||
|
|
- Stadia Maps (Alidade Smooth)
|
||
|
|
- CartoDB
|
||
|
|
- Stamen
|
||
|
|
|
||
|
|
- **Vector Maps** (`vector_maps_config.js`)
|
||
|
|
- Self-hosted vector tiles
|
||
|
|
- Optional fallback system
|
||
|
|
|
||
|
|
### Performance Monitoring
|
||
|
|
|
||
|
|
- **Tile Monitor** (`maps/tile_monitor.js`)
|
||
|
|
- Track tile load times
|
||
|
|
- Identify slow tiles
|
||
|
|
- Performance metrics API
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## WebSocket Channels
|
||
|
|
|
||
|
|
### PointsChannel (`channels/points_channel.js`)
|
||
|
|
|
||
|
|
Real-time GPS point streaming for live mode.
|
||
|
|
|
||
|
|
### TracksChannel
|
||
|
|
|
||
|
|
Real-time track updates (create/update/delete).
|
||
|
|
|
||
|
|
### FamilyLocationsChannel (`channels/family_locations_channel.js`)
|
||
|
|
|
||
|
|
Real-time family member location updates.
|
||
|
|
|
||
|
|
### NotificationsChannel (`channels/notifications_channel.js`)
|
||
|
|
|
||
|
|
System notifications and alerts.
|
||
|
|
|
||
|
|
### ImportsChannel (`channels/imports_channel.js`)
|
||
|
|
|
||
|
|
Import progress updates.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Key Technologies
|
||
|
|
|
||
|
|
- **Leaflet.js**: Core mapping library
|
||
|
|
- **Stimulus**: JavaScript framework
|
||
|
|
- **Hotwired Turbo**: SPA-like navigation
|
||
|
|
- **ActionCable**: WebSocket integration
|
||
|
|
- **Canvas API**: High-performance rendering
|
||
|
|
- **GeoJSON**: Geographic data format
|
||
|
|
- **PostGIS**: Spatial database queries
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Configuration
|
||
|
|
|
||
|
|
Map features are controlled through user settings:
|
||
|
|
|
||
|
|
- `route_opacity`: Route visibility (0.0-1.0)
|
||
|
|
- `fog_of_war_meters`: Fog clear radius
|
||
|
|
- `fog_of_war_threshold`: Seconds between fog lines
|
||
|
|
- `meters_between_routes`: Route split distance
|
||
|
|
- `minutes_between_routes`: Route split time
|
||
|
|
- `time_threshold_minutes`: Visit detection threshold
|
||
|
|
- `merge_threshold_minutes`: Visit merge threshold
|
||
|
|
- `points_rendering_mode`: Raw or simplified
|
||
|
|
- `live_map_enabled`: Enable live mode
|
||
|
|
- `speed_colored_routes`: Enable speed colors
|
||
|
|
- `speed_color_scale`: Custom gradient definition
|
||
|
|
- `preferred_map_layer`: Base layer selection
|
||
|
|
- `enabled_map_layers`: Active overlay layers
|
||
|
|
- `maps.distance_unit`: km or mi
|
||
|
|
- `maps.url`: Custom tile server
|
||
|
|
- `immich_url`: Immich server
|
||
|
|
- `photoprism_url`: Photoprism server
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Data Flow
|
||
|
|
|
||
|
|
1. **Initial Load**: Server renders map with data attributes
|
||
|
|
2. **Controller Connect**: Stimulus initializes map and layers
|
||
|
|
3. **User Interaction**: Events trigger controller methods
|
||
|
|
4. **API Calls**: Fetch/update data via REST API
|
||
|
|
5. **WebSocket Updates**: Real-time data via ActionCable
|
||
|
|
6. **Layer Updates**: Incremental map updates
|
||
|
|
7. **Settings Persistence**: API saves user preferences
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Memory Management
|
||
|
|
|
||
|
|
- Bounded arrays for live mode (max 1000 points)
|
||
|
|
- Marker reference tracking for efficient updates
|
||
|
|
- Layer cleanup on disconnect
|
||
|
|
- Event listener removal
|
||
|
|
- Canvas context management
|
||
|
|
- GeoJSON data caching
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Accessibility Features
|
||
|
|
|
||
|
|
- Keyboard navigation for search
|
||
|
|
- Theme-aware color schemes
|
||
|
|
- Clear visual indicators
|
||
|
|
- Tooltip descriptions
|
||
|
|
- Confirmation dialogs for destructive actions
|
||
|
|
- Error message display
|
||
|
|
- Loading states
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Future Enhancements
|
||
|
|
|
||
|
|
Potential areas for expansion:
|
||
|
|
|
||
|
|
- Route editing capabilities
|
||
|
|
- Custom area shapes (polygons)
|
||
|
|
- Enhanced photo filtering
|
||
|
|
- Route comparison tools
|
||
|
|
- Advanced track statistics
|
||
|
|
- Export to GPX/GeoJSON
|
||
|
|
- Offline map support
|
||
|
|
- Route planning
|
||
|
|
- Custom marker icons
|
||
|
|
- Geofencing alerts
|