Spaces:
Running
on
Zero
Running
on
Zero
| """ | |
| UI utility functions for the OpenAlex Mapper Gradio app. | |
| """ | |
| from openalex_utils import openalex_url_to_readable_name | |
| def highlight_queries(text: str) -> str: | |
| """Split OpenAlex URLs on semicolons and display them as colored pills with readable names.""" | |
| palette = ["#f5f5f5", #set to only light grey | |
| # "#e8f4fd", "#fff2e8", "#f0f9e8", "#fdf2f8", | |
| # "#f3e8ff", "#e8f8f5", "#fef7e8", "#f8f0e8" | |
| ] | |
| # Handle empty input | |
| if not text or not text.strip(): | |
| return "<div style='padding: 10px; color: #666; font-style: italic;'>Enter OpenAlex URLs separated by semicolons to see query descriptions</div>" | |
| # Split URLs on semicolons and strip whitespace | |
| urls = [url.strip() for url in text.split(";") if url.strip()] | |
| if not urls: | |
| return "<div style='padding: 10px; color: #666; font-style: italic;'>No valid URLs found</div>" | |
| pills = [] | |
| for i, url in enumerate(urls): | |
| color = palette[i % len(palette)] | |
| try: | |
| # Get readable name for the URL | |
| readable_name = openalex_url_to_readable_name(url) | |
| except Exception as e: | |
| print(f"Error processing URL {url}: {e}") | |
| readable_name = f"Query {i+1}" | |
| pills.append( | |
| f'<span style="background:{color};' | |
| 'padding: 8px 12px; margin: 4px; ' | |
| 'border-radius: 12px; font-weight: 500;' | |
| 'display: inline-block; font-family: \'Roboto Condensed\', sans-serif;' | |
| 'border: 1px solid rgba(0,0,0,0.1); font-size: 14px;' | |
| 'box-shadow: 0 1px 3px rgba(0,0,0,0.1);">' | |
| f'{readable_name}</span>' | |
| ) | |
| return ( | |
| "<div style='padding: 8px 0;'>" | |
| "<div style='font-size: 12px; color: #666; margin-bottom: 6px; font-weight: 500;'>" | |
| f"{'Query' if len(urls) == 1 else 'Queries'} ({len(urls)}):</div>" | |
| "<div style='display: flex; flex-wrap: wrap; gap: 4px;'>" | |
| + "".join(pills) + | |
| "</div></div>" | |
| ) |