Upgrade to nick_site commit f981fa57, adds alerts and inactive sidebar option
[ndcode_site.git] / projects / index.html.jst
index f47050d..fd76436 100644 (file)
@@ -1,8 +1,7 @@
 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,
@@ -25,43 +24,48 @@ return async 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 => {}