Browse Source

bug-fixes

master
Silberengel 4 weeks ago
parent
commit
78d80a0c41
  1. 31
      internal/generator/html.go
  2. 26
      internal/server/handlers.go
  3. 8
      templates/base.html

31
internal/generator/html.go

@ -97,6 +97,9 @@ func NewHTMLGenerator(templateDir string, linkBaseURL, siteName, siteURL, defaul @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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

26
internal/server/handlers.go

@ -12,6 +12,7 @@ import ( @@ -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) { @@ -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) { @@ -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) { @@ -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) { @@ -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) { @@ -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) { @@ -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

8
templates/base.html

@ -64,8 +64,8 @@ @@ -64,8 +64,8 @@
</nav>
</header>
<div class="layout-container{{if .WikiPages}} wiki-layout{{end}}">
{{if .WikiPages}}
<div class="layout-container{{if and .WikiPages (or (eq .CanonicalURL (printf "%s/wiki" .SiteURL)) (hasPrefix .CanonicalURL (printf "%s/wiki/" .SiteURL)))}} wiki-layout{{end}}">
{{if and .WikiPages (or (eq .CanonicalURL (printf "%s/wiki" .SiteURL)) (hasPrefix .CanonicalURL (printf "%s/wiki/" .SiteURL)))}}
<aside class="wiki-sidebar" aria-label="About The Project navigation">
<nav class="wiki-nav">
<h2>About The Project</h2>
@ -83,13 +83,15 @@ @@ -83,13 +83,15 @@
{{block "content" .}}{{end}}
</main>
{{if or (eq .CanonicalURL .SiteURL) (eq .CanonicalURL (printf "%s/" .SiteURL))}}
<aside class="feed-sidebar" aria-label="Recent notes">
{{template "feed" .}}
</aside>
{{end}}
</div>
<footer>
<p>&copy; {{.CurrentYear}} {{.SiteName}}. All rights reserved.</p>
<p>&copy; 2026 GitCitadel All Rights Reserved | <a href="/contact">Contact</a></p>
</footer>
<script>

Loading…
Cancel
Save