mirror of
https://github.com/aljazceru/njump.git
synced 2026-02-01 04:04:41 +01:00
Add support for calendar events (NIP-52)
This commit is contained in:
@@ -12,10 +12,51 @@ templ calendarEventTemplate(params CalendarPageParams) {
|
||||
params.Event,
|
||||
) {
|
||||
<h1 class="text-2xl">
|
||||
<span class="mr-2">{ params.CalendarEvent.Title }</span>
|
||||
{ params.CalendarEvent.Title }
|
||||
</h1>
|
||||
<div class="mb-4"></div>
|
||||
<!-- main content -->
|
||||
|
||||
<div class="flex flex-col sm:flex-row pb-6">
|
||||
if params.StartAtDate == params.EndAtDate {
|
||||
<div class="sm:w-[30%] sm:mr-4 mb-4 sm:mb-0">
|
||||
<div class="font-semibold text-sm ml-2">Date</div>
|
||||
<div class="p-2 bg-strongpink text-white rounded-md">
|
||||
<div>{ params.StartAtDate }</div>
|
||||
if params.StartAtTime != "" && params.EndAtTime != "" {
|
||||
<div class="text-sm">From { params.StartAtTime } to { params.EndAtTime }</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
} else {
|
||||
<div class="sm:w-1/4 sm:mr-4">
|
||||
<div class="font-semibold text-sm ml-2">Start date</div>
|
||||
<div class="p-2 bg-accent text-white rounded-md">
|
||||
<div>{ params.StartAtDate }</div>
|
||||
<div class="text-sm">{ params.StartAtTime }</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sm:w-1/4 sm:mr-4">
|
||||
<div class="font-semibold text-sm ml-2">End date</div>
|
||||
<div class="p-2 bg-accent text-white rounded-md">
|
||||
<div>{ params.EndAtDate }</div>
|
||||
<div class="text-sm">{ params.EndAtTime }</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<div class="flex-1">
|
||||
<div class="font-semibold text-sm ml-2">Location</div>
|
||||
<div class="p-2 bg-neutral-200 dark:bg-neutral-800 rounded-md">
|
||||
{ params.CalendarEvent.Locations[0] }
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-4">
|
||||
@templ.Raw(params.Content)
|
||||
</div>
|
||||
if params.CalendarEvent.Image != "" {
|
||||
<img class="w-full" src={ params.CalendarEvent.Image } />
|
||||
}
|
||||
|
||||
<div class="mb-4">
|
||||
for _, v := range params.CalendarEvent.Hashtags {
|
||||
<span class="mr-2 whitespace-nowrap rounded bg-neutral-200 px-2 dark:bg-neutral-700 dark:text-white">
|
||||
|
||||
1
data.go
1
data.go
@@ -145,6 +145,7 @@ func grabData(ctx context.Context, code string, isProfileSitemap bool) (*Data, e
|
||||
case 31922, 31923:
|
||||
data.templateId = CalendarEvent
|
||||
data.kind31922Or31923Metadata = &Kind31922Or31923Metadata{CalendarEvent: nip52.ParseCalendarEvent(*event)}
|
||||
data.content = event.Content
|
||||
default:
|
||||
data.templateId = Other
|
||||
}
|
||||
|
||||
10
pages.go
10
pages.go
@@ -239,10 +239,12 @@ type CalendarPageParams struct {
|
||||
BaseEventPageParams
|
||||
OpenGraphParams
|
||||
HeadParams
|
||||
Details DetailsParams
|
||||
|
||||
Content template.HTML
|
||||
|
||||
Details DetailsParams
|
||||
StartAtDate string
|
||||
StartAtTime string
|
||||
EndAtDate string
|
||||
EndAtTime string
|
||||
Content template.HTML
|
||||
CalendarEvent Kind31922Or31923Metadata
|
||||
Clients []ClientReference
|
||||
}
|
||||
|
||||
@@ -444,6 +444,33 @@ func renderEvent(w http.ResponseWriter, r *http.Request) {
|
||||
if data.kind31922Or31923Metadata.Image != "" {
|
||||
opengraph.Image = data.kind31922Or31923Metadata.Image
|
||||
}
|
||||
|
||||
// Fallback for deprecated 'name' field
|
||||
if data.kind31922Or31923Metadata.Title == "" {
|
||||
for _, tag := range data.event.Tags {
|
||||
if tag[0] == "name" {
|
||||
data.kind31922Or31923Metadata.Title = tag[1]
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var StartAtDate, StartAtTime string
|
||||
StartAtDate = data.kind31922Or31923Metadata.Start.Format("02 January 2006")
|
||||
if data.kind31922Or31923Metadata.Start.Hour() != 0 ||
|
||||
data.kind31922Or31923Metadata.Start.Minute() != 0 ||
|
||||
data.kind31922Or31923Metadata.Start.Second() != 0 {
|
||||
StartAtTime = data.kind31922Or31923Metadata.Start.Format("15:04")
|
||||
}
|
||||
|
||||
var EndAtDate, EndAtTime string
|
||||
EndAtDate = data.kind31922Or31923Metadata.End.Format("02 January 2006")
|
||||
if data.kind31922Or31923Metadata.End.Hour() != 0 ||
|
||||
data.kind31922Or31923Metadata.End.Minute() != 0 ||
|
||||
data.kind31922Or31923Metadata.End.Second() != 0 {
|
||||
EndAtTime = data.kind31922Or31923Metadata.End.Format("15:04")
|
||||
}
|
||||
|
||||
component = calendarEventTemplate(CalendarPageParams{
|
||||
BaseEventPageParams: baseEventPageParams,
|
||||
OpenGraphParams: opengraph,
|
||||
@@ -453,9 +480,14 @@ func renderEvent(w http.ResponseWriter, r *http.Request) {
|
||||
NeventNaked: data.neventNaked,
|
||||
},
|
||||
|
||||
Details: detailsData,
|
||||
Content: template.HTML(data.content),
|
||||
Clients: generateClientList(data.event.Kind, data.naddr),
|
||||
StartAtDate: StartAtDate,
|
||||
StartAtTime: StartAtTime,
|
||||
EndAtDate: EndAtDate,
|
||||
EndAtTime: EndAtTime,
|
||||
CalendarEvent: *data.kind31922Or31923Metadata,
|
||||
Details: detailsData,
|
||||
Content: template.HTML(data.content),
|
||||
Clients: generateClientList(data.event.Kind, data.naddr),
|
||||
})
|
||||
case Other:
|
||||
detailsData.HideDetails = false // always open this since we know nothing else about the event
|
||||
|
||||
Reference in New Issue
Block a user