{% comment %} Status Badge Component ====================== A unified, reusable status badge component for parks, rides, and other entities. Purpose: Displays a status badge with consistent styling across the application. Supports both static display and interactive HTMX-powered refresh. Usage Examples: Basic badge (uses park_tags for config): {% include 'components/status_badge.html' with status='OPERATING' %} Clickable badge: {% include 'components/status_badge.html' with status='OPERATING' clickable=True %} Interactive badge with HTMX (for moderators): {% include 'components/status_badge.html' with status=park.status badge_id='park-header-badge' refresh_url=park_badge_url refresh_trigger='park-status-changed' scroll_target='park-status-section' can_edit=perms.parks.change_park %} Manual status display (without park_tags config lookup): {% include 'components/status_badge.html' with status=obj.status status_display=obj.get_status_display manual_mode=True %} Manual mode with custom classes: {% include 'components/status_badge.html' with status=obj.status status_display=obj.get_status_display status_classes='bg-blue-100 text-blue-800' manual_mode=True %} Parameters: Required: - status: The status value (e.g., 'OPERATING', 'CLOSED_TEMP') Optional (auto mode - uses park_tags): - clickable: Enable click interactions (default: False) Optional (HTMX mode): - badge_id: ID for HTMX targeting - refresh_url: URL for HTMX refresh on trigger - refresh_trigger: HTMX trigger event name (e.g., 'park-status-changed') - scroll_target: Element ID to scroll to on click - can_edit: Whether user can edit/click the badge (default: False) Optional (manual mode): - manual_mode: Use status_display instead of park_tags config lookup (default: False) - status_display: Human-readable status text (used when manual_mode=True) - status_classes: CSS classes for badge styling (default: 'bg-gray-100 text-gray-800') Optional (styling): - size: Size variant 'sm', 'md', 'lg' (default: 'md') Status Classes (auto mode - defined in park_tags): - OPERATING: Green (bg-green-100 text-green-800) - CLOSED_TEMP: Yellow (bg-yellow-100 text-yellow-800) - CLOSED_PERM: Red (bg-red-100 text-red-800) - CONSTRUCTION: Orange (bg-orange-100 text-orange-800) - DEMOLISHED: Gray (bg-gray-100 text-gray-800) - RELOCATED: Purple (bg-purple-100 text-purple-800) - SBNO: Amber (bg-amber-100 text-amber-800) Dependencies: - park_tags template tags (for get_status_config filter, only needed in auto mode) - HTMX (optional, for interactive features) - Font Awesome icons (for dropdown indicator) Accessibility: - Uses semantic button or span based on interactivity - Provides appropriate focus states - Uses color + text for status indication {% endcomment %} {% load park_tags %} {# Determine sizing classes #} {% with size=size|default:'md' %} {% if size == 'sm' %} {% with size_classes='px-2 py-0.5 text-xs' icon_size='h-1.5 w-1.5' %} {% include 'components/status_badge_inner.html' %} {% endwith %} {% elif size == 'lg' %} {% with size_classes='px-4 py-1.5 text-sm' icon_size='h-2.5 w-2.5' %} {% include 'components/status_badge_inner.html' %} {% endwith %} {% else %} {% with size_classes='px-2.5 py-0.5 text-xs' icon_size='h-2 w-2' %} {% include 'components/status_badge_inner.html' %} {% endwith %} {% endif %} {% endwith %}