diff --git a/internal/glance/templates/stack.html b/internal/glance/templates/stack.html new file mode 100644 index 00000000..77d4f3de --- /dev/null +++ b/internal/glance/templates/stack.html @@ -0,0 +1,9 @@ +{{ template "widget-base.html" . }} + +{{ define "widget-content-classes" }}widget-content-frameless{{ end }} + +{{ define "widget-content" }} + {{- range $i, $widget := .Widgets }} + {{- .Render -}} + {{- end }} +{{ end }} \ No newline at end of file diff --git a/internal/glance/widget-stack.go b/internal/glance/widget-stack.go new file mode 100644 index 00000000..bebae7d4 --- /dev/null +++ b/internal/glance/widget-stack.go @@ -0,0 +1,53 @@ +package glance + +import ( + "context" + "errors" + "html/template" + "time" +) + +var stackWidgetTemplate = mustParseTemplate("stack.html", "widget-base.html") + +type stackWidget struct { + widgetBase `yaml:",inline"` + containerWidgetBase `yaml:",inline"` +} + +func (widget *stackWidget) initialize() error { + widget.withError(nil) + widget.HideHeader = true + + for i := range widget.Widgets { + + if widget.Widgets[i].GetType() == "stack" { + return errors.New("nested stacks are not supported") + } else if widget.Widgets[i].GetType() == "group" { + return errors.New("groups inside of stacks are not supported") + } else if widget.Widgets[i].GetType() == "split-column" { + return errors.New("split columns inside of stacks are not supported") + } + } + + if err := widget.containerWidgetBase._initializeWidgets(); err != nil { + return err + } + + return nil +} + +func (widget *stackWidget) update(ctx context.Context) { + widget.containerWidgetBase._update(ctx) +} + +func (widget *stackWidget) setProviders(providers *widgetProviders) { + widget.containerWidgetBase._setProviders(providers) +} + +func (widget *stackWidget) requiresUpdate(now *time.Time) bool { + return widget.containerWidgetBase._requiresUpdate(now) +} + +func (widget *stackWidget) Render() template.HTML { + return widget.renderTemplate(widget, stackWidgetTemplate) +} diff --git a/internal/glance/widget.go b/internal/glance/widget.go index 832ba217..c9913307 100644 --- a/internal/glance/widget.go +++ b/internal/glance/widget.go @@ -83,6 +83,8 @@ func newWidget(widgetType string) (widget, error) { w = &torrentsWidget{} case "to-do": w = &todoWidget{} + case "stack": + w = &stackWidget{} case "trending-repositories": w = &trendingRepositoriesWidget{} default: