]> git.plutz.net Git - serve0/blobdiff - widgets.sh
Use page titles based on content
[serve0] / widgets.sh
index a4ec856e296cb6a8069bf1e3cf94f3de36710f8e..25ec01e9c05bcfdd78b2a0d965dfafdc7c3bbf20 100644 (file)
@@ -7,6 +7,9 @@ include_widgets="$0"
 
 w_refuri="$(URL "$PATH_INFO")?$(HTML "$QUERY_STRING")"
 
+w_str_s="$(STRING "$SEARCH")"
+w_str_f="$(STRING "$FILTER")"
+
 w_ascii='
   s-0-0-g; s-1-1-g; s-2-2-g; s-3-3-g; s-4-4-g; s-5-5-g;
   s-6-6-g; s-7-7-g; s-8-8-g; s-9-9-g;
@@ -58,23 +61,33 @@ fi
 [ "$ORDER" = Length ] && w_colength=checked
 [ "$ORDER" = Group  ] && w_cogroup=checked
 
+w_bmname=
+w_bmname(){
+  [ "$w_bmname" ] || w_bmname="$(
+    bm="$_DATA/.index/bookmarks"
+    name="$(grep -m1 -aF "     search=${w_str_s}       filter=${w_str_f}${CR}" "$bm" 2>&-)"
+
+    if [ "$name" ]; then
+      printf '%s' "$name" |cut -f1 |UNSTRING |HTML
+    else
+      printf '%s\t%s' "$SEARCH" "$FILTER" \
+      | sed -r '/^\t$/{  s;\t;All;; q;}
+                /.*\t$/{ s;\t$;;; q;}
+                /^\t.*/{ s;^\t;;;
+                         :x; s;(^|[~^|])([^|^~:]+):;\1;; tx;
+                         s;\^; and ;g; s;\|;,;g; s;~;not ;g; q;}' \
+      | HTML
+    fi
+  )"
+  printf '%s' "$w_bmname"
+}
+
 w_bookmarks(){
-  local name='' cf='' cs='' bm="$_DATA/.index/bookmarks" proposed_name=''
+  local bm="$_DATA/.index/bookmarks" name='' search='' filter=''
   [ ! -d "${bm%/*}" ] && return 0
   [ ! -f "$bm" ] && touch "$bm"
 
-  [ "$SEARCH" ] && cs="$(STRING "$SEARCH")"
-  [ "$FILTER" ] && cf="$(STRING "$FILTER")"
-
-  name="$(grep -m1 -aF "       search=$cs      filter=$cf${CR}" "$bm" |cut -f1 |UNSTRING)"
-  [ ! "$name" ] && proposed_name="$(
-    printf '%s\t%s' "$SEARCH" "$FILTER" \
-    |sed -r '/^\t$/{  s;\t;All;; q;}
-             /.*\t$/{ s;\t$;;; q;}
-             /^\t.*/{ s;^\t;;;
-                      :x; s;(^|[~^|])([^|^~:]+):;\1;; tx;
-                      s;\^; and ;g; s;\|;,;g; s;~;not ;g; q;}'
-    )"
+  grep -qaF "  search=$w_str_s filter=${w_str_f}${CR}" "$bm" && name=Update || name=Add
 
   printf '[form #bookmarks action=?a=bookmark method=POST
             [a href="#" x]
@@ -85,22 +98,21 @@ w_bookmarks(){
             [button type="submit" %s]' \
             "$w_refuri" \
             "$(HTML "$SEARCH")" "$(HTML "$FILTER")" \
-            "$(HTML "${name:-${proposed_name}}")" \
-            "${name:+Update}${proposed_name:+Add}"
+            "$(w_bmname)" "${name}"
   [ "$name" ] && printf ' [submit "delete" "delete" Delete]'
 
   sort "$bm" |while read -r name search filter; do
     search="${search#search=}" filter="${filter#filter=}" filter="${filter%${CR}}"
-    [ "$search" = "${cs}" -a "$filter" = "${cf}" ] && continue
+    [ "$search" = "${w_str_s}" -a "$filter" = "${w_str_f}" ] && continue
 
     name="$(UNSTRING "$name")";
     search="$(UNSTRING "${search}" |URL)";
     filter="$(UNSTRING "${filter}" |URL)";
     printf '[label .link %s]
-            [a .link target=blank href="?o=Name&s=%s&f=%s" by Name]
-            [a .link target=blank href="?o=Date&s=%s&f=%s" by Date]
-            [a .link target=blank href="?o=Length&s=%s&f=%s" by Length]
-            [a .link target=blank href="?o=Group&s=%s&f=%s" by Group]
+            [a .link target=blank href="/?o=Name&s=%s&f=%s" by Name]
+            [a .link target=blank href="/?o=Date&s=%s&f=%s" by Date]
+            [a .link target=blank href="/?o=Length&s=%s&f=%s" by Length]
+            [a .link target=blank href="/?o=Group&s=%s&f=%s" by Group]
             [br]' \
             "$(HTML "$name" |sed 's;&#44\;;&[wbr];g;')" \
             "$search" "$filter" \