bookshelf-doc/DocGen4/Output/Navbar.lean

91 lines
2.9 KiB
Plaintext
Raw Normal View History

/-
Copyright (c) 2021 Henrik Böving. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Henrik Böving
-/
import Lean
2022-05-19 18:36:35 +00:00
import DocGen4.Output.ToHtmlFormat
import DocGen4.Output.Base
namespace DocGen4
namespace Output
open Lean
open scoped DocGen4.Jsx
def moduleListFile (file : Name) : BaseHtmlM Html := do
2022-05-19 09:14:47 +00:00
pure <div class={if (← getCurrentName) == file then "nav_link visible" else "nav_link"}>
{←moduleToHtmlLink file}
2022-01-20 13:51:24 +00:00
</div>
2022-05-19 19:49:25 +00:00
/--
Build the HTML tree representing the module hierarchy.
-/
partial def moduleListDir (h : Hierarchy) : BaseHtmlM Html := do
let children := Array.mk (h.getChildren.toList.map Prod.snd)
let dirs := children.filter (λ c => c.getChildren.toList.length != 0)
let files := children.filter (λ c => Hierarchy.isFile c ∧ c.getChildren.toList.length = 0)
|>.map Hierarchy.getName
let dirNodes ← (dirs.mapM moduleListDir)
let fileNodes ← (files.mapM moduleListFile)
2021-12-17 16:20:44 +00:00
let moduleLink ← moduleNameToLink h.getName
let summary :=
if h.isFile then
<summary>{←moduleToHtmlLink h.getName}</summary>
else
<summary>{h.getName.toString}</summary>
2022-02-12 14:09:13 +00:00
pure
<details class="nav_sect" "data-path"={moduleLink} [if (←getCurrentName).any (h.getName.isPrefixOf ·) then #[("open", "")] else #[]]>
{summary}
2022-02-12 14:09:13 +00:00
[dirNodes]
[fileNodes]
</details>
2022-05-19 19:49:25 +00:00
/--
Return a list of top level modules, linkified and rendered as HTML
-/
def moduleList : BaseHtmlM Html := do
let hierarchy ← getHierarchy
let mut list := Array.empty
for (_, cs) in hierarchy.getChildren do
2022-07-23 11:01:25 +00:00
list := list.push <| ←moduleListDir cs
2022-05-19 15:16:40 +00:00
pure <div class="module_list">[list]</div>
2022-05-19 19:49:25 +00:00
/--
The main entry point to rendering the navbar on the left hand side.
-/
def navbar : BaseHtmlM Html := do
2022-02-12 14:09:13 +00:00
pure
<html lang="en">
2022-07-21 21:01:15 +00:00
<head>
[←baseHtmlHeadDeclarations]
<base target="_parent" />
</head>
<body>
2022-07-22 15:18:09 +00:00
<div class="navframe">
<nav class="nav">
<h3>General documentation</h3>
<div class="nav_link"><a href={s!"{←getRoot}"}>index</a></div>
2022-11-20 11:48:16 +00:00
<div class="nav_link"><a href={s!"{←getRoot}foundational_types.html"}>foundational types</a></div>
/-
TODO: Add these in later
<div class="nav_link"><a href={s!"{←getRoot}tactics.html"}>tactics</a></div>
<div class="nav_link"><a href={s!"{←getRoot}commands.html"}>commands</a></div>
<div class="nav_link"><a href={s!"{←getRoot}hole_commands.html"}>hole commands</a></div>
<div class="nav_link"><a href={s!"{←getRoot}attributes.html"}>attributes</a></div>
<div class="nav_link"><a href={s!"{←getRoot}notes.html"}>notes</a></div>
<div class="nav_link"><a href={s!"{←getRoot}references.html"}>references</a></div>
-/
<h3>Library</h3>
{← moduleList}
</nav>
2022-07-22 15:18:09 +00:00
</div>
</body>
</html>
end Output
end DocGen4