]> git.plutz.net Git - shellwiki/blob - themes/default.sh
removed various acl checks (previously moved to handlers), introduce revision theme
[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/')"
19 }
20
21 theme_pagemenu(){
22   local page="$1"
23
24   if acl_write "$page"; then
25     printf  '
26     <ul class="pagemenu">
27       <li><a href="[edit]">Edit</a></li>
28       <li><a href="[attachment]/">Attachments</a></li>
29     </ul>'
30   fi
31 }
32
33 theme_page(){
34   local page="$1" title
35   title="${page%/}"; title="${title##*/}"
36
37   # Important! Web Server response including newline
38   printf "%s\r\n" "Content-Type: text/html; charset=utf-8" ""
39
40   cat <<-EOF
41         <!DOCTYPE HTML>
42         <html><head>
43           $(theme_head)
44           <title>$(HTML "${title}")</title>
45         </head><body id="$(HTML "$page")">
46           $(theme_header)
47           <main>
48             $(theme_pagemenu)
49             <article>
50               $(wiki "$page" || printf 'Error while loading page <br> function "wiki" of index.sh returned with an error.')
51             </article>
52           </main>
53           $(theme_footer)
54         </body></html>
55         EOF
56 }
57
58 theme_editor(){
59   local page="$1" template="$2" title
60   title="${page%/}"; title="${title##*/}"
61
62   [ "$template" ] && acl_read "$template" || template="$page"
63
64   # Important! Web Server response including newline
65   printf "%s\r\n" "Content-Type: text/html; charset=utf-8" ""
66
67   cat <<-EOF
68         <!DOCTYPE HTML>
69         <html><head>
70           $(theme_head)
71           <title>$(HTML "${title}")</title>
72         </head><body id="$(HTML "$page")" class="editor">
73           $(theme_header)
74           <main><form method=POST action="$(HTML "${page%/}/[edit]")">
75             <input type=hidden name=session_key value="${SESSION_KEY}"/>
76             <textarea name=pagetext>$({ wiki_text "$page" \
77                                      || wiki_text "$template"; } |HTML)</textarea>
78             <button type=submit name=action value=update>Update</button>
79             <button type=submit name=action value=cancel>Cancel</button>
80           </form></main>
81           $(theme_footer)
82         </body></html>
83         EOF
84 }
85
86 theme_revisions(){
87   local page="$1" title
88   title="${page%/}"; title="${title##*/}"
89
90   # Important! Web Server response including newline
91   printf "%s\r\n" "Content-Type: text/html; charset=utf-8" ""
92
93   cat <<-EOF
94         <!DOCTYPE HTML>
95         <html><head>
96           $(theme_head)
97           <title>Revisions $(HTML "${title}")</title>
98         </head><body id="$(HTML "$page")[attachment]/">
99           $(theme_header)
100           <main>
101           $("$_EXEC/macros/revisions" "$page")
102           </main>
103           $(theme_footer)
104         </body></html>
105         EOF
106 }
107
108 theme_attachments(){
109   local page="$1" title
110   title="${page%/}"; title="${title##*/}"
111
112   # Important! Web Server response including newline
113   printf "%s\r\n" "Content-Type: text/html; charset=utf-8" ""
114
115   if acl_write "$page"; then
116     cat <<-EOF
117         <!DOCTYPE HTML>
118         <html><head>
119           $(theme_head)
120           <title>Attachments $(HTML "${title}")</title>
121         </head><body id="$(HTML "$page")[attachment]/">
122           $(theme_header)
123           <main>
124             <form class=upload method=POST enctype="multipart/form-data">
125               <input type=hidden name=session_id value="$SESSION_ID">
126               <input type=file name=file multiple>
127               <button type=submit name=action value=upload>Upload</button>
128             </form>
129
130             <form method=POST><ul class="attachment list">
131               <input type=hidden name=session_key value="$SESSION_KEY">
132             $(for file in "$_EXEC/pages/$page/#attachments"/* "$_DATA/pages/$page/#attachments"/*; do
133               [ "$file" = "$_EXEC/pages/$page/#attachments/${file##*/}" \
134                     -a -f "$_DATA/pages/$page/#attachments/${file##*/}" ] && continue
135               stat="$(stat -c '%s %Y' -- "$file" 2>&-)" || continue
136               size="${stat% *}" date="${stat#* }"
137             
138               printf '<li><button type=submit name=delete value="%s">Delete</button><a class=name href="%s">%s</a>
139                       <span class=size>%s</span><span class=date>%s</span></li>' \
140                 "$(HTML "${file##*/}")" "$(HTML "${file##*/}")" "$(HTML "${file##*/}")" \
141                 "$(size_human "$size")" "$(date -d @"$date" +"%F %T")"
142             done)
143             </ul></form>
144           </main>
145           $(theme_footer)
146         </body></html>
147         EOF
148   else
149     cat <<-EOF
150         <!DOCTYPE HTML>
151         <html><head>
152           $(theme_head)
153           <title>Attachments $(HTML "${title}")</title>
154         </head><body id="$(HTML "$page")[attachment]/">
155           $(theme_header)
156           <main>
157             <ul class="attachment list">
158             $(for file in "$_EXEC/pages/$page/#attachments"/* "$_DATA/pages/$page/#attachments"/*; do
159               [ "$file" = "$_EXEC/pages/$page/#attachments/${file##*/}" \
160                     -a -f "$_DATA/pages/$page/#attachments/${file##*/}" ] && continue
161               stat="$(stat -c '%s %Y' -- "$file" 2>&-)" || continue
162               size="${stat% *}" date="${stat#* }"
163             
164               printf '<li><a class=name href="%s">%s</a>
165                       <span class=size>%s</span><span class=date>%s</span></li>' \
166                 "$(HTML "${file##*/}")" "$(HTML "${file##*/}")" "$(size_human "$size")" "$(date -d @"$date" +"%F %T")"
167             done)
168             </ul>
169           </main>
170           $(theme_footer)
171         </body></html>
172         EOF
173   fi
174 }
175
176 theme_error(){
177   local errno="$1"
178
179   case $errno in
180     400) printf "%s\r\n" "Status: 400 Bad Request";;
181     403) printf "%s\r\n" "Status: 403 Forbidden";;
182     404) printf "%s\r\n" "Status: 404 Not Found";;
183     409) printf "%s\r\n" "Status: 409 Conflict";;
184     500) printf "%s\r\n" "Status: 500 Internal Server Error";;
185   esac
186
187   if [ "$(mdfile "/[wiki]/$errno/")" ]; then
188     theme_page "/[wiki]/$errno/"
189   else
190     printf "Content-Length: 0\r\n\r\n"
191   fi
192 }