45 lines
1.1 KiB
Go
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
|
|
}
|