from fh_bootstrap import * from itertools import chain from markdown import markdown md_exts='codehilite', 'smarty', 'extra', 'sane_lists' def Markdown(s, exts=md_exts, **kw): return Div(NotStr(markdown(s, extensions=exts)), **kw) ghurl = 'https://github.com/nbroad1881' hf_logo_svg = "https://huggingface.co/datasets/huggingface/brand-assets/resolve/main/hf-logo.svg" li_url = "https://www.linkedin.com/in/nicholas-m-broad/" kaggle_url = "https://www.kaggle.com/nbroad" fh_url = "https://fastht.ml/" fh_logo = 'assets/fasthtml_logo.svg' def BstPage(selidx, title, *c): navitems = [('Home', '/'), ('Blog', '/blog')] ra_items = ( A(Image(src="/assets/hf-logo.svg", width=28, height=28, cls="my-0 px-0 mx-0 py-0", left=False, pad=0), cls="ms-2 my-0 px-1 btn-lg btn", role="button", href="https://hf.co/nbroad"), Icon('fab fa-github', dark=False, sz='lg', href=ghurl, cls='ms-2 px-2'), Icon("fab fa-linkedin", dark=False, sz='lg', href=li_url, cls='ms-2 px-2'), Icon("fab fa-kaggle", dark=False, sz='lg', href=kaggle_url, cls='ms-2 px-2'), Icon("fab fa-youtube", dark=False, sz='lg', href="https://www.youtube.com/@nicholasbroad1881", cls='ms-2 px-2'), Icon("fab fa-twitter", dark=False, sz='lg', href="https://twitter.com/nbroad1881", cls='ms-2 px-2'), ) ftlinks = [A(k, href=v, cls='nav-link px-2 text-muted') for k,v in dict(Home='/').items()] return ( Title(title), Script('initTOC()'), Container( Navbar('nav', selidx, items=navitems, ra_items=ra_items, cls='navbar-light bg-secondary rounded-lg', image=f'', hdr_href="fhurl", placement=PlacementT.Default, expand=SizeT.Md, toggle_left=False), Toc(Container(H1(title, cls='pb-2 pt-1'), *c, cls='mt-3')), BstFooter('Made using FastHTML', File(fh_logo), img_href=fh_url, cs=ftlinks), typ=ContainerT.Xl, cls='mt-3', data_bs_spy='scroll', data_bs_target='#toc')) def Sections(h2s, texts): colors = 'yellow', 'pink', 'teal', 'blue' div_cls = 'py-2 px-3 mt-4 bg-light-{} rounded-lg' return chain([Div(H2(h2, id=f'sec{i+1}', cls=div_cls.format(colors[i%4])), Div(txt, cls='px-2')) for i,(h2,txt) in enumerate(zip(h2s, texts))])