diff --git a/data.go b/data.go
index d08c98d..84ec9a6 100644
--- a/data.go
+++ b/data.go
@@ -4,21 +4,38 @@ import (
"context"
"encoding/json"
"fmt"
+ "html"
+ "html/template"
"strings"
"time"
"github.com/nbd-wtf/go-nostr"
+ "github.com/nbd-wtf/go-nostr/nip10"
"github.com/nbd-wtf/go-nostr/nip19"
)
-type Event struct {
- Npub string
- NpubShort string
- Nevent string
- Content string
- CreatedAt string
- ModifiedAt string
- ParentNevent string
+type LastNotesItem struct {
+ Npub string
+ NpubShort string
+ Nevent string
+ Content string
+ CreatedAt string
+ ModifiedAt string
+ IsReply bool
+}
+
+func (i LastNotesItem) Preview() template.HTML {
+ lines := strings.Split(html.EscapeString(i.Content), "\n")
+ var processedLines []string
+ for _, line := range lines {
+ if strings.TrimSpace(line) == "" {
+ continue
+ }
+ processedLine := shortenNostrURLs(line)
+ processedLines = append(processedLines, processedLine)
+ }
+
+ return template.HTML(strings.Join(processedLines, "
"))
}
type Data struct {
@@ -37,7 +54,7 @@ type Data struct {
authorRelays []string
authorLong string
authorShort string
- renderableLastNotes []*Event
+ renderableLastNotes []LastNotesItem
kindDescription string
kindNIP string
video string
@@ -69,7 +86,7 @@ func grabData(ctx context.Context, code string, isProfileSitemap bool) (*Data, e
modifiedAt := time.Unix(int64(event.CreatedAt), 0).Format("2006-01-02T15:04:05Z07:00")
author := event
- var renderableLastNotes []*Event
+ var renderableLastNotes []LastNotesItem
parentNevent := ""
authorRelays := []string{}
var content string
@@ -98,7 +115,7 @@ func grabData(ctx context.Context, code string, isProfileSitemap bool) (*Data, e
key = "lns:" + event.PubKey
eventsToFetch = 50000
} else {
- typ = "profile"
+ templateId = Profile
key = "ln:" + event.PubKey
}
@@ -131,15 +148,15 @@ func grabData(ctx context.Context, code string, isProfileSitemap bool) (*Data, e
}
}
- renderableLastNotes = make([]*Event, len(lastNotes))
- for i, n := range lastNotes {
- nevent, _ := nip19.EncodeEvent(n.ID, []string{}, n.PubKey)
- renderableLastNotes[i] = &Event{
- Nevent: nevent,
- Content: n.Content,
- CreatedAt: time.Unix(int64(n.CreatedAt), 0).Format("2006-01-02 15:04:05"),
- ModifiedAt: time.Unix(int64(n.CreatedAt), 0).Format("2006-01-02T15:04:05Z07:00"),
- ParentNevent: getParentNevent(n),
+ renderableLastNotes = make([]LastNotesItem, len(lastNotes))
+ for i, levt := range lastNotes {
+ nevent, _ := nip19.EncodeEvent(levt.ID, []string{}, levt.PubKey)
+ renderableLastNotes[i] = LastNotesItem{
+ Nevent: nevent,
+ Content: levt.Content,
+ CreatedAt: time.Unix(int64(levt.CreatedAt), 0).Format("2006-01-02 15:04:05"),
+ ModifiedAt: time.Unix(int64(levt.CreatedAt), 0).Format("2006-01-02T15:04:05Z07:00"),
+ IsReply: nip10.GetImmediateReply(levt.Tags) != nil,
}
}
if err != nil {
diff --git a/main.go b/main.go
index 0ccf495..3075012 100644
--- a/main.go
+++ b/main.go
@@ -70,7 +70,6 @@ func main() {
// initialize templates
// use a mapping to expressly link the templates and share them between more kinds/types
templateMapping = map[string]string{
- "profile": "profile.html",
"profile_sitemap": "sitemap.xml",
"relay": "relay.html",
"relay_sitemap": "sitemap.xml",
diff --git a/pages.go b/pages.go
index 7d93588..fa9bf07 100644
--- a/pages.go
+++ b/pages.go
@@ -226,3 +226,35 @@ type NotePage struct {
func (*NotePage) TemplateText() string {
return tmplNote
}
+
+var (
+ //go:embed templates/profile.html
+ tmplProfile string
+ ProfileTemplate = tmpl.MustCompile(&ProfilePage{})
+)
+
+type ProfilePage struct {
+ HeadCommonPartial `tmpl:"head_common"`
+ TopPartial `tmpl:"top"`
+ DetailsPartial `tmpl:"details"`
+ ClientsPartial `tmpl:"clients"`
+ FooterPartial `tmpl:"footer"`
+
+ AuthorRelays []string
+ Content string
+ CreatedAt string
+ Domain string
+ LastNotes []LastNotesItem
+ Metadata nostr.ProfileMetadata
+ NormalizedAuthorWebsiteURL string
+ RenderedAuthorAboutText template.HTML
+ Nevent string
+ Npub string
+ IsReply string
+ Proxy string
+ Title string
+}
+
+func (*ProfilePage) TemplateText() string {
+ return tmplProfile
+}
diff --git a/render.go b/render.go
index a47b358..f6324b1 100644
--- a/render.go
+++ b/render.go
@@ -328,6 +328,28 @@ func render(w http.ResponseWriter, r *http.Request) {
Video: data.video,
VideoType: data.videoType,
})
+ case Profile:
+ err = ProfileTemplate.Render(w, &ProfilePage{
+ HeadCommonPartial: HeadCommonPartial{IsProfile: true},
+ DetailsPartial: DetailsPartial{
+ HideDetails: true,
+ CreatedAt: data.createdAt,
+ KindDescription: data.kindDescription,
+ KindNIP: data.kindNIP,
+ EventJSON: string(eventJSON),
+ Kind: data.event.Kind,
+ },
+ ClientsPartial: ClientsPartial{
+ Clients: generateClientList(code, data.event),
+ },
+
+ Metadata: data.metadata,
+ NormalizedAuthorWebsiteURL: normalizeWebsiteURL(data.metadata.Website),
+ RenderedAuthorAboutText: template.HTML(basicFormatting(html.EscapeString(data.metadata.About), false, false)),
+ Npub: data.npub,
+ AuthorRelays: data.authorRelays,
+ LastNotes: data.renderableLastNotes,
+ })
case Other:
err = OtherTemplate.Render(w, &OtherPage{
HeadCommonPartial: HeadCommonPartial{IsProfile: false},
diff --git a/render_relay.go b/render_relay.go
index 474f5ef..c5126e0 100644
--- a/render_relay.go
+++ b/render_relay.go
@@ -7,6 +7,7 @@ import (
"time"
"github.com/nbd-wtf/go-nostr"
+ "github.com/nbd-wtf/go-nostr/nip10"
"github.com/nbd-wtf/go-nostr/nip11"
"github.com/nbd-wtf/go-nostr/nip19"
)
@@ -43,24 +44,24 @@ func renderRelayPage(w http.ResponseWriter, r *http.Request) {
Limit: events_num,
})
}
- renderableLastNotes := make([]*Event, len(lastNotes))
+ renderableLastNotes := make([]LastNotesItem, len(lastNotes))
lastEventAt := time.Now()
relay := []string{"wss://" + hostname}
- for i, n := range lastNotes {
- nevent, _ := nip19.EncodeEvent(n.ID, relay, n.PubKey)
- npub, _ := nip19.EncodePublicKey(n.PubKey)
+ for i, levt := range lastNotes {
+ nevent, _ := nip19.EncodeEvent(levt.ID, relay, levt.PubKey)
+ npub, _ := nip19.EncodePublicKey(levt.PubKey)
npubShort := npub[:8] + "…" + npub[len(npub)-4:]
- renderableLastNotes[i] = &Event{
- Npub: npub,
- NpubShort: npubShort,
- Nevent: nevent,
- Content: n.Content,
- CreatedAt: time.Unix(int64(n.CreatedAt), 0).Format("2006-01-02 15:04:05"),
- ModifiedAt: time.Unix(int64(n.CreatedAt), 0).Format("2006-01-02T15:04:05Z07:00"),
- ParentNevent: getParentNevent(n),
+ renderableLastNotes[i] = LastNotesItem{
+ Npub: npub,
+ NpubShort: npubShort,
+ Nevent: nevent,
+ Content: levt.Content,
+ CreatedAt: time.Unix(int64(levt.CreatedAt), 0).Format("2006-01-02 15:04:05"),
+ ModifiedAt: time.Unix(int64(levt.CreatedAt), 0).Format("2006-01-02T15:04:05Z07:00"),
+ IsReply: nip10.GetImmediateReply(levt.Tags) != nil,
}
if i == 0 {
- lastEventAt = time.Unix(int64(n.CreatedAt), 0)
+ lastEventAt = time.Unix(int64(levt.CreatedAt), 0)
}
}
diff --git a/templates/profile.html b/templates/profile.html
index cda5ee1..608acdd 100644
--- a/templates/profile.html
+++ b/templates/profile.html
@@ -1,113 +1,92 @@
-
+