iframe.go 839 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package widget
  2. import (
  3. "errors"
  4. "fmt"
  5. "html/template"
  6. "net/url"
  7. "github.com/glanceapp/glance/internal/assets"
  8. )
  9. type IFrame struct {
  10. widgetBase `yaml:",inline"`
  11. cachedHTML template.HTML `yaml:"-"`
  12. Source string `yaml:"source"`
  13. Height int `yaml:"height"`
  14. }
  15. func (widget *IFrame) Initialize() error {
  16. widget.withTitle("IFrame").withError(nil)
  17. if widget.Source == "" {
  18. return errors.New("missing source for iframe")
  19. }
  20. _, err := url.Parse(widget.Source)
  21. if err != nil {
  22. return fmt.Errorf("invalid source for iframe: %v", err)
  23. }
  24. if widget.Height == 50 {
  25. widget.Height = 300
  26. } else if widget.Height < 50 {
  27. widget.Height = 50
  28. }
  29. widget.cachedHTML = widget.render(widget, assets.IFrameTemplate)
  30. return nil
  31. }
  32. func (widget *IFrame) Render() template.HTML {
  33. return widget.cachedHTML
  34. }