Spaces:
Runtime error
Runtime error
import html | |
from htbuilder import H, HtmlElement, styles | |
from htbuilder.units import unit | |
# Only works in 3.7+: from htbuilder import div, span | |
div = H.div | |
span = H.span | |
# Only works in 3.7+: from htbuilder.units import px, rem, em | |
px = unit.px | |
rem = unit.rem | |
em = unit.em | |
# Colors from the Streamlit palette. | |
# These are red-70, orange-70, ..., violet-70, gray-70. | |
PALETTE = [ | |
"#ff4b4b", | |
"#ffa421", | |
"#ffe312", | |
"#21c354", | |
"#00d4b1", | |
"#00c0f2", | |
"#1c83e1", | |
"#803df5", | |
"#808495", | |
] | |
OPACITIES = [ | |
"33", "66", | |
] | |
def annotation(body, label="", background=None, color=None, **style): | |
""" | |
from https://github.com/tvst/st-annotated-text/blob/master/annotated_text/util.py | |
""" | |
color_style = {} | |
if color: | |
color_style['color'] = color | |
if not background: | |
label_sum = sum(ord(c) for c in label) | |
background_color = PALETTE[label_sum % len(PALETTE)] | |
background_opacity = OPACITIES[label_sum % len(OPACITIES)] | |
background = background_color + background_opacity | |
return ( | |
span( | |
style=styles( | |
background=background, | |
border_radius=rem(0.33), | |
padding=(rem(0.125), rem(0.5)), | |
overflow="hidden", | |
**color_style, | |
**style, | |
))( | |
html.escape(body), | |
span( | |
style=styles( | |
padding_left=rem(0.5), | |
text_transform="uppercase", | |
))( | |
span( | |
style=styles( | |
font_size=em(0.67), | |
opacity=0.5, | |
))( | |
html.escape(label), | |
), | |
), | |
) | |
) | |
def get_annotated_html(*args): | |
out = div() | |
for arg in args: | |
if isinstance(arg, str): | |
out(html.escape(arg)) | |
elif isinstance(arg, HtmlElement): | |
out(arg) | |
elif isinstance(arg, tuple): | |
out(annotation(*arg)) | |
elif isinstance(arg,list): | |
for el in arg: | |
if isinstance(el, str): | |
out(html.escape(el)) | |
elif isinstance(el, HtmlElement): | |
out(el) | |
elif isinstance(el, tuple): | |
out(annotation(*el)) | |
else: | |
raise Exception("Oh noes!") | |
return str(out) | |