Allow extension widget to specify title-url

This commit is contained in:
Svilen Markov 2025-03-29 10:56:11 +00:00
parent 958805a1fd
commit 26d68ba3fc
2 changed files with 15 additions and 2 deletions

View File

@ -26,6 +26,9 @@ If you know how to setup an HTTP server and a bit of HTML and CSS you're ready t
### `Widget-Title` ### `Widget-Title`
Used to specify the title of the widget. If not provided, the widget's title will be "Extension". Used to specify the title of the widget. If not provided, the widget's title will be "Extension".
### `Widget-Title-URL`
Used to specify the URL that will be opened when the widget's title is clicked. If the user has specified a `title-url` in their config, it will take precedence over this header.
### `Widget-Content-Type` ### `Widget-Content-Type`
Used to specify the content type that will be returned by the extension. If not provided, the content will be shown as plain text. Used to specify the content type that will be returned by the extension. If not provided, the content will be shown as plain text.

View File

@ -59,6 +59,10 @@ func (widget *extensionWidget) update(ctx context.Context) {
widget.Title = extension.Title widget.Title = extension.Title
} }
if widget.TitleURL == "" && extension.TitleURL != "" {
widget.TitleURL = extension.TitleURL
}
widget.cachedHTML = widget.renderTemplate(widget, extensionWidgetTemplate) widget.cachedHTML = widget.renderTemplate(widget, extensionWidgetTemplate)
} }
@ -70,7 +74,7 @@ type extensionType int
const ( const (
extensionContentHTML extensionType = iota extensionContentHTML extensionType = iota
extensionContentUnknown = iota extensionContentUnknown
) )
var extensionStringToType = map[string]extensionType{ var extensionStringToType = map[string]extensionType{
@ -79,6 +83,7 @@ var extensionStringToType = map[string]extensionType{
const ( const (
extensionHeaderTitle = "Widget-Title" extensionHeaderTitle = "Widget-Title"
extensionHeaderTitleURL = "Widget-Title-URL"
extensionHeaderContentType = "Widget-Content-Type" extensionHeaderContentType = "Widget-Content-Type"
extensionHeaderContentFrameless = "Widget-Content-Frameless" extensionHeaderContentFrameless = "Widget-Content-Frameless"
) )
@ -93,6 +98,7 @@ type extensionRequestOptions struct {
type extension struct { type extension struct {
Title string Title string
TitleURL string
Content template.HTML Content template.HTML
Frameless bool Frameless bool
} }
@ -142,6 +148,10 @@ func fetchExtension(options extensionRequestOptions) (extension, error) {
extension.Title = response.Header.Get(extensionHeaderTitle) extension.Title = response.Header.Get(extensionHeaderTitle)
} }
if response.Header.Get(extensionHeaderTitleURL) != "" {
extension.TitleURL = response.Header.Get(extensionHeaderTitleURL)
}
contentType, ok := extensionStringToType[response.Header.Get(extensionHeaderContentType)] contentType, ok := extensionStringToType[response.Header.Get(extensionHeaderContentType)]
if !ok { if !ok {