From 78d80a0c41accddf1e5c796e63a9b7cb0859f79b Mon Sep 17 00:00:00 2001 From: Silberengel Date: Sun, 15 Feb 2026 16:57:20 +0100 Subject: [PATCH] bug-fixes --- internal/generator/html.go | 31 ++++++++++++++++++++++--------- internal/server/handlers.go | 26 +++++++++----------------- templates/base.html | 8 +++++--- 3 files changed, 36 insertions(+), 29 deletions(-) diff --git a/internal/generator/html.go b/internal/generator/html.go index 28d415a..03598a4 100644 --- a/internal/generator/html.go +++ b/internal/generator/html.go @@ -97,6 +97,9 @@ func NewHTMLGenerator(templateDir string, linkBaseURL, siteName, siteURL, defaul } return string(b), nil }, + "hasPrefix": func(s, prefix string) bool { + return len(s) >= len(prefix) && s[:len(prefix)] == prefix + }, }) // Load all templates @@ -179,7 +182,7 @@ func (g *HTMLGenerator) GenerateWikiPage(wiki *nostr.WikiEvent, wikiPages []Wiki SiteURL: g.siteURL, CurrentYear: time.Now().Year(), WikiPages: wikiPages, - FeedItems: feedItems, + FeedItems: []FeedItemInfo{}, // Empty - feed only on landing page Content: template.HTML(htmlContent), Summary: wiki.Summary, } @@ -221,7 +224,7 @@ func (g *HTMLGenerator) GenerateBlogPage(blogIndex *nostr.IndexEvent, blogItems CurrentYear: time.Now().Year(), BlogItems: formattedBlogItems, BlogSummary: blogIndex.Summary, - FeedItems: feedItems, + FeedItems: []FeedItemInfo{}, // Empty - feed only on landing page Content: template.HTML(""), } @@ -252,6 +255,9 @@ func (g *HTMLGenerator) GenerateBlogPage(blogIndex *nostr.IndexEvent, blogItems } return string(b), nil }, + "hasPrefix": func(s, prefix string) bool { + return len(s) >= len(prefix) && s[:len(prefix)] == prefix + }, }) files := []string{ @@ -297,7 +303,7 @@ func (g *HTMLGenerator) GenerateWikiIndexPage(wikiIndex *nostr.IndexEvent, wikiP SiteURL: g.siteURL, CurrentYear: time.Now().Year(), WikiPages: wikiPages, - FeedItems: feedItems, + FeedItems: []FeedItemInfo{}, // Empty - feed only on landing page Summary: summary, } @@ -327,7 +333,7 @@ func (g *HTMLGenerator) GenerateEBooksPage(ebooks []EBookInfo, feedItems []FeedI SiteURL: g.siteURL, CurrentYear: time.Now().Year(), WikiPages: []WikiPageInfo{}, - FeedItems: feedItems, + FeedItems: []FeedItemInfo{}, // Empty - feed only on landing page EBooks: formattedEBooks, Content: template.HTML(""), // Content comes from template } @@ -373,7 +379,7 @@ func (g *HTMLGenerator) GenerateContactPage(success bool, errorMsg string, event SiteURL: g.siteURL, CurrentYear: time.Now().Year(), WikiPages: []WikiPageInfo{}, // Will be populated if needed - FeedItems: feedItems, + FeedItems: []FeedItemInfo{}, // Empty - feed only on landing page }, Success: success, Error: errorMsg, @@ -395,6 +401,9 @@ func (g *HTMLGenerator) GenerateContactPage(success bool, errorMsg string, event } return string(b), nil }, + "hasPrefix": func(s, prefix string) bool { + return len(s) >= len(prefix) && s[:len(prefix)] == prefix + }, }) // Parse base.html, components.html, and contact.html together @@ -421,7 +430,7 @@ func (g *HTMLGenerator) GenerateContactPage(success bool, errorMsg string, event "CurrentYear": data.CurrentYear, "WikiPages": data.WikiPages, "BlogItems": data.BlogItems, - "FeedItems": data.FeedItems, + "FeedItems": []FeedItemInfo{}, // Empty - feed only on landing page "Success": data.Success, "Error": data.Error, "EventID": data.EventID, @@ -463,9 +472,10 @@ func (g *HTMLGenerator) GenerateErrorPage(statusCode int, feedItems []FeedItemIn } canonicalURL := g.siteURL - if statusCode == 404 { + switch statusCode { + case 404: canonicalURL = g.siteURL + "/404" - } else if statusCode == 500 { + case 500: canonicalURL = g.siteURL + "/500" } @@ -479,7 +489,7 @@ func (g *HTMLGenerator) GenerateErrorPage(statusCode int, feedItems []FeedItemIn SiteURL: g.siteURL, CurrentYear: time.Now().Year(), WikiPages: []WikiPageInfo{}, - FeedItems: feedItems, + FeedItems: []FeedItemInfo{}, // Empty - feed only on landing page Content: template.HTML(""), // Content will come from the template } @@ -499,6 +509,9 @@ func (g *HTMLGenerator) renderTemplate(templateName string, data PageData) (stri } return string(b), nil }, + "hasPrefix": func(s, prefix string) bool { + return len(s) >= len(prefix) && s[:len(prefix)] == prefix + }, }) // Parse base.html, components.html, and the specific template together diff --git a/internal/server/handlers.go b/internal/server/handlers.go index 8f7ce06..c08a916 100644 --- a/internal/server/handlers.go +++ b/internal/server/handlers.go @@ -12,6 +12,7 @@ import ( gonostr "github.com/nbd-wtf/go-nostr" "gitcitadel-online/internal/cache" + "gitcitadel-online/internal/generator" "gitcitadel-online/internal/nostr" ) @@ -119,11 +120,8 @@ func (s *Server) handleContact(w http.ResponseWriter, r *http.Request) { } } - // Get feed items from cache - feedItems := s.convertFeedItemsToInfo(s.feedCache.Get()) - - // Render the contact form - html, err := s.htmlGenerator.GenerateContactPage(false, "", "", nil, repoAnnouncement, feedItems) + // Render the contact form (feed items not needed - only on landing page) + html, err := s.htmlGenerator.GenerateContactPage(false, "", "", nil, repoAnnouncement, []generator.FeedItemInfo{}) if err != nil { http.Error(w, "Failed to generate contact page", http.StatusInternalServerError) return @@ -140,8 +138,7 @@ func (s *Server) handleContact(w http.ResponseWriter, r *http.Request) { // Parse form data if err := r.ParseForm(); err != nil { - feedItems := s.convertFeedItemsToInfo(s.feedCache.Get()) - html, _ := s.htmlGenerator.GenerateContactPage(false, "Failed to parse form data", "", nil, nil, feedItems) + html, _ := s.htmlGenerator.GenerateContactPage(false, "Failed to parse form data", "", nil, nil, []generator.FeedItemInfo{}) w.Header().Set("Content-Type", "text/html; charset=utf-8") w.Write([]byte(html)) return @@ -153,13 +150,12 @@ func (s *Server) handleContact(w http.ResponseWriter, r *http.Request) { // Validate required fields if subject == "" || content == "" { - feedItems := s.convertFeedItemsToInfo(s.feedCache.Get()) formData := map[string]string{ "subject": subject, "content": content, "labels": labelsStr, } - html, _ := s.htmlGenerator.GenerateContactPage(false, "Subject and message are required", "", formData, nil, feedItems) + html, _ := s.htmlGenerator.GenerateContactPage(false, "Subject and message are required", "", formData, nil, []generator.FeedItemInfo{}) w.Header().Set("Content-Type", "text/html; charset=utf-8") w.Write([]byte(html)) return @@ -184,13 +180,12 @@ func (s *Server) handleContact(w http.ResponseWriter, r *http.Request) { repoAnnouncement, err := s.issueService.FetchRepoAnnouncement(ctx, s.repoAnnouncement) if err != nil { log.Printf("Failed to fetch repo announcement: %v", err) - feedItems := s.convertFeedItemsToInfo(s.feedCache.Get()) formData := map[string]string{ "subject": subject, "content": content, "labels": labelsStr, } - html, _ := s.htmlGenerator.GenerateContactPage(false, "Failed to connect to repository. Please try again later.", "", formData, nil, feedItems) + html, _ := s.htmlGenerator.GenerateContactPage(false, "Failed to connect to repository. Please try again later.", "", formData, nil, []generator.FeedItemInfo{}) w.Header().Set("Content-Type", "text/html; charset=utf-8") w.Write([]byte(html)) return @@ -207,21 +202,19 @@ func (s *Server) handleContact(w http.ResponseWriter, r *http.Request) { eventID, err := s.issueService.PublishIssue(ctx, repoAnnouncement, issueReq, "") if err != nil { log.Printf("Failed to publish issue: %v", err) - feedItems := s.convertFeedItemsToInfo(s.feedCache.Get()) formData := map[string]string{ "subject": subject, "content": content, "labels": labelsStr, } - html, _ := s.htmlGenerator.GenerateContactPage(false, "Failed to submit your message. Please try again later.", "", formData, nil, feedItems) + html, _ := s.htmlGenerator.GenerateContactPage(false, "Failed to submit your message. Please try again later.", "", formData, nil, []generator.FeedItemInfo{}) w.Header().Set("Content-Type", "text/html; charset=utf-8") w.Write([]byte(html)) return } // Success - render success page - feedItems := s.convertFeedItemsToInfo(s.feedCache.Get()) - html, err := s.htmlGenerator.GenerateContactPage(true, "", eventID, nil, repoAnnouncement, feedItems) + html, err := s.htmlGenerator.GenerateContactPage(true, "", eventID, nil, repoAnnouncement, []generator.FeedItemInfo{}) if err != nil { http.Error(w, "Failed to generate success page", http.StatusInternalServerError) return @@ -315,8 +308,7 @@ func (s *Server) handleRobots(w http.ResponseWriter, r *http.Request) { // handle404 handles 404 errors func (s *Server) handle404(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusNotFound) - feedItems := s.convertFeedItemsToInfo(s.feedCache.Get()) - html, err := s.htmlGenerator.GenerateErrorPage(404, feedItems) + html, err := s.htmlGenerator.GenerateErrorPage(404, []generator.FeedItemInfo{}) if err != nil { w.Write([]byte("404 - Page Not Found")) return diff --git a/templates/base.html b/templates/base.html index 7787a61..b400480 100644 --- a/templates/base.html +++ b/templates/base.html @@ -64,8 +64,8 @@ -
- {{if .WikiPages}} +
+ {{if and .WikiPages (or (eq .CanonicalURL (printf "%s/wiki" .SiteURL)) (hasPrefix .CanonicalURL (printf "%s/wiki/" .SiteURL)))}}
-

© {{.CurrentYear}} {{.SiteName}}. All rights reserved.

+

© 2026 GitCitadel All Rights Reserved | Contact