]> git.plutz.net Git - shellwiki/blob - themes/default.sh
Merge commit 'a6d9e4958fd35c6022ba71a6f6c6c3d210de94c2'
[shellwiki] / themes / default.sh
1 #!/bin/sh
2
3 . "$_EXEC/tools.sh"
4
5 theme_head(){
6   printf '
7   <meta name="viewport" content="width=device-width"/>
8   <link rel="stylesheet" type="text/css" href="%s/[.]/cgilite/common.css">
9   <link rel="stylesheet" type="text/css" href="%s/[.]/themes/default.css">
10   ' "$_BASE"
11 }
12
13 theme_header(){
14   printf '<header>%s</header>' "$(wiki '[wiki]/header/')"
15 }
16
17 theme_footer(){
18   printf '<footer>%s</footer>' "$(wiki '[wiki]/footer/' ||echo No footer)"
19 }
20
21 theme_page(){
22   local page="$1" title
23   title="${page%/}"; title="${title##*/}"
24
25   # Important! Web Server response including newline
26   printf "%s\r\n" "Content-Type: text/html; charset=utf-8" ""
27
28   cat <<-EOF
29         <!DOCTYPE HTML>
30         <html><head>
31           $(theme_head)
32           <title>$(HTML "${title}")</title>
33         </head><body id="$(HTML "$page")">
34           $(theme_header)
35           <main>
36             <ul class="pagemenu">
37               <li><a href="[edit]">Edit</a></li>
38               <li><a href="[attachment]/">Attachments</a></li>
39             </ul>
40             <article>
41               $(wiki "$page" || printf 'Page not found')
42             </article>
43           </main>
44           $(theme_footer)
45         </body></html>
46         EOF
47 }
48
49 theme_editor(){
50   local page="$1" title
51   title="${page%/}"; title="${title##*/}"
52
53   # Important! Web Server response including newline
54   printf "%s\r\n" "Content-Type: text/html; charset=utf-8" ""
55
56   cat <<-EOF
57         <!DOCTYPE HTML>
58         <html><head>
59           $(theme_head)
60           <title>$(HTML "${title}")</title>
61         </head><body id="$(HTML "$page")" class="editor">
62           $(theme_header)
63           <main><form method=POST>
64             <input type=hidden name=session_key value="${SESSION_KEY}"/>
65             <textarea name=pagetext>$(wiki_text "$page" |HTML)</textarea>
66             <button type=submit name=action value=update>Update</button>
67             <button type=submit name=action value=cancel>Cancel</button>
68           </form></main>
69           $(theme_footer)
70         </body></html>
71         EOF
72 }
73
74 theme_attachments(){
75   local page="$1" title
76   title="${page%/}"; title="${title##*/}"
77
78   # Important! Web Server response including newline
79   printf "%s\r\n" "Content-Type: text/html; charset=utf-8" ""
80
81   cat <<-EOF
82         <!DOCTYPE HTML>
83         <html><head>
84           $(theme_head)
85           <title>Attachments $(HTML "${title}")</title>
86         </head><body id="$(HTML "$page")[attachment]/">
87           $(theme_header)
88           <main>
89             <form class=upload method=POST enctype="multipart/form-data">
90               <input type=file name=file multiple>
91               <button type=submit name=action value=upload>Upload</button>
92             </form>
93
94             <ul class="attachment list">
95             $(for file in "$_EXEC/pages/$page/#attachments"/* "$_DATA/pages/$page/#attachments"/*; do
96               [ "$file" = "$_EXEC/pages/$page/#attachments/${file##*/}" \
97                     -a -f "$_DATA/pages/$page/#attachments/${file##*/}" ] && continue
98               stat="$(stat -c '%s %Y' -- "$file" 2>&-)" || continue
99               size="${stat% *}" date="${stat#* }"
100             
101               printf '<li><span class=name>%s</span>
102                       <span class=size>%s</span><span class=date>%s</span></li>' \
103                 "$(HTML "${file##*/}")" "$(size_human "$size")" "$(date -d @"$date" +"%F %T")"
104             done)
105             </ul>
106           </main>
107           $(theme_footer)
108         </body></html>
109         EOF
110 }
111
112 theme_login(){
113   theme_page '[wiki]/login/'
114 }
115
116 theme_register(){
117   theme_page '[wiki]/register/'
118 }
119
120 theme_404(){
121   printf "%s\r\n" "Status: 404 Not Found"
122
123   theme_page '[wiki]/404/'
124 }