]> git.plutz.net Git - shellwiki/blob - macros/taglist
--link option links to _tag_ search
[shellwiki] / macros / taglist
1 #!/bin/sh
2
3 # Copyright 2024 Paul Hänsch
4
5 # Permission to use, copy, modify, and/or distribute this software for any
6 # purpose with or without fee is hereby granted, provided that the above
7 # copyright notice and this permission notice appear in all copies.
8
9 # THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
12 # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
15 # IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17 . "$_EXEC/cgilite/cgilite.sh"
18 . "$_EXEC/cgilite/storage.sh"
19 . "$_EXEC/cgilite/db23.sh"
20
21 cloud='' link=''
22 while [ $# -gt 0 ]; do case $1 in
23   --cloud) cloud=true; shift 1;;
24   --link)  link=true; shift 1;;
25 esac; done
26
27 taglist="$(
28   max=0
29   for tagfile in "$_DATA"/tags/*; do
30     tag="${tagfile##*/}"
31     [ "$tag" = "*" ] && break
32   
33     n=0; while read -r page date; do
34       if ! pdate="$(DB3 get "$page")"; then
35         if pdate="$(stat -c %Y "$_DATA/pages/$(UNSTRING "$page")/#page.md" )"; then
36           DB3 set "$page" "$pdate"
37         else
38           debug "Remove $page from $tag"
39           # DBM "$tagfile" remove "$(UNSTRING "$page")"
40           date=0
41         fi
42       fi
43       [ "$date" -ge "$pdate" ] && n=$((n + 1))
44     done <"$tagfile"
45     if [ $n -gt 0 ]; then
46       printf '%i        %i      %s\n' "$RANDOM" "$n" "$tag"
47     else
48       debug "Removing tag: $tagfile" # && rm -- "$tagfile"
49     fi
50     [ $n -gt $max ] && max="$n"
51   done
52   printf "%i\n" "$max"
53 )"
54 max="${taglist##*${BR}}"
55 taglist="${taglist%${BR}*}"
56
57 if [ "$taglist" ]; then
58   [ "$cloud" ] && printf '<ul class="macro taglist cloud">\n' \
59                || printf '<ul class="macro taglist">\n'
60   printf %s\\n "$taglist" \
61   | { [ "$cloud" ] && sort -n || sort -k 3; } \
62   | while read -r junk inc tag; do
63     if [ "$link" ]; then
64       printf '<li class=tag inc=%i rel=%i ><a href="./[search]?q=%%23%s">#%s</a></li>\n' \
65              "$inc" "$((9 * inc / max))" "$(URL "$tag")" "$(HTML "$tag")"
66     else
67       printf '<li class=tag inc=%i rel=%i >#%s</li>\n' \
68              "$inc" "$((9 * inc / max))" "$(HTML "$tag")"
69     fi
70   done
71   printf '</ul>\n'
72 fi