Split templates by event type

Currently fallback to the raw.html if type is not a profile
This commit is contained in:
Daniele Tonon
2023-05-25 15:42:16 +02:00
parent 0c90ec92ea
commit d01e6c5d04
3 changed files with 117 additions and 5 deletions

101
raw.html Normal file
View File

@@ -0,0 +1,101 @@
<!DOCTYPE html>
<html>
<head>
{{if eq .type "profile"}}
<title>Nostr Public Key {{.npub}}</title>
<meta property="og:site_name" content="{{.npub}}" />
<meta property="og:title" content="{{.title}}" />
{{ if .metadata.Picture }}
<meta property="og:image" content="{{.metadata.Picture}}" />
<meta property="twitter:image" content="{{.proxy}}{{.metadata.Picture}}" />
{{end}} {{ if .metadata.About }}
<meta property="og:description" content="{{.metadata.About}}" />
{{end}}
<meta property="twitter:card" content="summary" />
{{end}}
<!----------->
{{ if eq .type "event" }}
<title>Nostr Event {{.nevent}}</title>
<meta property="og:site_name" content="{{.authorLong}}" />
<meta property="og:title" content="{{.title}}" />
<meta name="twitter:title" content="{{.twitterTitle}}" />
<!---->
{{ if .textImageURL }}
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@nostrprotocol" />
<meta property="og:image" content="{{.textImageURL}}" />
<meta name="twitter:image" content="{{.textImageURL}}" />
{{ else }}
<!---->
<meta property="twitter:card" content="summary" />
{{ if .image }}
<meta property="og:image" content="{{.image}}" />
<meta name="twitter:image" content="{{.proxy}}{{.image}}" />
{{end}} {{ if .video }}
<meta property="og:video" content="{{.video}}" />
<meta property="og:video:secure_url" content="{{.video}}" />
<meta property="og:video:type" content="video/{{.videoType}}" />
{{end}}
<!---->
{{end}}
<meta property="og:description" content="{{.description}}" />
<meta name="twitter:description" content="{{.description}}" />
{{end}}
<!----------->
{{ if eq .type "address" }}
<title>Nostr Address {{.naddr}}</title>
{{end}}
<!----------->
<style>
body {
padding: 3%;
}
#event {
margin: 5% 0;
white-space: pre-wrap;
word-wrap: break-word;
word-break: break-all;
font-family: monospace;
font-size: 130%;
}
</style>
</head>
<body>
<div>
open {{.type}} in {{range .clients}}<br />
&nbsp;&nbsp;<span style="color: #bbb"></span>
<a class="client" href="{{.url}}">{{.name}}</a> {{end}}
</div>
<div id="event">{{.eventJSON}}</div>
<div style="display: flex; justify-content: flex-end">
<span>
powered by <a href="https://git.fiatjaf.com/njump">njump</a>
</span>
</div>
<script>
const type = '{{.type}}'
let counts = []
let clients = document.querySelectorAll('.client')
for (let i = 0; i < clients.length; i++) {
let name = clients[i].innerText
let url = clients[i].href
let key = 'nj:' + type + ':' + name
let count = parseInt(localStorage.getItem(key) || 0)
clients[i].previousElementSibling.innerText = count
clients[i].addEventListener('click', () => {
localStorage.setItem(key, count + 1)
})
counts.push([count, name, url])
}
counts.sort((a, b) => b[0] - a[0])
let tailsum = counts.slice(1).reduce((acc, c) => acc + c[0], 0)
if (location.hash !== '#noredirect') {
if (counts[0][0] - tailsum > 10) {
location.href = counts[0][2]
}
}
</script>
</body>
</html>

View File

@@ -13,10 +13,14 @@ import (
"github.com/nbd-wtf/go-nostr/nip19"
)
//go:embed event.html
var eventHTML string
//go:embed raw.html
var rawHTML string
var tmpl = template.Must(template.New("event").Parse(eventHTML))
//go:embed profile.html
var profileHTML string
//go:embed raw.html
var noteHTML string
func render(w http.ResponseWriter, r *http.Request) {
fmt.Println(r.URL.Path, ":~", r.Header.Get("user-agent"))
@@ -52,7 +56,7 @@ func render(w http.ResponseWriter, r *http.Request) {
author := event
if event.Kind != 0 {
typ = "event"
typ = "note"
author, _ = getEvent(r.Context(), npub)
if event.Kind >= 30000 && event.Kind < 40000 {
@@ -158,7 +162,7 @@ func render(w http.ResponseWriter, r *http.Request) {
eventJSON, _ := json.MarshalIndent(event, "", " ")
params := map[string]any{
"createdAt": createdAt,
"createdAt": createdAt,
"clients": generateClientList(code, event),
"type": typ,
"title": title,
@@ -176,6 +180,13 @@ func render(w http.ResponseWriter, r *http.Request) {
"proxy": "https://" + hostname + "/proxy?src=",
"eventJSON": string(eventJSON),
}
templates := make(map[string]string)
templates["profile"] = profileHTML
templates["note"] = rawHTML
templates["address"] = rawHTML
var tmpl = template.Must(template.New("event").Parse(templates[typ]))
if err := tmpl.ExecuteTemplate(w, "event", params); err != nil {
http.Error(w, "error rendering: "+err.Error(), 500)
return