2 let breadcrumbs = await _require('/_lib/breadcrumbs.jst')
3 let get_navigation = await _require('/_lib/get_navigation.jst')
4 let navbar = await _require('/_lib/navbar.jst')
10 await breadcrumbs(env, _out)
12 let transaction = await env.site.database.Transaction()
14 let root = await transaction.get()
15 let p = await get_navigation(root, env.component_names)
16 let children = await p.get('children')
17 let menu = await p.get_json('menu')
20 for (let i = 0; i < menu.length; ++i) {
22 let q = await children.get(name)
23 let images = await q.get_json('images')
25 // we can use higher resolution images when lower not available
26 while (images.length < 3)
27 images.push(images[images.length - 1])
29 // note: make the row a link to show hover background at edges
30 // (similar to the grid-gutter-background class I use elsewhere)
31 // note: position: relative sets the target for stretched link
32 div.row.flex-nowrap.align-items-center.nav-link-outer.position-relative {
34 img.img-fluid.py-3(src=`${name}/${images[2]}`) {}
37 a.nav-link-inner.stretched-link(href=`${name}/index.html`) {
39 `${await q.get_json('title')}`
43 `${await q.get_json('description')}—by ${await q.get_json('author')}`
52 transaction.rollback()