From d2eff4ae1597776d2f728dcfdb24aaa08e9de2b6 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Wed, 12 Feb 2025 02:02:17 +0800 Subject: render_readme.go: Render plain READMEs too --- render_readme.go | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) (limited to 'render_readme.go') diff --git a/render_readme.go b/render_readme.go index 72e0ec4..32a3a7d 100644 --- a/render_readme.go +++ b/render_readme.go @@ -2,6 +2,7 @@ package main import ( "bytes" + "html" "html/template" "github.com/go-git/go-git/v5/plumbing/object" @@ -12,20 +13,34 @@ import ( var markdown_converter = goldmark.New(goldmark.WithExtensions(extension.GFM)) -func render_readme_at_tree(tree *object.Tree) any { - readme_file, err := tree.File("README.md") - if err != nil { - return "" - } - readme_file_contents, err := readme_file.Contents() - if err != nil { - return "Unable to fetch contents of README: " + err.Error() +func render_readme_at_tree(tree *object.Tree) (readme_filename string, readme_content template.HTML) { + var readme_rendered_unsafe bytes.Buffer + + readme_file, err := tree.File("README") + if err == nil { + readme_file_contents, err := readme_file.Contents() + if err != nil { + return "Error fetching README", string_escape_html("Unable to fetch contents of README: " + err.Error()) + } + return "README", template.HTML("
" + html.EscapeString(readme_file_contents) + "
") } - var readme_rendered_unsafe bytes.Buffer - err = markdown_converter.Convert([]byte(readme_file_contents), &readme_rendered_unsafe) - if err != nil { - return "Unable to render README: " + err.Error() + readme_file, err = tree.File("README.md") + if err == nil { + readme_file_contents, err := readme_file.Contents() + if err != nil { + return "Error fetching README", string_escape_html("Unable to fetch contents of README: " + err.Error()) + } + err = markdown_converter.Convert([]byte(readme_file_contents), &readme_rendered_unsafe) + if err != nil { + return "Error fetching README", string_escape_html("Unable to render README: " + err.Error()) + } + return "README.md", template.HTML(bluemonday.UGCPolicy().SanitizeBytes(readme_rendered_unsafe.Bytes())) } - return template.HTML(bluemonday.UGCPolicy().SanitizeBytes(readme_rendered_unsafe.Bytes())) + + return "", "" +} + +func string_escape_html(s string) template.HTML { + return template.HTML(html.EscapeString(s)) } -- cgit v1.2.3