From 3a2965cd8ce087b374ce8d67446e0dfd378a064a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Tue, 6 Feb 2024 23:50:46 +0100 Subject: [PATCH] use translatable page titles in page list --- macros/pagelist | 76 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 23 deletions(-) diff --git a/macros/pagelist b/macros/pagelist index ced89eb..94273fc 100755 --- a/macros/pagelist +++ b/macros/pagelist @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2022 - 2023 Paul Hänsch +# Copyright 2022 - 2024 Paul Hänsch # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -17,19 +17,22 @@ . "$_EXEC/cgilite/cgilite.sh" . "$_EXEC/acl.sh" . "$_EXEC/tools.sh" +. "$_EXEC/db23.sh" tags='' ntags='' dir='' depth='' glob_system_pages=false -label='' labeltype='' altlabel='' cnt=0 +label='' labeltype='' altlabel='' titles='' db3_data='' +DB3 new # Use DB3 for in-memory cache set -- "$@" -- while [ $# -gt 0 ]; do case $1 in --system) glob_system_pages=true; shift 1;; - --depth) depth="$2" shift 2;; + --depth) depth="$2"; shift 2;; + --titles) titles=true; shift 1;; \#*) tags="${tags}${tags:+ }${1###}"; shift 1;; \!*) ntags="${ntags}${ntags:+ }${1##!}"; shift 1;; --h1|--h2|--h3|--h4|--h5|--h6|--label) labeltype="${1#--}" label="$2"; shift 2;; - --alt-label) + --alt-label|--altlabel) altlabel="$2"; shift 2;; --) shift 1; break;; *) if [ ! "$dir" ]; then @@ -45,12 +48,31 @@ esac; done [ "$*" ] || set -- "*" [ "$depth" -ge 0 -o "$depth" -le 0 ] 2>&- || depth=0 -for dir in "$@"; do - page_glob "$dir" "$depth" -done \ -| sort -u \ -| { - while read -r page; do +print_page() { + # print page URL and resolve page title (for use with --title flag) + # avoid calling this function via a subshell (i.e. $(print_page *)) + # because it should be able to write its cache variable + local page="${1%/}/" title='' pfrag='' + pfrag="${page}" + + # resolve name of each path element + while [ "${pfrag%/*}" -a "${pfrag%/*}" != "${pfrag}" ]; do + pfrag="${pfrag%/*}" + title="$(DB3 get "${pfrag}" || ! page_title "${pfrag}")/${title}" && break + done + # keep resolved names in cache + DB3 set "${page%/*}" "${title%/}" + + [ "${page#/}" != "${page}" ] && title="/$title" + printf '%s %s\n' "$(URL "$page")" "$(HTML "${title}")" +} + +pagelist="$( + for dir in "$@"; do + page_glob "$dir" "$depth" + done \ + | sort -u \ + | while read -r page; do pagedir="$(page_abs "$page")" if [ -f "$_DATA/pages/${pagedir}/#page.md" -o \ -f "$_EXEC/pages/${pagedir}/#page.md" ] \ @@ -58,19 +80,27 @@ done \ && has_tags "$pagedir" $tags \ && ! has_tag "$pagedir" $ntags then - [ "$cnt" -eq 0 -a "$label" ] \ - && printf '<%s class="macro pagelist label">%s' \ - "$labeltype" "$(HTML "$label")" "$labeltype" - [ "$cnt" -eq 0 ] && printf '\n' - elif [ "$altlabel" ]; then - printf '' "$(HTML "$altlabel")" - fi -} +if [ "$pagelist" ]; then + [ "$label" ] \ + && printf '<%s class="macro pagelist label">%s' "$labeltype" "$(HTML "$label")" "$labeltype" + + printf '\n' + +elif [ "$altlabel" ]; then + printf '' "$(HTML "$altlabel")" +fi -- 2.39.2