From c9e6b774f3c14b79639f6730d2a034fba7979953 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Tue, 6 May 2025 13:37:14 +0100 Subject: [PATCH] Add head-widgets --- docs/configuration.md | 38 ++++++++++++++++++++ docs/images/head-widgets-preview.png | Bin 0 -> 60005 bytes internal/glance/config.go | 21 +++++++---- internal/glance/glance.go | 14 ++++++++ internal/glance/static/css/site.css | 4 +-- internal/glance/static/css/widgets.css | 4 +++ internal/glance/templates/page-content.html | 24 ++++++++----- internal/glance/templates/widget-base.html | 4 +-- 8 files changed, 90 insertions(+), 19 deletions(-) create mode 100644 docs/images/head-widgets-preview.png diff --git a/docs/configuration.md b/docs/configuration.md index f0a616e..ce542da 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -520,6 +520,7 @@ pages: | center-vertically | boolean | no | false | | hide-desktop-navigation | boolean | no | false | | show-mobile-header | boolean | no | false | +| head-widgets | array | no | | | columns | array | yes | | #### `name` @@ -557,6 +558,43 @@ Preview: ![](images/mobile-header-preview.png) +#### `head-widgets` + +Head widgets will be shown at the top of the page, above the columns, and take up the combined width of all columns. You can specify any widget, though some will look better than others, such as the markets, RSS feed with `horizontal-cards` style, and videos widgets. Example: + +![](images/head-widgets-preview.png) + +```yaml +pages: + - name: Home + head-widgets: + - type: markets + hide-header: true + markets: + - symbol: SPY + name: S&P 500 + - symbol: BTC-USD + name: Bitcoin + - symbol: NVDA + name: NVIDIA + - symbol: AAPL + name: Apple + - symbol: MSFT + name: Microsoft + + columns: + - size: small + widgets: + - type: calendar + - size: full + widgets: + - type: hacker-news + - size: small + widgets: + - type: weather + location: London, United Kingdom +``` + ### Columns Columns are defined for each page using a `columns` property. There are two types of columns - `full` and `small`, which refers to their width. A small column takes up a fixed amount of width (300px) and a full column takes up the all of the remaining width. You can have up to 3 columns per page and you must have either 1 or 2 full columns. Example: diff --git a/docs/images/head-widgets-preview.png b/docs/images/head-widgets-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..3de52fc0f2b1a98938f5c10c5c152d6690ba22ae GIT binary patch literal 60005 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 Gga02a1T0Aa literal 0 HcmV?d00001 diff --git a/internal/glance/config.go b/internal/glance/config.go index 4cd7ba7..84714d0 100644 --- a/internal/glance/config.go +++ b/internal/glance/config.go @@ -73,13 +73,14 @@ type user struct { } type page struct { - Title string `yaml:"name"` - Slug string `yaml:"slug"` - Width string `yaml:"width"` - DesktopNavigationWidth string `yaml:"desktop-navigation-width"` - ShowMobileHeader bool `yaml:"show-mobile-header"` - HideDesktopNavigation bool `yaml:"hide-desktop-navigation"` - CenterVertically bool `yaml:"center-vertically"` + Title string `yaml:"name"` + Slug string `yaml:"slug"` + Width string `yaml:"width"` + DesktopNavigationWidth string `yaml:"desktop-navigation-width"` + ShowMobileHeader bool `yaml:"show-mobile-header"` + HideDesktopNavigation bool `yaml:"hide-desktop-navigation"` + CenterVertically bool `yaml:"center-vertically"` + HeadWidgets widgets `yaml:"head-widgets"` Columns []struct { Size string `yaml:"size"` Widgets widgets `yaml:"widgets"` @@ -107,6 +108,12 @@ func newConfigFromYAML(contents []byte) (*config, error) { } for p := range config.Pages { + for w := range config.Pages[p].HeadWidgets { + if err := config.Pages[p].HeadWidgets[w].initialize(); err != nil { + return nil, formatWidgetInitError(err, config.Pages[p].HeadWidgets[w]) + } + } + for c := range config.Pages[p].Columns { for w := range config.Pages[p].Columns[c].Widgets { if err := config.Pages[p].Columns[c].Widgets[w].initialize(); err != nil { diff --git a/internal/glance/glance.go b/internal/glance/glance.go index e6e7838..8db87e1 100644 --- a/internal/glance/glance.go +++ b/internal/glance/glance.go @@ -230,6 +230,20 @@ func (p *page) updateOutdatedWidgets() { var wg sync.WaitGroup context := context.Background() + for w := range p.HeadWidgets { + widget := p.HeadWidgets[w] + + if !widget.requiresUpdate(&now) { + continue + } + + wg.Add(1) + go func() { + defer wg.Done() + widget.update(context) + }() + } + for c := range p.Columns { for w := range p.Columns[c].Widgets { widget := p.Columns[c].Widgets[w] diff --git a/internal/glance/static/css/site.css b/internal/glance/static/css/site.css index d2fdfcd..fb06eb9 100644 --- a/internal/glance/static/css/site.css +++ b/internal/glance/static/css/site.css @@ -13,6 +13,7 @@ .page.content-ready > .page-content { display: block; + animation: pageContentEntrance .3s cubic-bezier(0.25, 1, 0.5, 1) backwards; } .page-column-small .size-title-dynamic { @@ -127,10 +128,9 @@ body { .page-columns { display: flex; gap: var(--widget-gap); - animation: pageColumnsEntrance .3s cubic-bezier(0.25, 1, 0.5, 1) backwards; } -@keyframes pageColumnsEntrance { +@keyframes pageContentEntrance { from { opacity: 0; transform: translateY(10px); diff --git a/internal/glance/static/css/widgets.css b/internal/glance/static/css/widgets.css index 9c9e8ee..a8d3be3 100644 --- a/internal/glance/static/css/widgets.css +++ b/internal/glance/static/css/widgets.css @@ -44,6 +44,10 @@ opacity: 0.6; } +.head-widgets { + margin-bottom: var(--widget-gap); +} + .widget-content { container-type: inline-size; container-name: widget; diff --git a/internal/glance/templates/page-content.html b/internal/glance/templates/page-content.html index c59d6e1..4cf67a7 100644 --- a/internal/glance/templates/page-content.html +++ b/internal/glance/templates/page-content.html @@ -2,12 +2,20 @@
{{ .Page.Title }}
{{ end }} -
-{{ range .Page.Columns }} -
- {{ range .Widgets }} - {{ .Render }} - {{ end }} -
-{{ end }} +{{ if .Page.HeadWidgets }} +
+ {{- range .Page.HeadWidgets }} + {{- .Render }} + {{- end }} +
+{{ end }} + +
+{{- range .Page.Columns }} +
+ {{- range .Widgets }} + {{- .Render }} + {{- end }} +
+{{- end }}
diff --git a/internal/glance/templates/widget-base.html b/internal/glance/templates/widget-base.html index b6fd9bc..019ff00 100644 --- a/internal/glance/templates/widget-base.html +++ b/internal/glance/templates/widget-base.html @@ -1,5 +1,5 @@ -
- {{- if not .HideHeader}} +
+ {{- if not .HideHeader }}
{{- if ne "" .TitleURL }}

{{ .Title }}