From 26d68ba3fc1794f054a23c548b4a6476deb64495 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sat, 29 Mar 2025 10:56:11 +0000 Subject: [PATCH] Allow extension widget to specify title-url --- docs/extensions.md | 3 +++ internal/glance/widget-extension.go | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/extensions.md b/docs/extensions.md index b1fa4fa..b6719c1 100644 --- a/docs/extensions.md +++ b/docs/extensions.md @@ -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` 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` Used to specify the content type that will be returned by the extension. If not provided, the content will be shown as plain text. diff --git a/internal/glance/widget-extension.go b/internal/glance/widget-extension.go index 3732eb8..c2b11f5 100644 --- a/internal/glance/widget-extension.go +++ b/internal/glance/widget-extension.go @@ -59,6 +59,10 @@ func (widget *extensionWidget) update(ctx context.Context) { widget.Title = extension.Title } + if widget.TitleURL == "" && extension.TitleURL != "" { + widget.TitleURL = extension.TitleURL + } + widget.cachedHTML = widget.renderTemplate(widget, extensionWidgetTemplate) } @@ -69,8 +73,8 @@ func (widget *extensionWidget) Render() template.HTML { type extensionType int const ( - extensionContentHTML extensionType = iota - extensionContentUnknown = iota + extensionContentHTML extensionType = iota + extensionContentUnknown ) var extensionStringToType = map[string]extensionType{ @@ -79,6 +83,7 @@ var extensionStringToType = map[string]extensionType{ const ( extensionHeaderTitle = "Widget-Title" + extensionHeaderTitleURL = "Widget-Title-URL" extensionHeaderContentType = "Widget-Content-Type" extensionHeaderContentFrameless = "Widget-Content-Frameless" ) @@ -93,6 +98,7 @@ type extensionRequestOptions struct { type extension struct { Title string + TitleURL string Content template.HTML Frameless bool } @@ -142,6 +148,10 @@ func fetchExtension(options extensionRequestOptions) (extension, error) { extension.Title = response.Header.Get(extensionHeaderTitle) } + if response.Header.Get(extensionHeaderTitleURL) != "" { + extension.TitleURL = response.Header.Get(extensionHeaderTitleURL) + } + contentType, ok := extensionStringToType[response.Header.Get(extensionHeaderContentType)] if !ok {