]> git.plutz.net Git - shellwiki/blobdiff - macros/search
improved styling and options of search macro
[shellwiki] / macros / search
index 3951e97307115804ce13f8d6c0ea2f45791d30d8..e8207c2eb4c46b2c41702fb905ab9aa5c07efa8b 100755 (executable)
@@ -25,23 +25,33 @@ I="$_DATA/index"
 _(){ printf %s\\n "$*"; }
 [ "${LANGUAGE}" -a -r "${_EXEC}/l10n/${LANGUAGE}.sh" ] && . "${_EXEC}/l10n/${LANGUAGE}.sh"
 
-show_form=true show_hits='' action='' query=''
+show_form=true show_hits='' action='' query='' show_query='' hlevel='3' alt=''
 
 set -- "$@" --
 while [ $# -gt 0 ]; do case $1 in
   --no-form|--noform)
     show_form=''; shift 1;;
   --hits|--results)
+    [ ! "$show_query" ] && show_query=true
     show_hits='true'; shift 1;;
+  --query|--show-query)
+    show_query=true; shift 1;;
+  --no-query)
+    show_query=false; shift 1;;
   --action)
     action="$(HTML "$2")"; shift 2;;
   --action=*|action=*)
-    action="$(HTML "${2#*=}")"; shift 1;;
+    action="$(HTML "${1#*=}")"; shift 1;;
+  --h1|--h2|--h3|--h4|--h5|--h6)
+    hlevel="${1#--h}"; shift 1;;
+  --alt)
+    alt="$2"; shift 2;;
   --) shift 1; break;;
   *) set -- "$@" "$1"; shift 1;;
 esac; done
 
 [ $# -gt 0 ] && query="$*" || query="$(GET q)"
+[ ! "$show_query" ] && show_query=false
 
 searchteaser() {
   local file="$1" words db3_data
@@ -74,7 +84,7 @@ searchteaser() {
   }
 }
 
-if [ ! "$action" -a "$LANGUAGE_DEFAULT" ]; then
+if [ ! "$action" -a "$LANGUAGE" != "$LANGUAGE_DEFAULT" ]; then
   action="./:${LANGUAGE}/[search]"
 elif [ ! "$action" ]; then
   action="./[search]"
@@ -84,7 +94,7 @@ if [ "${show_form}" = true ]; then
   cat <<-EOF
        <form class="macro search" method="GET" action="${action}">
          <input type="search" placeholder="$(_ Search)" name="q"
-                value="$([ "$show_hits" = true ] && printf %s\\n "$query" |HTML)"
+                value="$([ "$show_query" = true ] && printf %s\\n "$query" |HTML)"
          ><button type="submit" class="search">$(_ Search)</button>
        </form>
        EOF
@@ -110,7 +120,6 @@ if [ "${show_hits}" = true ]; then
        ')
        EOF
 
-  printf '<ul class="macro search hits">'
   for w in ${words}; do
     [ ! -f "$I/$w" ] && continue
   
@@ -141,14 +150,16 @@ if [ "${show_hits}" = true ]; then
     has_tag "$page" $ntags && continue
     printf '%s %s\n' "$doc" "$(searchteaser "$(mdfile "$page")" $words)"
   done \
-  | while read -r p t; do
-    path="$(UNSTRING "$p")" pfrag="${path%/}" title=''
-    while [ "$pfrag" ]; do
-      title="$(page_title "$pfrag")/$title"
-      pfrag="${pfrag%/*}"
-    done
-    printf '<li><a href="%s">%s</a><p>%s</p></li>' \
-      "$(URL "$path")" "$(HTML "/$title")" "$(UNSTRING "$t" |HTML)"
-  done
-  printf '</ul>'
+  | { while read -r p t; do
+      [ ! "$path" ] && printf '<ul class="macro search hits">'
+      path="$(UNSTRING "$p")" title="$(page_title "$path")"
+      path="$(HTML "$path")"
+      printf '<li><h%i><a href="%s">%s</a></h%i><p class="path">%s</p><p class="teaser">%s</p></li>' \
+             "${hlevel}" "$path" "$(HTML "$title")" "${hlevel}" \
+             "$path" "$(UNSTRING "$t" |HTML)"
+      done
+    [ "$path" ] && printf '</ul>'
+    [ ! "$path" -a "$alt" -a "$query" ] \
+    && printf '<p class="macro search hits">%s</p>' "$(HTML "$alt")"
+  }
 fi