|
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))]) |