]> git.plutz.net Git - webtxt/blobdiff - index.cgi
Merge commit '0062e5835b9a5aa82e017c446a1bd54f1d9d7e2b'
[webtxt] / index.cgi
index 3ece8708486de781fd9e748bfc705173429e52fb..f2e065ef1e26241aaf444290d02edfac95110c4b 100755 (executable)
--- a/index.cgi
+++ b/index.cgi
@@ -8,10 +8,20 @@ _DATA="${_DATA:-.}"
 . "$_EXEC"/cgilite/file.sh
 . "$_EXEC"/session_lock.sh
 
-git init "$_DATA" >/dev/null
+git init "$_DATA" >/dev/null &
+
+export MD_HTML="false"
+markdown() {
+  local awkbin=`which awk`
+  if [ "$awkbin" ]; then
+    "$awkbin" -f "$_EXEC"/cgilite/markdown.awk
+  else
+    busybox awk -f "$_EXEC"/cgilite/markdown.awk
+  fi
+}
 
 yield_page(){
-  page="$1"
+  title="${1:-WebTXT}" page="$2"
   printf '%s\r\n' 'Content-Type: text/html; charset=utf-8' \
                   "Content-Security-Policy: script-src 'none'" \
                   ''
@@ -20,26 +30,37 @@ yield_page(){
       [meta name="viewport" content="width=device-width"]
       [link rel="stylesheet" type="text/css" href="common.css"]
       [link rel="stylesheet" type="text/css" href="webnote.css"]
-      [title Webnote]
+      [title %s]
     ] [body class="%s"
-  ' "$page"
+  ' "$title" "$page"
   cat
   printf '] ]'
   } |"$_EXEC/cgilite/html-sh.sed" -u
 }
 
+pagename() {
+  local name page="${1##*/}"
+  name="$(sed -nE "/[a-zA-Z0-9].[^\r   ]/{s;\r$;;; p; q;};" "$_DATA/$page")"
+  [ "$name" ] && printf %s "$name" \
+              || printf %s "$page"
+}
+
+recent="$(COOKIE pages)"
+
 case ${PATH_INFO##*/} in
   favicon.ico) printf '%s\r\n' 'Content-Length: 0' '';;
   common.css) FILE "$_EXEC/cgilite/common.css";;
   webnote.css) FILE "$_EXEC/webnote.css";;
   '') yield_page <<-EOF
        [form .new action=new [button type=submit New Note]
-          $(if [ "$(COOKIE pages)" ]; then
+          $(if [ "$recent" ]; then
            printf '[h2 Recent Pages][ul .recent'
-           { COOKIE pages; echo; } |tr \  \\n |while read page; do
-             [ "$(printf %s "$page" |checkid)" ] && printf '[li [a href="./%s" . %s]]' "$page" "$page"
+           for page in $recent; do
+             [ -f "$_DATA/$(printf %s "$page" |checkid)" ] \
+              && printf '[li [a href="./%s" . %s]]' "$page" "$(pagename "$page" |HTML)"
            done
-           fi)]
+            printf ']'
+         fi)
        ]
        EOF
     return 0
@@ -63,7 +84,7 @@ fi
 [ $REQUEST_METHOD = POST ] && case $(POST action) in
   edit)
     if temp=$(SLOCK "$doc"); then
-      yield_page <<-EOF
+      yield_page "$(pagename "$doc" |HTML)" <<-EOF
        [form method=POST
           [input type=hidden name=session_key value="$SESSION_KEY"]
          [button type=submit name=action value=cancel Cancel]
@@ -72,7 +93,7 @@ fi
        ]
        EOF
     else
-      yield_page <<-EOF
+      yield_page "$(pagename "$doc" |HTML) - Error" <<-EOF
        [p .error .locked Someone else is already editing this Dokument. Wait a few minutes and try again. [a href="$PATH_INFO" Nothing else I can do.]]
        EOF
     fi
@@ -86,10 +107,10 @@ fi
     if temp=$(CHECK_SLOCK "$doc"); then
       RELEASE_SLOCK "$doc"
       POST document >"${doc}"
-      git -C "$_DATA" commit -m "update note ${doc##*/} \"$(sed '1{s;\r;;; q;}' "$doc")\"" "${doc##*/}" >/dev/null
+      git -C "$_DATA" commit -m "update note ${doc##*/} \"$(pagename "$doc")\"" "${doc##*/}" >/dev/null
       REDIRECT "$PATH_INFO"
     else
-      yield_page <<-EOF
+      yield_page "$(pagename "$doc" |HTML) - Error" <<-EOF
        [p .error .stolen Your edit took too long and someone else is now editing this file. [a href="$PATH_INFO" Dang, I must be quicker next time!]]
        [p Copy your Content for reference:]
        [div .text . $(POST document |HTML)]
@@ -99,13 +120,13 @@ fi
     ;;
 esac
 
-COOKIE pages |tr \  \\n |grep -qF "${doc##*/}" \
-|| SET_COOKIE +$((90 * 86400)) pages="$(COOKIE pages && printf ' %s' "${doc##*/}" || printf '%s' "${doc##*/}")" Path="${PATH_INFO%/*}/"
+printf %s "$recent" |grep -qwF "${doc##*/}" \
+|| SET_COOKIE +$((90 * 86400)) pages="${recent}${recent+ }${doc##*/}" Path="${PATH_INFO%/*}/"
 
-yield_page <<-EOF
+yield_page "$(pagename "$doc" |HTML)" <<-EOF
        [form method=POST
           [input type=hidden name=session_key value="$SESSION_KEY"]
          [button type=submit name=action value=edit Edit]
        ]
-       [div .text . $(HTML <"$doc")]
+       [div .text . $(markdown <"$doc")]
        EOF