aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/caldav/public/calendar.html6
-rw-r--r--plugins/caldav/routes.go28
2 files changed, 28 insertions, 6 deletions
diff --git a/plugins/caldav/public/calendar.html b/plugins/caldav/public/calendar.html
index 6011f9e..1855f4f 100644
--- a/plugins/caldav/public/calendar.html
+++ b/plugins/caldav/public/calendar.html
@@ -7,6 +7,7 @@
</p>
<h2>Calendar: {{.Calendar.Name}}</h2>
+<h3>{{.Time.Format "January 2006"}}</h3>
{{if .Events}}
<ul>
@@ -22,4 +23,9 @@
<p>No events.</p>
{{end}}
+<p>
+ <a href="/calendar?month={{.PrevPage}}">Previous</a>
+ ยท <a href="/calendar?month={{.NextPage}}">Next</a>
+</p>
+
{{template "foot.html"}}
diff --git a/plugins/caldav/routes.go b/plugins/caldav/routes.go
index 7ff831d..51a9490 100644
--- a/plugins/caldav/routes.go
+++ b/plugins/caldav/routes.go
@@ -12,8 +12,10 @@ import (
type CalendarRenderData struct {
koushin.BaseRenderData
- Calendar *caldav.Calendar
- Events []caldav.CalendarObject
+ Time time.Time
+ Calendar *caldav.Calendar
+ Events []caldav.CalendarObject
+ PrevPage, NextPage string
}
type EventRenderData struct {
@@ -22,18 +24,29 @@ type EventRenderData struct {
Event *caldav.CalendarObject
}
+var monthPageLayout = "2006-01"
+
func registerRoutes(p *koushin.GoPlugin, u *url.URL) {
p.GET("/calendar", func(ctx *koushin.Context) error {
+ var start time.Time
+ if s := ctx.QueryParam("month"); s != "" {
+ var err error
+ start, err = time.Parse(monthPageLayout, s)
+ if err != nil {
+ return fmt.Errorf("failed to parse month: %v", err)
+ }
+ } else {
+ now := time.Now()
+ start = time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
+ }
+ end := start.AddDate(0, 1, 0)
+
// TODO: multi-calendar support
c, calendar, err := getCalendar(u, ctx.Session)
if err != nil {
return err
}
- now := time.Now()
- start := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
- end := start.AddDate(0, 1, 0)
-
query := caldav.CalendarQuery{
CompRequest: caldav.CalendarCompRequest{
Name: "VCALENDAR",
@@ -65,8 +78,11 @@ func registerRoutes(p *koushin.GoPlugin, u *url.URL) {
return ctx.Render(http.StatusOK, "calendar.html", &CalendarRenderData{
BaseRenderData: *koushin.NewBaseRenderData(ctx),
+ Time: start,
Calendar: calendar,
Events: events,
+ PrevPage: start.AddDate(0, -1, 0).Format(monthPageLayout),
+ NextPage: start.AddDate(0, 1, 0).Format(monthPageLayout),
})
})