"""UI helper functions for data formatting and display.""" import re def prefer_language(value: str | dict | None, lang_code: str) -> str | None: """Return the value for the requested language with sensible fallbacks.""" if isinstance(value, str): return value or None if not isinstance(value, dict): return None order = [lang_code, "de", "fr", "it", "rm", "en"] for code in order: text = value.get(code) if text: return text for text in value.values(): if text: return text return None def strip_html(text: str) -> str: """Remove HTML tags and collapse whitespace for short summaries.""" if not text: return "" cleaned = re.sub(r"<[^>]+>", " ", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() return cleaned def pick_external_url(*candidates) -> str | None: """Return the first non-empty external URL.""" for candidate in candidates: if not candidate: continue if isinstance(candidate, dict): # Prefer German, fall back to any available language url = prefer_language(candidate, "de") or prefer_language(candidate, "fr") or prefer_language(candidate, "it") if url: return url elif isinstance(candidate, str) and candidate.strip(): return candidate.strip() return None