draft shits

This commit is contained in:
2026-02-01 11:55:16 +01:00
parent d17ed8c650
commit e27aadc603
22 changed files with 1341 additions and 0 deletions

77
internal/render/render.go Normal file
View File

@ -0,0 +1,77 @@
package render
import (
"fmt"
"html/template"
"path/filepath"
"sync"
"github.com/russross/blackfriday/v2"
)
type TemplateData struct {
Name string
FileNameSet []string
}
type TemplateManager struct {
templates map[string]*template.Template
mu sync.RWMutex
basePath string
devMode bool
}
func NewTemplateManager(basePath string, devMode bool) *TemplateManager {
return &TemplateManager{
templates: make(map[string]*template.Template),
basePath: basePath,
devMode: devMode,
}
}
func (tm *TemplateManager) buildTemplatePath(name string) string {
return filepath.Join(tm.basePath, name+".tmpl")
}
func (tm *TemplateManager) GetTemplate(td *TemplateData) (*template.Template, error) {
// Skip cache in dev mode
if !tm.devMode {
tm.mu.RLock()
if tmpl, exists := tm.templates[td.Name]; exists {
tm.mu.RUnlock()
return tmpl, nil
}
tm.mu.RUnlock()
}
// Build file paths
var files []string
for _, file := range td.FileNameSet {
files = append(files, tm.buildTemplatePath(file))
}
// Parse template
tmpl, err := template.ParseFiles(files...)
if err != nil {
return nil, fmt.Errorf("parse template %s: %w", td.Name, err)
}
// Cache it (unless in dev mode)
if !tm.devMode {
tm.mu.Lock()
tm.templates[td.Name] = tmpl
tm.mu.Unlock()
}
return tmpl, nil
}
// Render markdown to HTML with target="_blank" on links
func RenderMarkdown(content []byte) (template.HTML, error) {
renderer := blackfriday.NewHTMLRenderer(blackfriday.HTMLRendererParameters{
Flags: blackfriday.CommonHTMLFlags | blackfriday.HrefTargetBlank,
})
html := blackfriday.Run(content, blackfriday.WithRenderer(renderer))
return template.HTML(html), nil
}

View File

@ -0,0 +1,52 @@
package render
import (
"strings"
"testing"
)
func TestRenderMarkdown(t *testing.T) {
cases := []struct {
name string
markdown string
want string
}{
{
name: "Markdown, no link",
markdown: `# Test
## 01/24/26 09:14:20 - some entry
check this out`,
want: `<h1>Test</h1><h2>01/24/26 09:14:20 - some entry</h2><p>check this out</p>`,
},
{
name: "Markdown, some link",
markdown: `# Test 2
## 01/24/26 09:14:20 - some entry (bare link)
Check this out http://tatata.toto here
`,
want: `<h1>Test 2</h1><h2>01/24/26 09:14:20 - some entry (bare link)</h2><p>Check this out <a href="http://tatata.toto" target="_blank">http://tatata.toto</a> here</p>`,
},
{
name: "Markdown, some link with description",
markdown: `# Test 2
## 01/24/26 09:14:20 - some entry (bare link)
Check this out [here](http://tatata.toto)
`,
want: `<h1>Test 2</h1><h2>01/24/26 09:14:20 - some entry (bare link)</h2><p>Check this out <a href="http://tatata.toto" target="_blank">here</a></p>`,
},
}
for _, test := range cases {
got, err := RenderMarkdown([]byte(test.markdown))
if err != nil {
t.Errorf("Error rendering markdown: '%s'\n", err)
}
strip := strings.ReplaceAll(string(got), "\n", "")
strip = strings.Trim(strip, " ")
if strip != test.want {
t.Errorf("Rendering markdown: Wanted '%s', got '%s'.\n", test.want, strip)
}
}
}