X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=themes%2Fdefault.sh;h=eb3d537442c41f90e4202ad47029e186fb6f38da;hb=3c949f9f02cddc9d1cd30174342aae1d58175999;hp=6370166017775241ed9691cfca7c23c78b7282d7;hpb=4fb35b146e7aca6faf5945105ab36a270b7f1ad5;p=shellwiki diff --git a/themes/default.sh b/themes/default.sh index 6370166..eb3d537 100755 --- a/themes/default.sh +++ b/themes/default.sh @@ -1,27 +1,237 @@ #!/bin/sh -theme_404(){ - printf "%s\r\n" "Status: 404 Not Found" +# Copyright 2022 - 2023 Paul Hänsch +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - theme_page '/[404]/' +. "$_EXEC/tools.sh" + +theme_head(){ + local IFS="$BR" + printf ' + + ' + for css in "$_BASE/%5B.%5D/cgilite/common.css" "$_BASE/%5B.%5D/themes/default.css" $PAGE_CSS; do + printf '' \ + "$(HTML "${css##*//}")" + done +} + +theme_header(){ + printf '
%s
' "$(wiki '[wiki]/header/')" +} + +theme_footer(){ + printf '' "$(wiki '[wiki]/footer/')" +} + +theme_pagemenu(){ + local page="$1" + + if acl_write "$page"; then + cat <<-EOF + + EOF + fi } theme_page(){ - local page="$1" title - title="${page%/}"; title="${title##*/}" + local page="$1" title="$2" + title="$(HTML "${title:-"${PAGE_TITLE:-"${page}"}"}")" + # Important! Web Server response including newline printf "%s\r\n" "Content-Type: text/html; charset=utf-8" "" cat <<-EOF - - - - $(HTML "${title}") - -
-
$(wiki "$page" || printf 'Page not found')
- + + $(theme_head) + ${title} + + $(theme_header) +
+ $(theme_pagemenu) + $(if [ "$page" = '-' ]; then + cat + else + printf '
' + wiki "$page" + printf '
' + fi) +
+ $(theme_footer) EOF } + +theme_editor(){ + local page="$1" template="$2" title file att + title="$(HTML "${PAGE_TITLE:-"${page}"}")" + + [ "$template" ] && acl_read "$template" || template="$page" + + theme_page - "Editor: $title" <<-EOF + + + + $([ "$LANGUAGE_DEFAULT" -a "$LANGUAGE_DEFAULT" != "$LANGUAGE" ] && printf ' + + ' "$LANGUAGE_DEFAULT" + ) +
+ + + + +
+
$(wiki "/[wiki]/editorhelp/")
+
+ $(for file in "$_EXEC/pages/${page%/:$LANGUAGE/}/#attachments"/* "$_DATA/pages/${page%/:$LANGUAGE/}/#attachments"/*; do + [ "$file" = "$_EXEC/pages/${page%/:$LANGUAGE/}/#attachments/${file##*/}" \ + -a -f "$_DATA/pages/${page%/:$LANGUAGE/}/#attachments/${file##*/}" ] && continue + case ${file##*/} in + \*) continue;; + *.[pP][nN][gG]|*.[jJ][pP][gG]|*.[jJ][pP][eE][gG]|*.[gG][iI][fF]) + [ "$page" != "${page%/:$LANGUAGE/}" ] && p=../ || p='' + att="$(HTML "${file##*/}")" + printf '

![](%s)

' \ + "$p" "$att" "$att" "$att" "$att" "$att" "$att" "$att" + ;; + *) + att="$(HTML "${file##*/}")" + printf '

[%s](%s)

' "$att" "$att" + ;; + esac + done) +
+ $(if [ "$LANGUAGE_DEFAULT" -a "$LANGUAGE_DEFAULT" != "$LANGUAGE" ]; then + printf '
%s
' "$(LANGUAGE='' wiki_text "${page%/:$LANGUAGE/}" |HTML)" + fi) + EOF +} + +theme_revisions(){ theme_page "$@"; } + +theme_search(){ + local words="$*" + # STDIN: read result pages line by line + + theme_page - <<-EOF +
+

$([ "$words" ] && _ "Search results" || _ "Search" )

+ +
    + $( while read p; do + printf '
  1. %s
  2. ' "$(URL "$p")" "$(HTML "$p")" + done) +
+
+ EOF +} + +theme_attachments(){ + local page="$1" title + title="${page%/}"; title="${title##*/}" + + if acl_write "$page"; then + theme_page - "$(_ Attachments): $title" <<-EOF +
+

$(_ Upload)

+ + + +
+ +
+

$(_ Attachments)

+ + + + + +
+
    + $(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#* }" + hfile="$(HTML "${file##*/}")" + + printf '
  • + + + %s + %s + %s +
  • ' \ + "$hfile" "$hfile" "$hfile" "$hfile" \ + "$(slopecode "${file##*/}")" "$hfile" "$hfile" "$hfile" \ + "$(size_human "$size")" "$(date -d @"$date" +"%F %T")" + done) +
+ + + + + +
+
+ EOF + else + theme_page - "$(_ Attachments): $title" <<-EOF + + EOF + fi +} + +theme_error(){ + local errno="$1" + + case $errno in + 400) printf "%s\r\n" "Status: 400 Bad Request";; + 403) printf "%s\r\n" "Status: 403 Forbidden";; + 404) printf "%s\r\n" "Status: 404 Not Found";; + 409) printf "%s\r\n" "Status: 409 Conflict";; + 500) printf "%s\r\n" "Status: 500 Internal Server Error";; + esac + + if mdfile "/[wiki]/$errno/" >&-; then + theme_page "/[wiki]/$errno/" + else + printf "Content-Length: 0\r\n\r\n" + fi +}