X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=tools.sh;h=b19a83d92c5c87be2005c6e3035982275aa69548;hb=20c6ce6a3de621383d1b6d985757366590722005;hp=ccd095cb4065d9f2708d3ba2ee36cddb936317b8;hpb=15a1efa007b85d77f947b377e7561564d4cba7a6;p=shellwiki diff --git a/tools.sh b/tools.sh index ccd095c..b19a83d 100755 --- a/tools.sh +++ b/tools.sh @@ -3,7 +3,7 @@ [ "$include_tools" ] && return 0 include_tools="$0" -# 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 @@ -19,6 +19,10 @@ include_tools="$0" . "${_EXEC}/cgilite/storage.sh" +CACHE_AGE=${CACHE_AGE:-300} +export MD_MACROS="$_EXEC/macros" +export MD_HTML="${MD_HTML:-false}" + md(){ local parser @@ -57,6 +61,34 @@ mdfile(){ return 0 } +wiki() { + # Print content of a wiki page + # Get page from data or underlay dir, handle caching + local page="$(PATH "$1")" mdfile cache cachetime + + cache="$_DATA/pages/$page/#page:${LANGUAGE}.${USER_ID}.cache" + + mdfile="$(mdfile "$page")" || return 4 + acl_read "$page" || return 3 + + cachetime="$(stat -c %Y -- "$mdfile" "$cache" 2>/dev/null)" + + if [ "${cachetime#*${BR}}" -gt "${cachetime%${BR}*}" \ + -a "${cachetime#*${BR}}" -gt "$((_DATE - CACHE_AGE))" ]; then + cat "${cache}" + else + mkdir -p -- "$_DATA/pages/$page/" + # Macros expect to find page directory as working dir + ( cd -- "$_DATA/pages/$page/"; + md <"$mdfile" \ + | tee -- "${cache}.$$" + ) + grep -q '^%nocache' "$mdfile" \ + && rm -- "${cache}.$$" \ + || mv -- "${cache}.$$" "${cache}" + fi +} + size_human(){ local size="$1"