]> git.plutz.net Git - shellwiki/blob - themes/default.sh
attachment processing, serving and overview
[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             <ul class="attachment list">
90             $(for file in "$_EXEC/pages/$page/#attachments"/* "$_DATA/pages/$page/#attachments"/*; do
91               [ "$file" = "$_EXEC/pages/$page/#attachments/${file##*/}" \
92                     -a -f "$_DATA/pages/$page/#attachments/${file##*/}" ] && continue
93               stat="$(stat -c '%s %Y' -- "$file" 2>&-)" || continue
94               size="${stat% *}" date="${stat#* }"
95             
96               printf '<li><span class=name>%s</span>
97                       <span class=size>%s</span><span class=date>%s</span></li>' \
98                 "$(HTML "${file##*/}")" "$(size_human "$size")" "$(date -d @"$date" +"%F %T")"
99             done)
100             </ul>
101           </main>
102           $(theme_footer)
103         </body></html>
104         EOF
105 }
106
107 theme_login(){
108   theme_page '[wiki]/login/'
109 }
110
111 theme_register(){
112   theme_page '[wiki]/register/'
113 }
114
115 theme_404(){
116   printf "%s\r\n" "Status: 404 Not Found"
117
118   theme_page '[wiki]/404/'
119 }