From cf6af6def1cac3fc6cd044c82282208b7073eb64 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Fri, 1 Nov 2024 13:00:18 +0100 Subject: Implement gemtext HTTP middleware --- example/Caddyfile | 23 +++++++++++++++++++---- example/tpl/render_gemtext.html | 9 ++------- example/tpl/render_gemtext_link.html | 5 +++++ example/tpl/render_gemtext_with_templates.html | 15 +++++++++++++++ 4 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 example/tpl/render_gemtext_link.html create mode 100644 example/tpl/render_gemtext_with_templates.html (limited to 'example') diff --git a/example/Caddyfile b/example/Caddyfile index 4a4879f..6c6609d 100644 --- a/example/Caddyfile +++ b/example/Caddyfile @@ -5,7 +5,22 @@ http_port 8000 } -http://template.localhost { +http://gemtext.localhost { + root example/static + + # Allow for either index.html or index.gmi files when serving directories + try_files {path} {path}/index.html {path}/index.gmi + + gemtext { + root example/tpl + template render_gemtext.html + link_template render_gemtext_link.html + } + + file_server +} + +http://templates.localhost { root example/static # If a directory has an index.gmi file, then that file will be served when @@ -20,13 +35,13 @@ http://template.localhost { templates { # The templates directive is given a different root, so that other # template snippets within the tpl directory could theoretically be - # used within render_gemtext.html. + # used within render_gemtext_with_templates.html. root example # Include the gemtext extention to make the gemtext function # available within the template. extensions { - gemtext { + gemtext_function { gateway_url "https://gemini.tildeverse.org/?gemini://" } } @@ -37,7 +52,7 @@ http://template.localhost { # actually want. Setting Content-Type is required because there's no # actual file for Caddy to determine the value from. header Content-Type "text/html; charset=utf-8" - respond `{{ include "tpl/render_gemtext.html" }}` + respond `{{ include "tpl/render_gemtext_with_templates.html" }}` } # All other files are handled directly by the file_server. diff --git a/example/tpl/render_gemtext.html b/example/tpl/render_gemtext.html index 72e35a4..82d3c02 100644 --- a/example/tpl/render_gemtext.html +++ b/example/tpl/render_gemtext.html @@ -1,15 +1,10 @@ -{{ $pathSplit := splitList "/" .Req.URL.Path }} -{{ $base := last $pathSplit | default "index.gmi" }} -{{ $filePath := append (initial $pathSplit) $base | join "/" | printf "static%s" }} -{{ if not (fileExists $filePath) }}{{ httpError 404 }}{{ end }} -{{ $gemtextRes := gemtext (include $filePath) }} - {{ $gemtextRes.Title | default "Example Gemtext File" }} + {{ .Title | default "Example Gemtext File" }} - {{ $gemtextRes.Body }} + {{ .Body }} diff --git a/example/tpl/render_gemtext_link.html b/example/tpl/render_gemtext_link.html new file mode 100644 index 0000000..b0d1251 --- /dev/null +++ b/example/tpl/render_gemtext_link.html @@ -0,0 +1,5 @@ +{{- $url := .URL }} +{{- if (hasPrefix "gemini://" $url) }} + {{- $url = printf "https://gemini.tildeverse.org/?%s" $url }} +{{- end }} +

{{ .Label }}

diff --git a/example/tpl/render_gemtext_with_templates.html b/example/tpl/render_gemtext_with_templates.html new file mode 100644 index 0000000..72e35a4 --- /dev/null +++ b/example/tpl/render_gemtext_with_templates.html @@ -0,0 +1,15 @@ +{{ $pathSplit := splitList "/" .Req.URL.Path }} +{{ $base := last $pathSplit | default "index.gmi" }} +{{ $filePath := append (initial $pathSplit) $base | join "/" | printf "static%s" }} +{{ if not (fileExists $filePath) }}{{ httpError 404 }}{{ end }} +{{ $gemtextRes := gemtext (include $filePath) }} + + + + {{ $gemtextRes.Title | default "Example Gemtext File" }} + + + + {{ $gemtextRes.Body }} + + -- cgit v1.2.3