return async env => {
let breadcrumbs = await _require('/_lib/breadcrumbs.jst')
- let icon_jst = await env.site.get_min_svg('/_svg/icon_jst.svg')
+ let get_navigation = await _require('/_lib/get_navigation.jst')
let navbar = await _require('/_lib/navbar.jst')
- let icon_pitree = await env.site.get_min_svg('/_svg/icon_pitree.svg')
await navbar(
env,
i {'[Actually don\'t because it\'s still under construction]'}
}
- ul.nav.flex-column {
- li.nav-item {
- a.nav-link {
- table.icon-and-text {
- tr {
- td {
- _out.push(icon_pitree)
- }
- td {
- span.h1 {
- span.serif {'π'}
- 'tree'
- }
- br {}
- span.h3 {'the source code analysis and transformation framework'}
+ let transaction = await env.site.database.Transaction()
+ try {
+ let root = await transaction.get()
+ let p = await get_navigation(root, env.component_names)
+ let children = await p.get('children')
+ let menu = await p.get_json('menu')
+
+ nav {
+ for (let i = 0; i < menu.length; ++i) {
+ let name = menu[i]
+ let q = await children.get(name)
+
+ // note: make the row a link to show hover background at edges
+ // (similar to the grid-gutter-background class I use elsewhere)
+ // note: position: relative sets the target for stretched link
+ div.row.flex-nowrap.align-items-center.nav-link-outer.position-relative {
+ div.col.col-icon128 {
+ div.img-fluid.py-3 {
+ _out.push(
+ await env.site.get_min_svg(await q.get_json('icon'))
+ )
}
}
- }
- }
- }
- li.nav-item {
- a.nav-link {
- table.icon-and-text {
- tr {
- td {
- _out.push(icon_jst)
- }
- td {
- span.h1{'JST'}
+ div.col.col-text {
+ a.nav-link-inner.stretched-link(href=`${name}/index.html`) {
+ span.h2{
+ `${await q.get_json('title')}`
+ }
br {}
- span.h3{'the web development framework with JavaScript Templates'}
+ span.h4{
+ `${await q.get_json('description')}`
+ }
+
}
}
}
}
}
}
+ finally {
+ transaction.rollback()
+ }
},
// scripts
async _out => {}