From 901b2b5d62e6b74be560721bbc334981c8122125 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Sat, 21 Oct 2023 11:46:36 -0300 Subject: [PATCH] tmpl migration: profile.html --- data.go | 57 +++++++++++++-------- main.go | 1 - pages.go | 32 ++++++++++++ render.go | 22 ++++++++ render_relay.go | 27 +++++----- templates/profile.html | 114 ++++++++++++++++------------------------- 6 files changed, 149 insertions(+), 104 deletions(-) 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 @@ - + - - {{.metadata.Name | escapeString}} / {{.metadata.DisplayName | - escapeString}} is on nostr - + {{.Metadata.Name}} / {{.Metadata.DisplayName}} is on nostr - - - {{ if .metadata.Picture }} - - - {{end}} {{ if .metadata.About }} - + + + {{ if not (eq "" .Metadata.Picture) }} + + + {{end}} {{ if not (eq "" .Metadata.About) }} + {{end}} - + - {{template "head_common.html" .}} + {{template "head_common" .}} - {{template "top.html" .}} + {{template "top" .}}
- {{.metadata.Name | escapeString}} {{if not (eq .metadata.Name - .metadata.DisplayName)}} - {{.metadata.DisplayName | escapeString}} + {{.Metadata.Name}} {{if not (eq .Metadata.Name + .Metadata.DisplayName)}} + {{.Metadata.DisplayName}} {{end}}
- +
Last update:
- {{.createdAt | escapeString}} + {{.CreatedAt}}

- {{.metadata.Name | escapeString}} {{if not (eq .metadata.Name - .metadata.DisplayName)}} - {{.metadata.DisplayName | escapeString}} + {{.Metadata.Name}} {{if not (eq .Metadata.Name + .Metadata.DisplayName)}} + {{.Metadata.DisplayName}} {{end}}

-
- {{.metadata.About | escapeString | basicFormatting}} + {{.Metadata.Website}}
+
{{.RenderedAuthorAboutText}}
Public key
- {{.npub | escapeString}} + {{.Npub}}
NIP-05
- {{.metadata.NIP05 | escapeString}} + {{.Metadata.NIP05}}
LN Address
- {{.metadata.LUD16 | escapeString}} + {{.Metadata.LUD16}}
+ {{ if not (eq 0 (len .AuthorRelays)) }}
Posting on these relays
- {{if .authorRelays}} {{range $index, $element := .authorRelays}} - {{$element}} - {{end}} {{else}} No relays found, sorry! Try to reload to search - again. {{end}} + {{range $index, $element := .AuthorRelays}} + {{$element}} + {{end}}
+ {{ end }}
Show more details
- {{template "details.html" .}} + {{template "details" .}}
Last update:
- {{.createdAt | escapeString}} + {{.CreatedAt}}
+ {{if not (eq 0 (len .LastNotes))}}
- - {{if .lastNotes}} @@ -150,14 +126,12 @@
- {{template "column_clients.html" .}} + {{template "clients" .ClientsPartial}}
- {{template "footer.html"}} + {{template "footer" .}} - +