X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=index.cgi;h=efae974727b9340b4206c613059a3648de079ab8;hb=3fdd2a599459588ed9054c16ce20b79d27faa353;hp=363e969e1a5f82b6adda9456fa0ca265e48327d7;hpb=856d7b3c7823e768e4ad468ff2203fde3838e861;p=webpoll diff --git a/index.cgi b/index.cgi index 363e969..efae974 100755 --- a/index.cgi +++ b/index.cgi @@ -2,13 +2,17 @@ _EXEC="${_EXEC:-${0%/*}/}" _DATA="${_DATA:-.}" +_BASE="${_BASE%/}" . "$_EXEC"/cgilite/cgilite.sh -#. "$_EXEC"/cgilite/session.sh +. "$_EXEC"/cgilite/session.sh . "$_EXEC"/cgilite/file.sh +. "$_EXEC"/cgilite/storage.sh #. "$_EXEC"/session_lock.sh . "$_EXEC"/widgets.sh +PATH_INFO="$(PATH "/${PATH_INFO#${_BASE}}")" + #git init "$_DATA" >/dev/null & yield_page(){ @@ -19,25 +23,68 @@ yield_page(){ { printf '[html [head [meta name="viewport" content="width=device-width"] - [link rel="stylesheet" type="text/css" href="common.css"] + [link rel="stylesheet" type="text/css" href="%s/common.css"] + [link rel="stylesheet" type="text/css" href="%s/widgets.css"] + [link rel="stylesheet" type="text/css" href="%s/webpoll.css"] [title %s] ] [body class="%s" - ' "$title" "$page" + ' "$_BASE" "$_BASE" "$_BASE" "$title" "$page" cat printf '] ]' } |"$_EXEC/cgilite/html-sh.sed" -u } -case ${PATH_INFO##*/} in - favicon.ico) printf '%s\r\n' 'Content-Length: 0' '';; - common.css) FILE "$_EXEC/cgilite/common.css";; - widgets.css) FILE "$_EXEC/widgets.css";; - '') yield_page <<-EOF - $(w_month 2019-12 24) - $(w_month 2020-01) - $(w_month 2020-02) +pagename() { + local id="$1" + local file="$_DATA/$id" + if [ -f "$file" ]; then + DBM "$file" get title || printf 'Unnamed Page' + else + return 1; + fi +} + +page_home() { + if [ "$REQUEST_METHOD" = POST ]; then + case $(POST start) in + date) + id="$(randomid)" + touch "$_DATA/$id" + REDIRECT "$_BASE/$id/newdate" + ;; + options) + id="$(randomid)" + touch "$_DATA/$id" + REDIRECT "$_BASE/$id/newoptions" + ;; + *) REDIRECT "$_BASE/";; + esac + else + recent="$(COOKIE pages)" + yield_page "Start a Poll" "home" <<-EOF + [form method=post + [submit "start" "date" Start a new poll] + $(if [ "$recent" ]; then + printf '[h2 Recent Polls][ul .recent' + for page in $recent; do + [ -f "$_DATA/$(checkid "$page")" ] \ + && printf '[li [a href="./%s" . %s]]' "$page" "$(pagename "$page" |HTML)" + done + printf ']' + fi) + ] EOF - return 0 - ;; + fi +} +page_newdate() { . $_EXEC/newdate.sh; } + +case ${PATH_INFO} in + /favicon.ico) printf '%s\r\n' 'Content-Length: 0' '';; + /common.css) FILE "$_EXEC/cgilite/common.css";; + /widgets.css|/webpoll.css) FILE "${_EXEC}/${PATH_INFO}";; + /) page_home;; + /*/newdate) page_newdate;; + /*/newoptions);; + *);; esac