s4

view s4-cgi.sh @ 1037:634fee6a6bd2

Add row number to title attribute after sort.
author HIROSE Yuuji <yuuji@gentei.org>
date Wed, 06 Mar 2024 09:55:20 +0900
parents 5d70fa029f8d
children
line source
1 #
2 # cgi functions
3 #
4 cgi_form() {
5 # $1=stage
6 # $METHOD := method, defaults to "POST"
7 : ${myname:?'Sure to set $myname to this script name'}
8 cont=`cat`
9 cat<<EOF
10 <form action="$myname" method="${METHOD:-POST}" enctype="multipart/form-data">
11 $cont
12 <input type="hidden" name="stage" value="$1">
13 <input type="submit" value="送信" title="COMMIT">
14 <input type="reset" value="リセット" title="Reset">
15 </form>
16 EOF
17 }
18 cgi_submit() {
19 cat<<EOF
20 <input type="submit" value="$1">
21 EOF
22 }
23 cgi_reset() {
24 cat<<EOF
25 <input type="reset" value="$1">
26 EOF
27 }
28 cgi_radio() {
29 echo "<input type=\"radio\" name=\"$1\" ${2:+value=\"$2\"} $3>"
30 }
31 cgi_checkbox() {
32 echo "<input type=\"checkbox\" name=\"$1\" ${2:+value=\"$2\"} $3>"
33 }
34 cgi_hidden() {
35 echo "<input type=\"hidden\" name=\"$1\" value=\"$2\" $3>"
36 }
37 cgi_passwd() {
38 cat<<EOF
39 <table class="pswd">
40 <tr><td>現パスワード</td><td><input type="password" name="pswd"></td></tr>
41 <tr><td>新パスワード</td><td><input type="password" name="pswd1"></td></tr>
42 <tr><td>新パスワード(確認)</td><td><input type="password" name="pswd2"></td></tr>
43 </table>
44 EOF
45 }
46 cgi_text() {
47 _v=`printf '%s' "$2"|htmlescape`
48 echo "<input type=\"text\" name=\"$1\" value=\"$_v\" $3>"
49 }
50 cgi_textarea() {
51 _v=`printf '%s' "$2"|htmlescape`
52 cat<<EOF
53 <textarea name="$1" $3>$_v</textarea>
54 EOF
55 }
56 cgi_file() ( # In a subshell
57 # $1=name $2=val(as filename) $3=args(if any)
58 ## err cgi_file: \$1=$1 \$2=$2 \$3="[$3]"
59 # Using global variable $dir
60 case "$3" in
61 *multiple*)
62 onemore='<button type="button" id="morefile" title="More attachment file">添付追加</button>'
63 # multiple="$nl$onemore"
64 ;;
65 esac
66 if [ -n "$2" -a -s "$dir/$2" ]; then
67 file=$dir/$2
68 bn=${file##*/}
69 ct=`file --mime-type - < "$dir/$2" | cut -d' ' -f2`
70 data=`percenthex "$file"`
71 icon="<img src=\"data:$ct,$data\">"
72 fi
73 cat<<EOF
74 <span class="fileinput">${icon}&nbsp; <!-- keep line hight -->
75 <input type="file" name="$1" value="$bn" $3$multiple>
76 </span>$onemore
77 EOF
78 )
79 cgi_multi() (
80 # $1=name $2=dir $3=func $4=args...
81 # `dir' should contain $name.count and $name.N where N is 1 upto N
82 i=1 name=$1 dir=$2 func=$3
83 argnomulti=`printf '%s' "$4"|sed 's/multiple//'` # No multiple for Replaced entries
84 n=`cat $dir/$name.count`
85 case "$func" in
86 *file) addrename=yes ;;
87 esac
88 echo '<table class="text">'
89 while [ $i -le $n ]; do
90 file=$name.$i
91 vname=$file.`cat "$dir/$file.rowid"`
92 val="`cat $dir/$file`"
93 if [ -n "$addrename" ]; then
94 # ${var:+..} cannot be used for inside-quotes incompatibility of shells
95 ren1="<input class=\"action\" type=\"radio\" name=\"action.$vname\"
96 id=\"mv.$vname\" value=\"mv\"><label for=\"mv.$vname\"
97 title=\"Rename\">名前変更</label>"
98 ren2="<input class=\"mv\" type=\"text\" name=\"mv.$vname\" value=\"$val\">"
99 fi
100 cat<<EOF
101 <tr><td>($i)</td><td>
102 <input class="action" type="radio" name="action.$vname" id="keep.$vname"
103 value="keep"><label for="keep.$vname" title="Keep">温存</label>
104 <input class="action" type="radio" name="action.$vname" id="edit.$vname"
105 value="edit"><label for="edit.$vname" title="Replace">修正</label>
106 $ren1
107 <input class="action" type="radio" name="action.$vname" id="rm.$vname"
108 value="rm"><label for="rm.$vname" title="Remove">削除</label>
109 <label class="confirm" title="OK?">本当に消します<input class="confirm" type="checkbox"
110 name="confirm.$vname" value="yes">はい</label><br>
111 `$func $vname "$val" "$argnomulti"`<span>$val</span>
112 $ren2
113 </td></tr>
114 EOF
115 i=$((i+1))
116 done
117 cat<<EOF
118 <tr><td>(新規)</td><td>`$func $name "" "$4"`</td></tr>
119 </table>
120 EOF
121 )
122 # In these functions, $2 should be quoted because it can be null
123 cgi_multi_text() {
124 cgi_multi $1 "$2" cgi_text "$3 class=\"edit\""
125 }
126 cgi_multi_textarea() {
127 cgi_multi $1 "$2" cgi_textarea "$3 class=\"edit\""
128 }
129 cgi_multi_file() {
130 # $1=name $2=val(filename)
131 cgi_multi $1 "$2" cgi_file "$3 class=\"edit\""
132 }
133 cgi_datalist_h() {
134 # $1=id $2...=hexed-args
135 echo "<datalist id=\"$1\">"
136 shift
137 for i; do
138 echo "<option value=\"`echo "$i"|unhexize|htmlescape`\"></option>"
139 done
140 echo "</datalist>"
141 }
142 cgi_select_h() {
143 # $1=name $2...=hexed-args
144 echo "<select name=\"$1\"${CGI_SELECT_MULTI:+ multiple} id=\"$1\">"
145 shift
146 for i; do
147 echo "<option>`echo \"$i\"|unhexize|htmlescape`</option>"
148 done
149 echo "</select>"
150 }
152 html() {
153 echo "<$*>"
154 cat
155 echo "</$1>"
156 }