add two-week availability calendar
1 file changed, 68 insertions(+), 0 deletions(-)
changed files
A templates/calendar.go
@@ -0,0 +1,68 @@ +package templates + +import ( + "time" + + g "go.alanpearce.eu/gomponents" + c "go.alanpearce.eu/gomponents/components" + . "go.alanpearce.eu/gomponents/html" + + "go.alanpearce.eu/homestead/internal/calendar" +) + +func CalendarPage( + site SiteSettings, + page PageSettings, + cal calendar.Calendar, +) g.Node { + return Layout(site, page, Calendar(site, cal)) +} + +func Calendar(site SiteSettings, cal calendar.Calendar) g.Node { + past := true + dates, err := cal.Availability(2) + if err != nil { + panic(err) + } + + return Div(Class("calendar"), + H2(g.Text("Calendar")), + P(g.Text("Here you can roughly see when I'm busy in the next two weeks")), + Section(Class("calendar-grid"), + g.Map(dates, func(date *calendar.CalendarDate) g.Node { + if past && date.IsToday() { + past = false + } + + return Section(c.Classes{ + "day": true, + "past": past, + "today": date.IsToday(), + }, + H3( + Time( + DateTime(date.UTC().Format(time.DateOnly)), + g.Text(date.Format("Mon _2"))), + ), + g.Map(date.Events, func(e *calendar.Event) g.Node { + return Div( + Class("event"), + Time( + DateTime(e.StartTime.UTC().Format(time.DateOnly)), + g.Text(e.StartTime.Format("15:04")), + ), + g.Text("–"), + Time( + DateTime(e.EndTime.UTC().Format(time.DateOnly)), + g.Text(e.EndTime.Format("15:04")), + ), + ) + }), + ) + }), + ), + Footer( + P(g.Textf("Timezone is %s", site.Timezone.String())), + ), + ) +}