X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=tools.sh;h=b19a83d92c5c87be2005c6e3035982275aa69548;hb=HEAD;hp=65327d7c38f229e3815b207f173d86823245ae50;hpb=b25024386a4a3ab856dc73707119bd6e50b2da34;p=shellwiki diff --git a/tools.sh b/tools.sh index 65327d7..b19a83d 100755 --- a/tools.sh +++ b/tools.sh @@ -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"