glance/internal/glance/widget-calendar.go
2025-02-09 17:47:20 +00:00

45 lines
1.1 KiB
Go

package glance
import (
"errors"
"html/template"
"time"
)
var calendarWidgetTemplate = mustParseTemplate("calendar.html", "widget-base.html")
var calendarWeekdaysToInt = map[string]time.Weekday{
"sunday": time.Sunday,
"monday": time.Monday,
"tuesday": time.Tuesday,
"wednesday": time.Wednesday,
"thursday": time.Thursday,
"friday": time.Friday,
"saturday": time.Saturday,
}
type calendarWidget struct {
widgetBase `yaml:",inline"`
FirstDayOfWeek string `yaml:"first-day-of-week"`
FirstDay int `yaml:"-"`
cachedHTML template.HTML `yaml:"-"`
}
func (widget *calendarWidget) initialize() error {
widget.withTitle("Calendar").withError(nil)
if widget.FirstDayOfWeek == "" {
widget.FirstDayOfWeek = "monday"
} else if _, ok := calendarWeekdaysToInt[widget.FirstDayOfWeek]; !ok {
return errors.New("invalid first day of week")
}
widget.FirstDay = int(calendarWeekdaysToInt[widget.FirstDayOfWeek])
widget.cachedHTML = widget.renderTemplate(widget, calendarWidgetTemplate)
return nil
}
func (widget *calendarWidget) Render() template.HTML {
return widget.cachedHTML
}