1651
|
1 local Luan = require "luan:Luan.luan"
|
|
2 local error = Luan.error
|
|
3 local ipairs = Luan.ipairs or error()
|
1653
|
4 local pairs = Luan.pairs or error()
|
1651
|
5
|
|
6
|
|
7 local Shared = {}
|
|
8
|
|
9 function Shared.head()
|
|
10 %>
|
|
11 <meta name="viewport" content="width=device-width, initial-scale=1">
|
|
12 <style>
|
|
13 @import "/site.css";
|
|
14 </style>
|
|
15 <%
|
|
16 end
|
|
17
|
1652
|
18 local function header(crumbs)
|
1651
|
19 %>
|
|
20 <div header>
|
1747
|
21 <span breadcrumbs>
|
|
22 <a href="/">Luan</a>
|
1651
|
23 <% for _, crumb in ipairs(crumbs or {}) do %>
|
1747
|
24 / <%=crumb%>
|
1651
|
25 <% end %>
|
1747
|
26 </span>
|
|
27 <span>by <a href="https://www.linkmystyle.com/fschmidt">fschmidt</a></span>
|
1651
|
28 </div>
|
|
29 <%
|
|
30 end
|
1652
|
31 Shared.header = header
|
|
32
|
|
33 function Shared.docs_header()
|
|
34 header{[[<a href="/docs.html">Documentation</a>]]}
|
|
35 end
|
1651
|
36
|
1653
|
37 local function show_toc(content)
|
|
38 %>
|
|
39 <ul>
|
|
40 <%
|
|
41 for id, info in pairs(content) do
|
|
42 %>
|
|
43 <li><a id="c_<%=id%>" href="#<%=id%>"><%=info.title%></a>
|
|
44 <%
|
|
45 local subs = info.subs
|
|
46 if subs ~= nil then
|
|
47 show_toc(subs)
|
|
48 end
|
|
49 %>
|
|
50 </li>
|
|
51 <%
|
|
52 end
|
|
53 %>
|
|
54 </ul>
|
|
55 <%
|
|
56 end
|
|
57 Shared.show_toc = show_toc
|
|
58
|
|
59 local function nothing() end
|
|
60
|
|
61 local function show_content(content,h)
|
|
62 for id, info in pairs(content) do
|
|
63 %>
|
|
64 <div heading>
|
|
65 <h<%=h%>><a id="<%=id%>" href="#<%=id%>"><%=info.title%></a></h<%=h%>>
|
|
66 <a href="#c_<%=id%>">contents</a>
|
|
67 </div>
|
|
68 <%
|
|
69 (info.content or nothing)()
|
|
70 local subs = info.subs
|
|
71 if subs ~= nil then
|
|
72 show_content(subs,h+1)
|
|
73 end
|
|
74 end
|
|
75 end
|
|
76 Shared.show_content = show_content
|
|
77
|
1651
|
78 return Shared
|