From 9f4240c2867a03627e7b1615790255f1bbf7e568 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Paul=20H=C3=A4nsch?= <paul@plutz.net>
Date: Mon, 23 May 2022 11:38:09 +0200
Subject: [PATCH] allow page content from stdin for easyer theming of special
 pages

---
 themes/default.sh | 161 +++++++++++++++++-----------------------------
 1 file changed, 60 insertions(+), 101 deletions(-)

diff --git a/themes/default.sh b/themes/default.sh
index e9e9d73..1f8d285 100755
--- a/themes/default.sh
+++ b/themes/default.sh
@@ -24,15 +24,18 @@ theme_pagemenu(){
   if acl_write "$page"; then
     printf  '
     <ul class="pagemenu">
-      <li><a href="[edit]">Edit</a></li>
-      <li><a href="[attachment]/">Attachments</a></li>
+      <li><a href="./">View</a></li>
+      <li><a href="./[edit]">Edit</a></li>
+      <li><a href="./[attachment]">Attachments</a></li>
+      <li><a href="./[revision]">Revisions</a></li>
     </ul>'
   fi
 }
 
 theme_page(){
-  local page="$1" title
-  title="${page%/}"; title="${title##*/}"
+  local page="$1" title="$2" id="$3"
+  title="$(HTML "${title:-"${page}"}")"
+  id="$(HTML "${id:-"${page}"}")"
 
   # Important! Web Server response including newline
   printf "%s\r\n" "Content-Type: text/html; charset=utf-8" ""
@@ -41,14 +44,18 @@ theme_page(){
 	<!DOCTYPE HTML>
 	<html><head>
 	  $(theme_head)
-	  <title>$(HTML "${title}")</title>
-	</head><body id="$(HTML "$page")">
+	  <title>${title}</title>
+	</head><body id="$id">
 	  $(theme_header)
 	  <main>
 	    $(theme_pagemenu)
-	    <article>
-	      $(wiki "$page" || printf 'Error while loading page <br> function "wiki" of index.sh returned with an error.')
-	    </article>
+	    $(if [ "$page" = '-' ]; then
+	        cat
+	      else
+	        printf '<article>'
+	        wiki "$page"
+	        printf '</article>'
+	    fi)
 	  </main>
 	  $(theme_footer)
 	</body></html>
@@ -61,25 +68,14 @@ theme_editor(){
 
   [ "$template" ] && acl_read "$template" || template="$page"
 
-  # Important! Web Server response including newline
-  printf "%s\r\n" "Content-Type: text/html; charset=utf-8" ""
-
-  cat <<-EOF
-	<!DOCTYPE HTML>
-	<html><head>
-	  $(theme_head)
-	  <title>$(HTML "${title}")</title>
-	</head><body id="$(HTML "$page")" class="editor">
-	  $(theme_header)
-	  <main><form method=POST action="$(HTML "${page%/}/[edit]")">
-	    <input type=hidden name=session_key value="${SESSION_KEY}"/>
-            <textarea name=pagetext>$({ wiki_text "$page" \
-                                     || wiki_text "$template"; } |HTML)</textarea>
-            <button type=submit name=action value=update>Update</button>
-            <button type=submit name=action value=cancel>Cancel</button>
-          </form></main>
-	  $(theme_footer)
-	</body></html>
+  theme_page - "Editor: $title" "${page}[edit]" <<-EOF
+	<form method=POST action="$(HTML "${page%/}/[edit]")">
+	  <input type=hidden name=session_key value="${SESSION_KEY}"/>
+	  <textarea name=pagetext>$({ wiki_text "$page" \
+	                           || wiki_text "$template"; } |HTML)</textarea>
+	  <button type=submit name=action value=update>Update</button>
+	  <button type=submit name=action value=cancel>Cancel</button>
+	</form>
 	EOF
 }
 
@@ -87,88 +83,51 @@ theme_revisions(){
   local page="$1" title
   title="${page%/}"; title="${title##*/}"
 
-  # Important! Web Server response including newline
-  printf "%s\r\n" "Content-Type: text/html; charset=utf-8" ""
-
-  cat <<-EOF
-	<!DOCTYPE HTML>
-	<html><head>
-	  $(theme_head)
-	  <title>Revisions $(HTML "${title}")</title>
-	</head><body id="$(HTML "$page")[attachment]/">
-	  $(theme_header)
-	  <main>
-	  $("$_EXEC/macros/revisions" "$page")
-	  </main>
-	  $(theme_footer)
-	</body></html>
-	EOF
+ "$_EXEC/macros/revisions" "$page" \
+  | theme_page - "Revisions: $title" "${page}[revision]"
 }
 
 theme_attachments(){
   local page="$1" title
   title="${page%/}"; title="${title##*/}"
 
-  # Important! Web Server response including newline
-  printf "%s\r\n" "Content-Type: text/html; charset=utf-8" ""
-
   if acl_write "$page"; then
-    cat <<-EOF
-	<!DOCTYPE HTML>
-	<html><head>
-	  $(theme_head)
-	  <title>Attachments $(HTML "${title}")</title>
-	</head><body id="$(HTML "$page")[attachment]/">
-	  $(theme_header)
-	  <main>
-	    <form class=upload method=POST enctype="multipart/form-data">
-	      <input type=hidden name=session_id value="$SESSION_ID">
-	      <input type=file name=file multiple>
-	      <button type=submit name=action value=upload>Upload</button>
-	    </form>
-
-            <form method=POST><ul class="attachment list">
-	      <input type=hidden name=session_key value="$SESSION_KEY">
-	    $(for file in "$_EXEC/pages/$page/#attachments"/* "$_DATA/pages/$page/#attachments"/*; do
-	      [ "$file" = "$_EXEC/pages/$page/#attachments/${file##*/}" \
-	            -a -f "$_DATA/pages/$page/#attachments/${file##*/}" ] && continue
-	      stat="$(stat -c '%s %Y' -- "$file" 2>&-)" || continue
-	      size="${stat% *}" date="${stat#* }"
-	    
-	      printf '<li><button type=submit name=delete value="%s">Delete</button><a class=name href="%s">%s</a>
-	              <span class=size>%s</span><span class=date>%s</span></li>' \
-	        "$(HTML "${file##*/}")" "$(HTML "${file##*/}")" "$(HTML "${file##*/}")" \
-	        "$(size_human "$size")" "$(date -d @"$date" +"%F %T")"
-	    done)
-            </ul></form>
-	  </main>
-	  $(theme_footer)
-	</body></html>
+    theme_page - "Attachments: $title" "${page}[attachment]" <<-EOF
+	<form class=upload method=POST enctype="multipart/form-data">
+	  <input type=hidden name=session_id value="$SESSION_ID">
+	  <input type=file name=file multiple>
+	  <button type=submit name=action value=upload>Upload</button>
+	</form>
+	
+	<form method=POST><ul class="attachment list">
+	  <input type=hidden name=session_key value="$SESSION_KEY">
+	$(for file in "$_EXEC/pages/$page/#attachments"/* "$_DATA/pages/$page/#attachments"/*; do
+	  [ "$file" = "$_EXEC/pages/$page/#attachments/${file##*/}" \
+	        -a -f "$_DATA/pages/$page/#attachments/${file##*/}" ] && continue
+	  stat="$(stat -c '%s %Y' -- "$file" 2>&-)" || continue
+	  size="${stat% *}" date="${stat#* }"
+	
+	  printf '<li><button type=submit name=delete value="%s">Delete</button><a class=name href="%s">%s</a>
+	          <span class=size>%s</span><span class=date>%s</span></li>' \
+	    "$(HTML "${file##*/}")" "$(HTML "${file##*/}")" "$(HTML "${file##*/}")" \
+	    "$(size_human "$size")" "$(date -d @"$date" +"%F %T")"
+	done)
+	</ul></form>
 	EOF
   else
-    cat <<-EOF
-	<!DOCTYPE HTML>
-	<html><head>
-	  $(theme_head)
-	  <title>Attachments $(HTML "${title}")</title>
-	</head><body id="$(HTML "$page")[attachment]/">
-	  $(theme_header)
-	  <main>
-            <ul class="attachment list">
-	    $(for file in "$_EXEC/pages/$page/#attachments"/* "$_DATA/pages/$page/#attachments"/*; do
-	      [ "$file" = "$_EXEC/pages/$page/#attachments/${file##*/}" \
-	            -a -f "$_DATA/pages/$page/#attachments/${file##*/}" ] && continue
-	      stat="$(stat -c '%s %Y' -- "$file" 2>&-)" || continue
-	      size="${stat% *}" date="${stat#* }"
-	    
-	      printf '<li><a class=name href="%s">%s</a>
-	              <span class=size>%s</span><span class=date>%s</span></li>' \
-	        "$(HTML "${file##*/}")" "$(HTML "${file##*/}")" "$(size_human "$size")" "$(date -d @"$date" +"%F %T")"
-	    done)
-            </ul>
-	  </main>
-	  $(theme_footer)
-	</body></html>
+    theme_page - "Attachments: $title" "${page}[attachment]" <<-EOF
+	<ul class="attachment list">
+	$(for file in "$_EXEC/pages/$page/#attachments"/* "$_DATA/pages/$page/#attachments"/*; do
+	  [ "$file" = "$_EXEC/pages/$page/#attachments/${file##*/}" \
+	        -a -f "$_DATA/pages/$page/#attachments/${file##*/}" ] && continue
+	  stat="$(stat -c '%s %Y' -- "$file" 2>&-)" || continue
+	  size="${stat% *}" date="${stat#* }"
+	
+	  printf '<li><a class=name href="%s">%s</a>
+	          <span class=size>%s</span><span class=date>%s</span></li>' \
+	    "$(HTML "${file##*/}")" "$(HTML "${file##*/}")" "$(size_human "$size")" "$(date -d @"$date" +"%F %T")"
+	done)
+	</ul>
 	EOF
   fi
 }
-- 
2.39.5