"""Small HTMX helpers shared by admin pages.""" from __future__ import annotations from typing import Any from fastapi import Request from app.admin_ui.components import esc def is_htmx_request(request: Request | None) -> bool: if request is None: return False return str(request.headers.get("HX-Request") or "").lower() == "true" def htmx_attrs( url: str, *, target: str, swap: str = "innerHTML", push_url: str | bool | None = None, indicator: str | None = None, ) -> str: attrs = [ f'hx-get="{esc(url)}"', f'hx-target="{esc(target)}"', f'hx-swap="{esc(swap)}"', ] if push_url is not None: value = "true" if push_url is True else "false" if push_url is False else str(push_url) attrs.append(f'hx-push-url="{esc(value)}"') if indicator: attrs.append(f'hx-indicator="{esc(indicator)}"') return " ".join(attrs)