package models_pages import ( "bytes" "fmt" "html/template" "io" "main/tools" "os" "path/filepath" "strings" "time" ) const ( // Имя соответствующего шаблона PostsPageTmplName = "posts.gohtml" ) type Posts map[PostLink]*Post func LoadPosts(dir string) (Posts, error) { posts := Posts{} err := filepath.Walk(dir, func(path string, f os.FileInfo, err error) error { if err != nil { return err } if !f.IsDir() && strings.HasSuffix(f.Name(), ".md") { file, err := os.Open(path) if err != nil { return err } md, err := io.ReadAll(file) if err != nil { return err } html := tools.MdToHTML(md) link := fmt.Sprintf("/%s/", strings.TrimSuffix(filepath.Base(path), ".md")) posts[PostLink(link)] = newPost(link, html) } return nil }) if err != nil { return nil, err } return posts, nil } func (p *Posts) RenderPostsPage(templates *template.Template, version int64) ([]byte, error) { var pageData bytes.Buffer context := map[string]any{ "version": version, "renderingTimestamp": time.Now().Unix(), "posts": p, } if err := templates.ExecuteTemplate(&pageData, PostsPageTmplName, context); err != nil { return nil, err } return pageData.Bytes(), nil }