From: Paul Hänsch <paul@plutz.net>
Date: Mon, 4 Feb 2019 17:11:28 +0000 (+0100)
Subject: reenabled filter dialog
X-Git-Url: https://git.plutz.net/?a=commitdiff_plain;h=516b1d6b0427b42924a60bd63ed48d8087a9e4e8;p=lobster

reenabled filter dialog
---

diff --git a/cards/cards.css b/cards/cards.css
index 981a667..9515e83 100644
--- a/cards/cards.css
+++ b/cards/cards.css
@@ -39,7 +39,8 @@
 }
 .filter input[type="text"] {
   width: 100%;
-  margin-bottom: .5em;
+  height: 2em;
+  margin-bottom: 1em;
 }
 .filter fieldset {
   position: relative;
@@ -84,11 +85,11 @@
   border: 1px solid #000;
   border-bottom-color: #FFF;
 }
-.filter fieldset.item input[type=radio][value="CATEGORIES:"]:checked + label + input[type=text],
-.filter fieldset.item input[type=radio][value="CATEGORIES:"] + label + input[type=text] + fieldset.categories {
+.filter fieldset.item input[type=radio][value="CATEGORIES"]:checked + label + input[type=text],
+.filter fieldset.item input[type=radio][value="CATEGORIES"] + label + input[type=text] + fieldset.categories {
   display: none;
 }
-.filter fieldset.item input[type=radio][value="CATEGORIES:"]:checked + label + input[type=text] + fieldset.categories {
+.filter fieldset.item input[type=radio][value="CATEGORIES"]:checked + label + input[type=text] + fieldset.categories {
   display: block;
 }
 .filter fieldset.item fieldset.categories a {
diff --git a/cards/filter_card.sh b/cards/filter_card.sh
index d09adab..9c79459 100755
--- a/cards/filter_card.sh
+++ b/cards/filter_card.sh
@@ -20,7 +20,17 @@
 if [ "$(POST choice)" = new_filter ]; then
   filter="$(
     seq 0 100 |while read n; do
-      printf %s "$(POST filter$n)"
+      filter_type="$(POST "filter_type${n}")"
+      filter_text="$(POST "filter_text${n}")"
+      [ ! "$filter_type" -a ! "$filter_text"  ] && break
+      if [ "$filter_type" = CATEGORIES ]; then
+        printf '^CATEGORIES:'
+        seq 0 $(POST_COUNT filter_cat$n) |while read m; do
+          printf '|%s' "$(POST filter_cat$n $m)"
+        done
+      else
+        printf '^%s:%s' "$filter_type" "$filter_text"
+      fi
     done | sed -r \
            's;\|+;\|;g;   s;\^+;\^;g;   s;:\|;:;g;
             :X;   s;\^[^:]*:\^;\^;g;   /\^[^:]*:\^/bX;
diff --git a/cards/main.cgi b/cards/main.cgi
index 6cdc8f2..bfc574f 100755
--- a/cards/main.cgi
+++ b/cards/main.cgi
@@ -19,7 +19,7 @@ order="$(GET order)"
 printf 'Content-Type: text/html; charset=utf-8\r\n\r\n'
 
 $_EXEC/cgilite/html-sh.sed <<EOF
-[!DOCTYPE HTML]
+[!DOCTYPE XHTML]
 [html [head
   [title Cards]
   [link rel="stylesheet" type="text/css" href="/style.css"]
diff --git a/cards/widgets.sh b/cards/widgets.sh
index 5a80ae7..76057a6 100755
--- a/cards/widgets.sh
+++ b/cards/widgets.sh
@@ -15,26 +15,29 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with Confetti.  If not, see <http://www.gnu.org/licenses/>. 
 
+list_categories() {
+  grep -vxE '^[ 	]*$' "${_DATA}/mappings/categories"
+}
+
 w_filter_item() {
+n=$3
 cat <<EOF
   [fieldset .item
     [legend $(l10n filter_item):]
-    [input type="hidden" name="filter${n}" value="^"]
 
     $(for field in any name street zip TEL BDAY CATEGORIES; do
-      printf '[input id="%s%i" type="radio" name="filter%i" value="%s" %s]
-              [label for="%s%i" %s]' \
-              "$field" "$n" "$((n + 1))" "$field" "$([ "$1" = "$field" ] && printf checked )" \
+      printf '[input id="%s%i" type="radio" name="filter_type%i" value="%s" %s]
+              [label for="%s%i" %s ]' \
+              "$field" "$n" "$n" "$field" "$([ "$1" = "$field" ] && printf checked )" \
               "$field" "$n" "$(l10n filter_$field)"
     done)
-    [input type="text" name="filter$((n + 2))" value="$([ "$1" = CATEGORIES ] || HTML "$2")" placeholder="$(l10n filter_placeholder)"]
+    [input type="text" name="filter_text$n" value="$([ "$1" = CATEGORIES ] || HTML "$2")" placeholder="$(l10n filter_placeholder)"]
     [fieldset .categories
-      $(m=3; list_categories | while read cat; do
-          printf '[label [checkbox "filter%i" "|%s" %s] %s ]' \
-                 "$((n + m))" "$(HTML "$cat")" \
-                 "$(printf %s "$cat" |grep -qEx "$2" && printf checked )" \
+      $(list_categories | while read cat; do
+          printf '[label [checkbox "filter_cat%i" "|%s" %s] %s ]' \
+                 "$n" "$(HTML "$cat")" \
+                 "$(printf %s "$cat" |grep -qxEe "$2" && printf checked )" \
                  "$(HTML "$cat")"
-          m=$((m + 1))
       done)
       [a href="?p=categories" $(l10n edit_categories)]
     ]
@@ -48,14 +51,13 @@ w_filter_diag(){
     [h1 $(l10n filter_label)]
     [input type="hidden" name="page" value="cards"]
   
-    $(
-    n=0; m="$(list_categories |wc -l)"
-    printf '%s\n' "$filter" |tr '^' '\n' \
-    | while read filter; do
-      [ -n "$filter" ] && w_filter_item "${filter%%:*}" "${filter#*:}" "$n"
-      n=$((n + 3 + m))
-    done
-    w_filter_item any '' "$n"
+    $(n=0; filter="${filter}^"
+      while [ "${filter#^}" ]; do
+        fil="${filter%%^*}" filter="${filter#*^}"
+        w_filter_item "${fil%%:*}" "${fil#*:}" $n
+        n=$((n + 1))
+      done
+      w_filter_item any '' $n
     )
   
     [fieldset class="order"