"""Builds the example-card / suggestion-chip HTML shown in the UI, and serves example data
back to the frontend when a card is clicked."""
import html as html_lib
import json
import os
from typing import Any
from image_codec import encode_full_image, make_thumb_b64
from logging_utils import print_built_example_cards, print_built_suggestion_chips, print_building_example_thumbnails
with open("examples.json") as _f:
EXAMPLES_CONFIG: list[dict[str, Any]] = json.load(_f)
with open("suggestions.json") as _f:
SUGGESTIONS_CONFIG: list[dict[str, Any]] = json.load(_f)
def _example_thumbs_html(images: list[str]) -> str:
html = ""
for path in images:
thumb = make_thumb_b64(path)
if thumb:
html += f''
else:
html += '
Preview
'
return html
def _example_card_html(idx: int, ex: dict[str, Any]) -> str:
thumbs_html = _example_thumbs_html(ex["images"])
n = len(ex["images"])
badge = f'{n} image{"s" if n > 1 else ""}'
prompt_short = html_lib.escape(ex["prompt"][:90])
if len(ex["prompt"]) > 90:
prompt_short += "..."
return f'''
{thumbs_html}
{badge}
{prompt_short}
'''
def build_example_cards_html() -> str:
return "".join(_example_card_html(i, ex) for i, ex in enumerate(EXAMPLES_CONFIG))
def build_suggestion_chips_html() -> str:
chips = []
for s in SUGGESTIONS_CONFIG:
prompt_json = html_lib.escape(json.dumps(s["prompt"]))
label = html_lib.escape(s["label"])
chips.append(f'')
return "".join(chips)
def _parse_example_idx(idx_str: str) -> int:
try:
return int(float(idx_str)) if idx_str and idx_str.strip() else -1
except (ValueError, TypeError):
return -1
def load_example_data(idx_str: str) -> str:
idx = _parse_example_idx(idx_str)
if idx < 0 or idx >= len(EXAMPLES_CONFIG):
return json.dumps({"images": [], "prompt": "", "names": [], "status": "error"})
ex = EXAMPLES_CONFIG[idx]
b64_list, names = [], []
for path in ex["images"]:
b64 = encode_full_image(path)
if b64:
b64_list.append(b64)
names.append(os.path.basename(path))
return json.dumps({"images": b64_list, "prompt": ex["prompt"], "names": names, "status": "ok"})
print_building_example_thumbnails()
EXAMPLE_CARDS_HTML = build_example_cards_html()
print_built_example_cards(len(EXAMPLES_CONFIG))
SUGGESTION_CHIPS_HTML = build_suggestion_chips_html()
print_built_suggestion_chips(len(SUGGESTIONS_CONFIG))