]> git.plutz.net Git - confetti/blob - cards/widgets.sh
new cards function
[confetti] / cards / widgets.sh
1 # Copyright 2014 - 2019 Paul Hänsch
2 #
3 # This file is part of Confetti.
4
5 # Confetti is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
9
10 # Confetti is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU Affero General Public License for more details.
14
15 # You should have received a copy of the GNU Affero General Public License
16 # along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
17
18 list_categories() {
19   grep -vxE '^[         ]*$' "${_DATA}/mappings/categories"
20 }
21
22 w_filter_item() {
23 n=$3
24 cat <<EOF
25   [fieldset .item
26     [legend $(l10n filter_item):]
27
28     $(for field in any name street zip TEL BDAY CATEGORIES; do
29       printf '[input id="%s%i" type="radio" name="filter_type%i" value="%s" %s]
30               [label for="%s%i" %s ]' \
31               "$field" "$n" "$n" "$field" "$([ "$1" = "$field" ] && printf checked )" \
32               "$field" "$n" "$(l10n filter_$field)"
33     done)
34     [input type="text" name="filter_text$n" value="$([ "$1" = CATEGORIES ] || HTML "$2")" placeholder="$(l10n filter_placeholder)"]
35     [fieldset .categories
36       $(list_categories | while read cat; do
37           printf '[label [checkbox "filter_cat%i" "|%s" %s] %s ]' \
38                  "$n" "$(HTML "$cat")" \
39                  "$(printf %s "$cat" |grep -qxEe "$2" && printf checked )" \
40                  "$(HTML "$cat")"
41       done)
42       [a href="/cards/categories.sh" $(l10n edit_categories)]
43     ]
44   ]
45 EOF
46 }
47
48 w_filter_diag(){
49   cat <<EOF
50   [form .filter action="/cards/filter_card.sh" method="POST"
51     [h1 $(l10n filter_label)]
52     [input type="hidden" name="page" value="cards"]
53   
54     $(n=0; filter="${filter}^"
55       while [ "${filter#^}" ]; do
56         fil="${filter%%^*}" filter="${filter#*^}"
57         w_filter_item "${fil%%:*}" "${fil#*:}" $n
58         n=$((n + 1))
59       done
60       w_filter_item any '' $n
61     )
62   
63     [fieldset class="order"
64       [legend $(l10n filter_order):]
65       [label [radio "order" "firstname" $( [ "$order" = firstname ] && printf checked )] $(l10n filter_firstname)]
66       [label [radio "order" "lastname"  $( [ "$order" = lastname  ] && printf checked )] $(l10n filter_lastname)]
67       [label [radio "order" "bdate"     $( [ "$order" = bdate     ] && printf checked )] $(l10n filter_bdate)]
68     ]
69     [button type="submit" name="choice" value="new_filter" $(l10n filter_apply)]
70     [button type="submit" name="choice" value="del_filter" $(l10n filter_cancel)]
71   ]
72 EOF
73 }
74
75 # listcards |grep ${edit:+-v} "$edit" \
76 # | while read card; do
77 #   "${_EXEC}"/cgilite/html-sh.sed <<-ENDCARD
78 #       [div #${card} .card
79 #         $(view_card "$card")[!--
80 #         --][div .control
81 #           [a "?action=edit_card&card=${card}" .item $(l10n edit)]
82 #           [a "?action=export_vcard&card=${card}".item $(l10n vcf_export)]
83 #           ${profile_medical:+[a "?action=new_prescription&client=${card}" .item $(l10n new_prescription)]}
84 #       ]]
85 #       ENDCARD
86 # done
87
88 #!/bin/sh
89
90 card_item(){
91   local card="$1"
92   local item cnt c
93   shift 1
94
95   for item in $@; do
96     cnt="$(pdi_count "$card" "$item")"
97
98     case $item in
99       FN) printf '[h2 .item .FN &shy;%s]' "$(pdi_value "$card" FN |unescape |HTML)"
100         ;;
101       GENDER) printf '[span .item .GENDER &shy;%s]' "$(pdi_value "$card" GENDER |l10n)"
102         ;;
103       NICKNAME) seq 1 $cnt |while read c; do
104           printf '[span .item .NICKNAME &shy;aka. "%s"]' \
105                  "$(pdi_value "$card" NICKNAME $c |unescape |HTML)"
106         done
107         ;;
108       X-ZACK-JOINDATE|X-ZACK-LEAVEDATE) if [ $cnt -gt 0 ]; then
109           printf '[span .item .%s [b %s:] %s]' \
110                  "$item" "$(l10n "${item}_short")" \
111                  "$(pdi_value "$card" "$item" |HTML)"
112         fi
113         ;;
114       BDAY)
115        [ $cnt -gt 0 ] && printf '[span .item .BDAY [b *:] %s]' \
116                                 "$(pdi_value "$card" BDAY |grep -xE '[0-9-]+')"
117         ;;
118       SOUND)
119         [ $cnt -gt 0 ] && printf '[audio .item .SOUND controls="controls"
120                                     [source type="audio/ogg" src="data:audio/ogg;base64,%s"]
121                                   ]' \
122                                   "$(pdi_value "$card" SOUND |grep -xE '[a-zA-Z0-9/+=]+')"
123         ;;
124       PHOTO|LOGO)
125         [ $cnt -gt 0 ] && printf '[img .item .%s src="data:image/%s;base64,%s"]' "$item" \
126                                  "$(pdi_attrib "$card" "$item" |sed -E 's;^(.*;)?TYPE="?(.+)"?(;.*)?$;\2;')" \
127                                  "$(pdi_value "$card" "$item" |grep -xE '[a-zA-Z0-9/+=]+')"
128         ;;
129       EMAIL) 
130         [ $cnt -gt 0 ] && printf '[h3 %s]' "$(l10n EMAIL)"
131         seq 1 $cnt |while read c; do
132           printf '[a .item .EMAIL href="mailto:%s" &shy;%s]' \
133                  "$(pdi_value "$card" EMAIL $c |unescape |HTML)" \
134                  "$(pdi_value "$card" EMAIL $c |unescape |HTML)"
135         done
136         ;;
137       TEL)
138         [ $cnt -gt 0 ] && printf '[h3 %s]' "$(l10n TEL)"
139         seq 1 $cnt |while read c; do
140           teltype="$(pdi_attrib "$card" TEL $c TYPE)"
141           [ "$teltype" ] \
142           && printf '[span .item .TEL [span .type &shy;%s:] %s]' \
143                     "$(l10n "TYPE=$teltype" |HTML)" \
144                     "$(pdi_value "$card" TEL $c |unescape |HTML)" \
145           || printf '[span .item .TEL &shy;%s]' \
146                     "$(pdi_value "$card" TEL $c |unescape |HTML)"
147         done
148         ;;
149       *)[ $cnt -gt 0 ] && printf '[h3 %s]' "$(l10n "$item")"
150         seq 1 $cnt |while read c; do
151           printf '[span .item .%s &shy;%s]' "$item" \
152                  "$(pdi_value "$card" "$item" $c |unescape |HTML)"
153         done
154         ;;
155     esac
156   done
157 }
158
159 edit_item(){
160   local card="$1"
161   local item cnt c
162   shift 1
163
164   for item in $@; do
165     cnt="$(pdi_count "$card" "$item")"
166     [ $cnt -lt 1 ] && cnt=1
167
168     case $item in
169       N)N="$(pdi_value "$card" N)"
170         if [ "$N" ]; then
171           IFS=\; read n1 n2 n3 n4 n5 <<-EOF
172                 $N
173                 EOF
174         else
175           N="$(pdi_value "$card" FN |unescape)"
176           n1="${N%%[a-z]*}" n1="${N#$n1}"
177           [ "$n1" ] || n1="${N##* }"
178           n2="${N%$n1}"
179         fi
180         printf '
181         [h3 %s]
182         [input .item .N name="4N" placeholder="%s" value="%s"]
183         [input .item .N name="2N" placeholder="%s" value="%s"]
184         [input .item .N name="1N" placeholder="%s" value="%s"]
185         [input .item .N name="5N" placeholder="%s" value="%s"]
186         ' "$(l10n "$item")" \
187         "$(l10n n_pre)"   "$(HTML "$n4")" \
188         "$(l10n n_first)" "$(HTML "$n2" "$n3")" \
189         "$(l10n n_last)"  "$(HTML "$n1")" \
190         "$(l10n n_post)"  "$(HTML "$n5")"
191         ;;
192       GENDER)
193         gender="$(pdi_value "$card" GENDER)"
194         printf '
195         [select .item .GENDER name="GENDER"
196           [option value="" disabled="disabled" %s %s]
197           [option value="female" %s %s]
198           [option value="male"   %s %s]
199           [option value="other"  %s %s]
200           [option value="none"   %s %s]
201         ]\n' \
202         "$([ "$gender" = ''       ] && printf 'selected="selected"')" "$(l10n GENDER)" \
203         "$([ "$gender" = 'female' ] && printf 'selected="selected"')" "$(l10n gender_female)" \
204         "$([ "$gender" = 'male'   ] && printf 'selected="selected"')" "$(l10n gender_male)" \
205         "$([ "$gender" = 'other'  ] && printf 'selected="selected"')" "$(l10n gender_other)" \
206         "$([ "$gender" = 'none'   ] && printf 'selected="selected"')" "$(l10n gender_none)"
207         ;;
208       BDAY|X-ZACK-JOINDATE|X-ZACK-LEAVEDATE)
209         printf '[h3 %s]
210         [input .item .%s name="%s" value="%s" placeholder="YYYY-MM-DD"]' \
211         "$(l10n "$item")" "$item" "$item" "$(pdi_value "$card" "$item" |grep -xE '[0-9-]+')"
212         ;;
213       ADR|NOTE)
214         printf '[h3 %s]' "$(l10n "$item")"
215         seq 1 $cnt |while read c; do
216           printf '[checkbox "%s_delete_%i" "true" .delete #%s_delete_%i][label for="%s_delete_%i" %s]' \
217             "$item" $c "$item" $c "$item" $c "$(l10n delete)"
218           printf '<textarea class="item %s" name="%s">%s</textarea>' \
219             "$item" "$item" "$(pdi_value "$card" "$item" $c |unescape |HTML)"
220         done
221         printf '[button type="submit" name="action" value="addfield %s" %s ]' "$item" "$(l10n edit_addfield)"
222         ;;
223       TEL) printf '[h3 %s]' "$(l10n "$item")"
224         seq 1 $cnt |while read c; do
225           printf '[checkbox "%s_delete_%i" "true" .delete #%s_delete_%i][label for="%s_delete_%i" %s]' \
226             "$item" $c "$item" $c "$item" $c "$(l10n delete)"
227           teltype="$(pdi_attrib "$card" TEL $c TYPE)"
228           printf '[select .item .teltype name="teltype"
229                     [option value="" disabled="disabled" %s %s]
230                     [option value="HOME" %s %s]
231                     [option value="WORK" %s %s]
232                     [option value="CELL" %s %s]
233                     [option value="FAX"  %s %s]
234                   ]\n' \
235                   "$([ "$teltype" = ''     ] && printf 'selected="selected"')" "$(l10n teltype)" \
236                   "$([ "$teltype" = 'HOME' ] && printf 'selected="selected"')" "$(l10n TYPE=HOME)" \
237                   "$([ "$teltype" = 'WORK' ] && printf 'selected="selected"')" "$(l10n TYPE=WORK)" \
238                   "$([ "$teltype" = 'CELL' ] && printf 'selected="selected"')" "$(l10n TYPE=CELL)" \
239                   "$([ "$teltype" = 'FAX'  ] && printf 'selected="selected"')" "$(l10n TYPE=FAX)"
240
241           printf '[input .item .%s name="%s" value="%s" placeholder="%s"]' \
242             "$item" "$item" "$(pdi_value "$card" "$item" $c |unescape |HTML)" "$(l10n "$item")"
243         done
244         printf '[button type="submit" name="action" value="addfield %s" %s ]' "$item" "$(l10n edit_addfield)"
245         ;;
246       *)printf '[h3 %s]' "$(l10n "$item")"
247         seq 1 $cnt |while read c; do
248           printf '[checkbox "%s_delete_%i" "true" .delete #%s_delete_%i][label for="%s_delete_%i" %s]' \
249             "$item" $c "$item" $c "$item" $c "$(l10n delete)"
250           printf '[input .item .%s name="%s" value="%s" placeholder="%s"]' \
251             "$item" "$item" "$(pdi_value "$card" "$item" $c |unescape |HTML)" "$(l10n "$item")"
252         done
253         printf '[button type="submit" name="action" value="addfield %s" %s ]' "$item" "$(l10n edit_addfield)"
254         ;;
255     esac
256   done
257 }