From d87b4b9411262146a1d77a79996669a858ac2758 Mon Sep 17 00:00:00 2001 From: Amy Gale Ruth Bowersox Date: Mon, 29 Dec 2025 23:17:27 -0700 Subject: [PATCH] I can display the posts in a topic, albeit imperfectly --- conference.go | 6 +++--- database/post.go | 10 +++++++--- ui/amcontext.go | 22 ++++++++++++++++++++++ ui/views/posts.jet | 17 ++++++----------- 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/conference.go b/conference.go index 02427a7..fdf6684 100644 --- a/conference.go +++ b/conference.go @@ -25,7 +25,7 @@ import ( "git.erbosoft.com/amy/amsterdam/htmlcheck" "git.erbosoft.com/amy/amsterdam/ui" "github.com/CloudyKit/jet/v6" - "github.com/labstack/gommon/log" + log "github.com/sirupsen/logrus" ) /* Conferences displayes the list of conferences in a community. @@ -513,13 +513,14 @@ func ReadPosts(ctxt ui.AmContext) (string, any, error) { postsPostRef := plc.AsString() // Render the output. + ctxt.VarMap().Set("amsterdam_pageTitle", fmt.Sprintf("%s: %s", topic.Name, summaryLine)) ctxt.VarMap().Set("topicName", topic.Name) ctxt.VarMap().Set("summaryLine", summaryLine) ctxt.VarMap().Set("lastRead", lastRead) ctxt.VarMap().Set("pageSize", ctxt.Globals().PostsPerPage) ctxt.VarMap().Set("post_confRef", topicConferenceRef) ctxt.VarMap().SetFunc("post_getOverrideLine", templateOverrideLine) - ctxt.VarMap().SetFunc("post.getOverrideLink", templateOverrideLink) + ctxt.VarMap().SetFunc("post_getOverrideLink", templateOverrideLink) ctxt.VarMap().SetFunc("post_getText", templatePostText) ctxt.VarMap().SetFunc("post_getUserName", templateExtractUserName) ctxt.VarMap().Set("post_stem", fmt.Sprintf("/comm/%s/conf/%s/r/%d", comm.Alias, ctxt.GetScratch("currentAlias").(string), topic.Number)) @@ -532,7 +533,6 @@ func ReadPosts(ctxt ui.AmContext) (string, any, error) { ctxt.VarMap().Set("rangeStart", postRange[0]) ctxt.VarMap().Set("topicListLink", fmt.Sprintf("/comm/%s/conf/%s", comm.Alias, ctxt.GetScratch("currentAlias").(string))) ctxt.VarMap().Set("topicNum", topic.Number) - ctxt.VarMap().Set("amsterdam_pageTitle", fmt.Sprintf("%s: %s", topic.Name, summaryLine)) if resetLastRead { user := ctxt.CurrentUser() ampool.Submit(func(ctx context.Context) { diff --git a/database/post.go b/database/post.go index 62dc48a..d6310b0 100644 --- a/database/post.go +++ b/database/post.go @@ -89,11 +89,15 @@ func AmGetPost(ctx context.Context, postId int64) (*PostHeader, error) { return &(dbdata[0]), nil } -func AmGetPostRange(ctx context.Context, topic *Topic, first, last int32) ([]PostHeader, error) { - var rc []PostHeader - err := amdb.SelectContext(ctx, &rc, "SELECT * FROM posts WHERE topicid = ? AND num >= ? AND num <= ? ORDER BY num", topic.TopicId, first, last) +func AmGetPostRange(ctx context.Context, topic *Topic, first, last int32) ([]*PostHeader, error) { + var posts []PostHeader + err := amdb.SelectContext(ctx, &posts, "SELECT * FROM posts WHERE topicid = ? AND num >= ? AND num <= ? ORDER BY num", topic.TopicId, first, last) if err != nil { return nil, err } + rc := make([]*PostHeader, len(posts)) + for i := range posts { + rc[i] = &(posts[i]) + } return rc, nil } diff --git a/ui/amcontext.go b/ui/amcontext.go index 386a36b..12f9b87 100644 --- a/ui/amcontext.go +++ b/ui/amcontext.go @@ -62,6 +62,7 @@ type AmContext interface { ReplaceUser(*database.User) SaveSession() error SubRender(string) ([]byte, error) + SubRender2(string, map[string]any) ([]byte, error) SetCommunityContext(string) error SetLeftMenu(string) SetLoginCookie(string) @@ -320,6 +321,27 @@ func (c *amContext) SubRender(name string) ([]byte, error) { return buf.Bytes(), err } +func (c *amContext) SubRender2(name string, vals map[string]any) ([]byte, error) { + view, err := views.GetTemplate(name) + if err != nil { + log.Errorf("unable to load template \"%s\": %v", name, err) + return nil, err + } + newmap := make(jet.VarMap) + for k, v := range c.VarMap() { + newmap.Set(k, v) + } + for k, v := range vals { + newmap.Set(k, v) + } + buf := new(bytes.Buffer) + err = view.Execute(buf, newmap, c) + if err != nil { + log.Errorf("template \"%s\" failed subrender exec: %v", name, err) + } + return buf.Bytes(), err +} + /* SetCommunityContext establishes the community context from a (ID or alias) parameter. * Parameters: * param - String parameter selecting the community. diff --git a/ui/views/posts.jet b/ui/views/posts.jet index 0440842..7bcc59f 100644 --- a/ui/views/posts.jet +++ b/ui/views/posts.jet @@ -74,17 +74,12 @@
- {{ post_userName := "" }} - {{ post_text := "" }} - {{ post_overrideLine := "" }} - {{ post_overrideLink := "" }} - {{ range i, post_cur := posts }} - {{ post_userName = post_getUserName(post_cur, .) }} - {{ post_text = post_getText(post_cur, .) }} - {{ post_overrideLine = post_getOverrideLine(post_cur, .) }} - {{ post_overrideLink = post_getOverrideLink(post_cur, post_topicPermalink) }} - {{ .SubRender("singlepost.jet") | raw }} - {{ if pin == post_cur.Num }}
{{ end }} + {{ m := map("foo", "bar") }} + {{ range i, p := posts }} + {{ m = map("post_cur", p, "post_userName", post_getUserName(p, .), "post_text", post_getText(p, .), + "post_overrideLine", post_getOverrideLine(p, .), "post_overrideLink", post_getOverrideLink(p, post_topicPermalink)) }} + {{ .SubRender2("singlepost.jet", m) | raw }} + {{ if pin == p.Num }}
{{ end }} {{ end }}