# Orte Components Documentation ## Overview The Orte (Places) section has been updated to use an expandable list view instead of a card grid. This provides better usability on mobile devices and allows for lazy-loading of place details. ## Architecture ### Templates - `_place_expandable.gohtml` - Template for individual expandable place entries (currently unused, kept for reference) - `_place_details_fragment.gohtml` - HTMX fragment for place details (header + pieces list) ### JavaScript Components - `ExpandablePlacesList` - Main web component for the expandable places list - No shadow DOM - full Tailwind CSS support - Property-based data passing - HTMX integration for lazy-loading details ### Backend - `GetPlaceDetails()` - New controller handler for HTMX requests - Route: `/ort/{place}/details` - Returns place details fragment ## Features ### Expandable Interaction - Click to expand/collapse place entries - Only one place can be expanded at a time - Smooth CSS transitions for expand/collapse - Keyboard navigation support (Enter/Space) ### Data Loading - Initial places list loaded from server-side template - Place details loaded on-demand via HTMX - Loading states and error handling - Caching of loaded content ### Accessibility - Proper ARIA attributes (`aria-expanded`, `aria-hidden`, `aria-controls`) - Keyboard navigation support - Screen reader friendly labels - Focus management ### Preserved Functionality - `/ort/{id}` permalink URLs still work for direct access - Search filtering via existing `GenericFilter` component - External links (Wikipedia, Geonames, OpenStreetMap) in expanded view - Citation links to specific newspaper issues ## Usage The component is automatically initialized on page load with data from the Go template: ```html ``` ## Data Structure Each place object contains: - `ID`: Place identifier - `Names`: Array of place names - `Geo`: Geonames URL (optional) - `PieceCount`: Number of associated pieces ## Technical Notes - Uses CSS `max-height` transitions for smooth expand/collapse - HTMX events handled for loading states - Event delegation for dynamically created content - Compatible with existing search filtering system