extra navbar links

This commit is contained in:
2026-03-09 20:05:42 +01:00
parent bee12ce8c1
commit f407b1c4af
5 changed files with 88 additions and 0 deletions

View File

@@ -41,6 +41,8 @@ flatten = false
order = "" order = ""
home_name = "Home" home_name = "Home"
show_home_in_nav = true show_home_in_nav = true
nav_links = ""
nav_extra = ""
footer = "made with <a href="https://kewt.krzak.org">kewt</a>" footer = "made with <a href="https://kewt.krzak.org">kewt</a>"
logo = "" logo = ""
display_logo = false display_logo = false
@@ -57,6 +59,8 @@ favicon = ""
- `order` comma separated file/directory name list to order the sidebar (alphabetical by default) - `order` comma separated file/directory name list to order the sidebar (alphabetical by default)
- `home_name` text for the home link in navigation (default: "Home") - `home_name` text for the home link in navigation (default: "Home")
- `show_home_in_nav` show home link in navigation (default: true) - `show_home_in_nav` show home link in navigation (default: true)
- `nav_links` comma separated extra nav links, as bare URLs or Markdown links like `[Label](https://example.com)`
- `nav_extra` raw HTML appended inside the `<nav>` after the generated link list
- `footer` footer html/text shown at the bottom of pages - `footer` footer html/text shown at the bottom of pages
- `logo` logo image path (used in header if enabled) - `logo` logo image path (used in header if enabled)
- `display_logo` show logo in header - `display_logo` show logo in header

74
kewt.sh
View File

@@ -34,6 +34,8 @@ flatten = false
order = "" order = ""
home_name = "Home" home_name = "Home"
show_home_in_nav = true show_home_in_nav = true
nav_links = ""
nav_extra = ""
footer = "made with <a href="https://kewt.krzak.org">kewt</a>" footer = "made with <a href="https://kewt.krzak.org">kewt</a>"
logo = "" logo = ""
display_logo = false display_logo = false
@@ -258,6 +260,9 @@ flatten="false"
order="" order=""
home_name="Home" home_name="Home"
show_home_in_nav="true" show_home_in_nav="true"
nav_links=""
nav_extra=""
footer="made with <a href=\"https://kewt.krzak.org\">kewt</a>"
logo="" logo=""
display_logo="false" display_logo="false"
display_title="true" display_title="true"
@@ -292,6 +297,8 @@ load_config() {
order) order="$val" ;; order) order="$val" ;;
home_name) home_name="$val" ;; home_name) home_name="$val" ;;
show_home_in_nav) show_home_in_nav="$val" ;; show_home_in_nav) show_home_in_nav="$val" ;;
nav_links) nav_links="$val" ;;
nav_extra) nav_extra="$val" ;;
footer) footer="$val" ;; footer) footer="$val" ;;
logo) logo="$val" ;; logo) logo="$val" ;;
display_logo) display_logo="$val" ;; display_logo) display_logo="$val" ;;
@@ -305,6 +312,64 @@ load_config() {
load_config "./site.conf" load_config "./site.conf"
load_config "$src/site.conf" load_config "$src/site.conf"
escape_html_text() {
printf '%s' "$1" | sed \
-e 's/&/\&amp;/g' \
-e 's/</\&lt;/g' \
-e 's/>/\&gt;/g'
}
escape_html_attr() {
printf '%s' "$1" | sed \
-e 's/&/\&amp;/g' \
-e 's/"/\&quot;/g' \
-e 's/</\&lt;/g' \
-e 's/>/\&gt;/g'
}
nav_links_html() {
[ -n "$nav_links" ] || return
old_ifs=$IFS
set -f
IFS=','
set -- $nav_links
IFS=$old_ifs
set +f
[ $# -gt 0 ] || return
printf '<ul class="nav-extra-links">\n'
for raw_link in "$@"; do
link=$(printf '%s' "$raw_link" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//')
[ -n "$link" ] || continue
case "$link" in
\[*\]\(*\))
label=${link#\[}
label=${label%%\]*}
link_url=${link#*](}
link_url=${link_url%)}
;;
*)
link_url=$link
label=$(printf '%s' "$link" | sed \
-e 's|^[A-Za-z][A-Za-z0-9+.-]*://||' \
-e 's|/$||')
[ -n "$label" ] || label="$link"
;;
esac
[ -n "$link_url" ] || continue
[ -n "$label" ] || label="$link_url"
link_attr=$(escape_html_attr "$link_url")
label_text=$(escape_html_text "$label")
printf '<li><a href="%s">%s</a></li>\n' "$link_attr" "$label_text"
done
printf '</ul>'
}
template="$src/template.html" template="$src/template.html"
[ -f "$template" ] || template="./template.html" [ -f "$template" ] || template="./template.html"
[ -f "$template" ] || die "Template '$template' not found." [ -f "$template" ] || die "Template '$template' not found."
@@ -313,6 +378,15 @@ template="$src/template.html"
mkdir -p "$out" mkdir -p "$out"
nav=$(generate_nav "$src") nav=$(generate_nav "$src")
extra_links=$(nav_links_html)
if [ -n "$extra_links" ]; then
nav="$nav
$extra_links"
fi
if [ -n "$nav_extra" ]; then
nav="$nav
$nav_extra"
fi
find_closest() { find_closest() {
target="$1" target="$1"

View File

@@ -10,3 +10,7 @@ display_title = true
logo_as_favicon = true logo_as_favicon = true
favicon = "" favicon = ""
order = "" order = ""
home_name = "Home"
show_home_in_nav = true
nav_links = ""
nav_extra = ""

View File

@@ -15,3 +15,5 @@ Sed dictum tortor at interdum dignissim. Nunc hendrerit sollicitudin elementum.
Cras vitae sapien egestas, blandit libero et, volutpat augue. Ut augue quam, sollicitudin quis libero laoreet, bibendum imperdiet massa. Duis sed venenatis risus. Praesent a est mollis, viverra erat quis, faucibus elit. Donec at sagittis est, non posuere nisi. Integer posuere pharetra dui in aliquam. Morbi vehicula eros in hendrerit aliquam. Duis in turpis vel mauris mattis convallis in id tortor. Cras et aliquam augue. Cras vitae sapien egestas, blandit libero et, volutpat augue. Ut augue quam, sollicitudin quis libero laoreet, bibendum imperdiet massa. Duis sed venenatis risus. Praesent a est mollis, viverra erat quis, faucibus elit. Donec at sagittis est, non posuere nisi. Integer posuere pharetra dui in aliquam. Morbi vehicula eros in hendrerit aliquam. Duis in turpis vel mauris mattis convallis in id tortor. Cras et aliquam augue.
Cras quis consectetur dolor, a sodales tortor. Vestibulum aliquam lacinia metus, sed viverra erat egestas in. Morbi interdum sapien sed bibendum maximus. Aenean accumsan pharetra libero dapibus aliquam. Etiam sodales purus posuere gravida ullamcorper. Vestibulum tincidunt, nibh a pulvinar aliquet, leo tortor pulvinar diam, ut viverra nunc elit bibendum nulla. Praesent vel pulvinar erat, eu efficitur magna. Mauris at consequat purus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Fusce in dui quis nisi elementum aliquam. Proin eget justo sed est commodo accumsan. Suspendisse a feugiat tellus, eget gravida tellus. Cras quis consectetur dolor, a sodales tortor. Vestibulum aliquam lacinia metus, sed viverra erat egestas in. Morbi interdum sapien sed bibendum maximus. Aenean accumsan pharetra libero dapibus aliquam. Etiam sodales purus posuere gravida ullamcorper. Vestibulum tincidunt, nibh a pulvinar aliquet, leo tortor pulvinar diam, ut viverra nunc elit bibendum nulla. Praesent vel pulvinar erat, eu efficitur magna. Mauris at consequat purus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Fusce in dui quis nisi elementum aliquam. Proin eget justo sed est commodo accumsan. Suspendisse a feugiat tellus, eget gravida tellus.
![https://www.youtube.com/embed/NvQD9E5Cq8A]

View File

@@ -41,6 +41,8 @@ flatten = false
order = "" order = ""
home_name = "Home" home_name = "Home"
show_home_in_nav = true show_home_in_nav = true
nav_links = ""
nav_extra = ""
footer = "made with <a href="https://kewt.krzak.org">kewt</a>" footer = "made with <a href="https://kewt.krzak.org">kewt</a>"
logo = "" logo = ""
display_logo = false display_logo = false
@@ -57,6 +59,8 @@ favicon = ""
- `order` comma separated file/directory name list to order the sidebar (alphabetical by default) - `order` comma separated file/directory name list to order the sidebar (alphabetical by default)
- `home_name` text for the home link in navigation (default: "Home") - `home_name` text for the home link in navigation (default: "Home")
- `show_home_in_nav` show home link in navigation (default: true) - `show_home_in_nav` show home link in navigation (default: true)
- `nav_links` comma separated extra nav links, as bare URLs or Markdown links like `[Label](https://example.com)`
- `nav_extra` raw HTML appended inside the `<nav>` after the generated link list
- `footer` footer html/text shown at the bottom of pages - `footer` footer html/text shown at the bottom of pages
- `logo` logo image path (used in header if enabled) - `logo` logo image path (used in header if enabled)
- `display_logo` show logo in header - `display_logo` show logo in header