/* Template that grew in complexity recently. It's was first template that supports JS. 1. Template contains local templ blocks their names starting with lowercase to make it DRY 2. JS script is seperated and should be called *after* page construction. 3. Templ ShowBlogPage contains some math to dynamicly reduce post size TODO - make it more DRY and modular in general */ package templates import "github.com/dixxe/personal-website/web/static/styling" import "github.com/dixxe/personal-website/iternal/pkg/repositories" import "fmt" import "strings" import "math" var markedHandle = templ.NewOnceHandle() templ runMarked(markdown string) { @templ.JSONScript("md", markdown) @markedHandle.Once() { } } templ blogHeader() {

Блог дихуса

Вернуться Домой


} templ ShowPost(post repositories.Post){ @BasicPageBlock() @blogHeader()

{post.Header}

@runMarked(post.Content) } templ ShowBlogPage(posts []repositories.Post) { @BasicPageBlock() @blogHeader() for i := len(posts) - 1; i>=0; i-- {

{posts[i].Header}

{{ // It's probably awfull practice, but here I calculate // post size and make it smaller.. In frontend! Magic! postWords := strings.Fields(posts[i].Content) postCap := int(math.Sqrt(float64(len(postWords))*5)) shortStr := postWords[:postCap] }}

{strings.Join(shortStr, " ")}...

Читать полностью...
} @UsefulLinks() }