From 19af7e345eb0a95cda411901611c78db889de2cd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Tue, 11 Nov 2025 07:10:46 +0100 Subject: [PATCH] Support for %meta page pragma, adding meta-description to rendered html page --- handlers/20_meta_description.sh | 48 +++++++++++++++++++++++++++++++++ pages/#page.md | 3 +++ pages/:de/#page.md | 3 +++ themes/default.sh | 4 +++ 4 files changed, 58 insertions(+) create mode 100755 handlers/20_meta_description.sh diff --git a/handlers/20_meta_description.sh b/handlers/20_meta_description.sh new file mode 100755 index 0000000..cec125d --- /dev/null +++ b/handlers/20_meta_description.sh @@ -0,0 +1,48 @@ +#!/bin/sh + +# Copyright 2025 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 +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +case $PATH_INFO in + *"/["*"]") + return 1; + ;; +esac + +if acl_read ${PATH_INFO}; then + mdfile="$(mdfile "${PATH_INFO%/*}")" +else + return 1 +fi + +if [ "$mdfile" ]; then + META_DESCRIPTION="$(sed -En ' + s;\r$;;; + /^%meta([\t ]+.*)?$/bMETA; + 20q; + b; + + :META + s;(%(meta)?)?[\t ]*;; + p; n; s;\r$;;; + /^(%[ \t]+|%meta[ \t]+|[ \t]+)[^ \t\r].*$/bMETA; + /^(%[ \t]*|%meta[ \t]*)$/bMETA; + ' <"$mdfile")" + + debug "$META_DESCRIPTION" +else + return 1 +fi + +return 1 diff --git a/pages/#page.md b/pages/#page.md index ce03c12..7201468 100644 --- a/pages/#page.md +++ b/pages/#page.md @@ -3,6 +3,9 @@ %title Home +%meta Default start page of a fresh ShellWiki installation. + No user content has been added. + It Works! ========= <> diff --git a/pages/:de/#page.md b/pages/:de/#page.md index 6c1e1ef..84ce517 100644 --- a/pages/:de/#page.md +++ b/pages/:de/#page.md @@ -3,6 +3,9 @@ %title Start +%meta Unveränderte Startseite einer frischen ShellWiki-Installation. + Vom Benutzer wurden keine Inhalte hinzugefügt. + Es Funktioniert! ================ <> diff --git a/themes/default.sh b/themes/default.sh index 8324bb2..58f45a4 100755 --- a/themes/default.sh +++ b/themes/default.sh @@ -30,6 +30,9 @@ theme_head(){ printf '' \ "$(HTML "${css##*//}")" done + if [ "$META_DESCRIPTION" ]; then + printf '' "$(HTML "$META_DESCRIPTION")" + fi } theme_header(){ @@ -209,6 +212,7 @@ theme_attachments(){ theme_error(){ local errno="$1" + unset META_DESCRIPTION case $errno in 400) printf "%s\r\n" "Status: 400 Bad Request";; 403) printf "%s\r\n" "Status: 403 Forbidden";; -- 2.39.5