Add fallback-content-type property

This commit is contained in:
Svilen Markov 2024-10-16 10:52:57 +01:00
parent e5bb102ab1
commit 6f8e576c9b
3 changed files with 24 additions and 13 deletions

View File

@ -1006,12 +1006,16 @@ Display a widget provided by an external source (3rd party). If you want to lear
| Name | Type | Required | Default | | Name | Type | Required | Default |
| ---- | ---- | -------- | ------- | | ---- | ---- | -------- | ------- |
| url | string | yes | | | url | string | yes | |
| fallback-content-type | string | no | |
| allow-potentially-dangerous-html | boolean | no | false | | allow-potentially-dangerous-html | boolean | no | false |
| parameters | key & value | no | | | parameters | key & value | no | |
##### `url` ##### `url`
The URL of the extension. The URL of the extension.
##### `fallback-content-type`
Optionally specify the fallback content type of the extension if the URL does not return a valid `Widget-Content-Type` header. Currently the only supported value for this property is `html`.
##### `allow-potentially-dangerous-html` ##### `allow-potentially-dangerous-html`
Whether to allow the extension to display HTML. Whether to allow the extension to display HTML.

View File

@ -27,9 +27,10 @@ const (
) )
type ExtensionRequestOptions struct { type ExtensionRequestOptions struct {
URL string `yaml:"url"` URL string `yaml:"url"`
Parameters map[string]string `yaml:"parameters"` FallbackContentType string `yaml:"fallback-content-type"`
AllowHtml bool `yaml:"allow-potentially-dangerous-html"` Parameters map[string]string `yaml:"parameters"`
AllowHtml bool `yaml:"allow-potentially-dangerous-html"`
} }
type Extension struct { type Extension struct {
@ -88,7 +89,11 @@ func FetchExtension(options ExtensionRequestOptions) (Extension, error) {
contentType, ok := ExtensionStringToType[response.Header.Get(ExtensionHeaderContentType)] contentType, ok := ExtensionStringToType[response.Header.Get(ExtensionHeaderContentType)]
if !ok { if !ok {
contentType = ExtensionContentUnknown contentType, ok = ExtensionStringToType[options.FallbackContentType]
if !ok {
contentType = ExtensionContentUnknown
}
} }
extension.Content = convertExtensionContent(options, body, contentType) extension.Content = convertExtensionContent(options, body, contentType)

View File

@ -12,12 +12,13 @@ import (
) )
type Extension struct { type Extension struct {
widgetBase `yaml:",inline"` widgetBase `yaml:",inline"`
URL string `yaml:"url"` URL string `yaml:"url"`
Parameters map[string]string `yaml:"parameters"` FallbackContentType string `yaml:"fallback-content-type"`
AllowHtml bool `yaml:"allow-potentially-dangerous-html"` Parameters map[string]string `yaml:"parameters"`
Extension feed.Extension `yaml:"-"` AllowHtml bool `yaml:"allow-potentially-dangerous-html"`
cachedHTML template.HTML `yaml:"-"` Extension feed.Extension `yaml:"-"`
cachedHTML template.HTML `yaml:"-"`
} }
func (widget *Extension) Initialize() error { func (widget *Extension) Initialize() error {
@ -38,9 +39,10 @@ func (widget *Extension) Initialize() error {
func (widget *Extension) Update(ctx context.Context) { func (widget *Extension) Update(ctx context.Context) {
extension, err := feed.FetchExtension(feed.ExtensionRequestOptions{ extension, err := feed.FetchExtension(feed.ExtensionRequestOptions{
URL: widget.URL, URL: widget.URL,
Parameters: widget.Parameters, FallbackContentType: widget.FallbackContentType,
AllowHtml: widget.AllowHtml, Parameters: widget.Parameters,
AllowHtml: widget.AllowHtml,
}) })
widget.canContinueUpdateAfterHandlingErr(err) widget.canContinueUpdateAfterHandlingErr(err)