From 04c3afc850803e4bdfc8f4914a49602d0385974f Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sun, 8 Sep 2024 06:25:06 +0100 Subject: [PATCH 01/48] Document `center-vertically` property --- docs/configuration.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/configuration.md b/docs/configuration.md index d39c8b5..944019e 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -307,6 +307,7 @@ pages: | title | string | yes | | | slug | string | no | | | width | string | no | | +| center-vertically | boolean | no | false | | hide-desktop-navigation | boolean | no | false | | show-mobile-header | boolean | no | false | | columns | array | yes | | @@ -328,6 +329,8 @@ The maximum width of the page on desktop. Possible values are `slim` and `wide`. > > When using `slim`, the maximum number of columns allowed for that page is `2`. +#### `center-vertically` +When set to `true`, vertically centers the content on the page. Has no effect if the content is taller than the height of the viewport. #### `hide-desktop-navigation` Whether to show the navigation links at the top of the page on desktop. From 60f4183057f7091fc0290e04ba3be02d3c0aa388 Mon Sep 17 00:00:00 2001 From: micash Date: Sun, 8 Sep 2024 16:59:24 +0200 Subject: [PATCH 02/48] add codeberg releases --- docs/configuration.md | 8 +++-- internal/assets/static/icons/codeberg.svg | 1 + internal/feed/codeberg.go | 39 +++++++++++++++++++++++ internal/feed/releases.go | 3 ++ internal/widget/releases.go | 6 +++- 5 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 internal/assets/static/icons/codeberg.svg create mode 100644 internal/feed/codeberg.go diff --git a/docs/configuration.md b/docs/configuration.md index 944019e..fb119a5 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1114,7 +1114,7 @@ Whether to ignore invalid/self-signed certificates. Whether to open the link in the same or a new tab. ### Releases -Display a list of latest releases for specific repositories on Github, GitLab or Docker Hub. +Display a list of latest releases for specific repositories on Github, GitLab, Codeberg or Docker Hub. Example: @@ -1125,6 +1125,7 @@ Example: - go-gitea/gitea - jellyfin/jellyfin - glanceapp/glance + - codeberg:redict/redict - gitlab:fdroid/fdroidclient - dockerhub:gotify/server ``` @@ -1145,12 +1146,13 @@ Preview: | collapse-after | integer | no | 5 | ##### `repositories` -A list of repositores to fetch the latest release for. Only the name/repo is required, not the full URL. A prefix can be specified for repositories hosted elsewhere such as GitLab and Docker Hub. Example: +A list of repositores to fetch the latest release for. Only the name/repo is required, not the full URL. A prefix can be specified for repositories hosted elsewhere such as GitLab, Codeberg and Docker Hub. Example: ```yaml repositories: - gitlab:inkscape/inkscape - dockerhub:glanceapp/glance + - codeberg:redict/redict ``` Official images on Docker Hub can be specified by ommiting the owner: @@ -1172,7 +1174,7 @@ repositories: ##### `show-source-icon` -Shows an icon of the source (GitHub/GitLab/Docker Hub) next to the repository name when set to `true`. +Shows an icon of the source (GitHub/GitLab/Codeberg/Docker Hub) next to the repository name when set to `true`. ##### `token` Without authentication Github allows for up to 60 requests per hour. You can easily exceed this limit and start seeing errors if you're tracking lots of repositories or your cache time is low. To circumvent this you can [create a read only token from your Github account](https://github.com/settings/personal-access-tokens/new) and provide it here. diff --git a/internal/assets/static/icons/codeberg.svg b/internal/assets/static/icons/codeberg.svg new file mode 100644 index 0000000..a87790e --- /dev/null +++ b/internal/assets/static/icons/codeberg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/internal/feed/codeberg.go b/internal/feed/codeberg.go new file mode 100644 index 0000000..edd83d7 --- /dev/null +++ b/internal/feed/codeberg.go @@ -0,0 +1,39 @@ +package feed + +import ( + "fmt" + "net/http" +) + +type codebergReleaseResponseJson struct { + TagName string `json:"tag_name"` + PublishedAt string `json:"published_at"` + HtmlUrl string `json:"html_url"` +} + +func FetchLatestCodebergRelease(request *ReleaseRequest) (*AppRelease, error) { + httpRequest, err := http.NewRequest( + "GET", + fmt.Sprintf( + "https://codeberg.org/api/v1/repos/%s/releases/latest", + request.Repository, + ), + nil, + ) + if err != nil { + return nil, err + } + + response, err := decodeJsonFromRequest[codebergReleaseResponseJson](defaultClient, httpRequest) + + if err != nil { + return nil, err + } + return &AppRelease{ + Source: ReleaseSourceCodeberg, + Name: request.Repository, + Version: normalizeVersionFormat(response.TagName), + NotesUrl: response.HtmlUrl, + TimeReleased: parseRFC3339Time(response.PublishedAt), + }, nil +} diff --git a/internal/feed/releases.go b/internal/feed/releases.go index 516801e..596d1be 100644 --- a/internal/feed/releases.go +++ b/internal/feed/releases.go @@ -9,6 +9,7 @@ import ( type ReleaseSource string const ( + ReleaseSourceCodeberg ReleaseSource = "codeberg" ReleaseSourceGithub ReleaseSource = "github" ReleaseSourceGitlab ReleaseSource = "gitlab" ReleaseSourceDockerHub ReleaseSource = "dockerhub" @@ -57,6 +58,8 @@ func FetchLatestReleases(requests []*ReleaseRequest) (AppReleases, error) { func fetchLatestReleaseTask(request *ReleaseRequest) (*AppRelease, error) { switch request.Source { + case ReleaseSourceCodeberg: + return FetchLatestCodebergRelease(request) case ReleaseSourceGithub: return fetchLatestGithubRelease(request) case ReleaseSourceGitlab: diff --git a/internal/widget/releases.go b/internal/widget/releases.go index c7831cb..74b5af7 100644 --- a/internal/widget/releases.go +++ b/internal/widget/releases.go @@ -40,7 +40,6 @@ func (widget *Releases) Initialize() error { for _, repository := range widget.Repositories { parts := strings.SplitN(repository, ":", 2) var request *feed.ReleaseRequest - if len(parts) == 1 { request = &feed.ReleaseRequest{ Source: feed.ReleaseSourceGithub, @@ -65,6 +64,11 @@ func (widget *Releases) Initialize() error { Source: feed.ReleaseSourceDockerHub, Repository: parts[1], } + } else if parts[0] == string(feed.ReleaseSourceCodeberg) { + request = &feed.ReleaseRequest{ + Source: feed.ReleaseSourceCodeberg, + Repository: parts[1], + } } else { return errors.New("invalid repository source " + parts[0]) } From 1a05d6d03a04d165ef5633aae668de3a62539245 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sun, 8 Sep 2024 19:34:43 +0100 Subject: [PATCH 03/48] Don't export function --- internal/feed/codeberg.go | 2 +- internal/feed/releases.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/feed/codeberg.go b/internal/feed/codeberg.go index edd83d7..d5e7b7c 100644 --- a/internal/feed/codeberg.go +++ b/internal/feed/codeberg.go @@ -11,7 +11,7 @@ type codebergReleaseResponseJson struct { HtmlUrl string `json:"html_url"` } -func FetchLatestCodebergRelease(request *ReleaseRequest) (*AppRelease, error) { +func fetchLatestCodebergRelease(request *ReleaseRequest) (*AppRelease, error) { httpRequest, err := http.NewRequest( "GET", fmt.Sprintf( diff --git a/internal/feed/releases.go b/internal/feed/releases.go index 596d1be..b0cdc25 100644 --- a/internal/feed/releases.go +++ b/internal/feed/releases.go @@ -59,7 +59,7 @@ func FetchLatestReleases(requests []*ReleaseRequest) (AppReleases, error) { func fetchLatestReleaseTask(request *ReleaseRequest) (*AppRelease, error) { switch request.Source { case ReleaseSourceCodeberg: - return FetchLatestCodebergRelease(request) + return fetchLatestCodebergRelease(request) case ReleaseSourceGithub: return fetchLatestGithubRelease(request) case ReleaseSourceGitlab: From a68a907fa727984c35729aab60e133061e5f113e Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sun, 8 Sep 2024 19:35:01 +0100 Subject: [PATCH 04/48] Update SVG --- internal/assets/static/icons/codeberg.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/assets/static/icons/codeberg.svg b/internal/assets/static/icons/codeberg.svg index a87790e..3bb3c9f 100644 --- a/internal/assets/static/icons/codeberg.svg +++ b/internal/assets/static/icons/codeberg.svg @@ -1 +1 @@ - \ No newline at end of file + From bd9abf2e52ce07d54ef147d608aa21bad209308b Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sun, 8 Sep 2024 18:36:11 +0100 Subject: [PATCH 05/48] Fix mobile nav links wrapping --- internal/assets/static/main.css | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/assets/static/main.css b/internal/assets/static/main.css index c2a4acd..03b64c7 100644 --- a/internal/assets/static/main.css +++ b/internal/assets/static/main.css @@ -851,6 +851,7 @@ details[open] .summary::after { border-bottom: 2px solid transparent; transition: color .3s, border-color .3s; font-size: var(--font-size-h3); + flex-shrink: 0; } .nav-item:not(.nav-item-current):hover { From adef35049f6185aba68fe4b694c855b0af8191e3 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Tue, 10 Sep 2024 05:33:32 +0100 Subject: [PATCH 06/48] Add warning when pihole doesn't return expected data points --- internal/feed/pihole.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/internal/feed/pihole.go b/internal/feed/pihole.go index badfb1a..3849267 100644 --- a/internal/feed/pihole.go +++ b/internal/feed/pihole.go @@ -2,6 +2,7 @@ package feed import ( "errors" + "log/slog" "net/http" "sort" "strings" @@ -63,6 +64,11 @@ func FetchPiholeStats(instanceURL, token string) (*DNSStats, error) { // Pihole _should_ return data for the last 24 hours in a 10 minute interval, 6*24 = 144 if len(responseJson.QueriesSeries) != 144 || len(responseJson.BlockedSeries) != 144 { + slog.Warn( + "DNS stats for pihole: did not get expected 144 data points", + "len(queries)", len(responseJson.QueriesSeries), + "len(blocked)", len(responseJson.BlockedSeries), + ) return stats, nil } From db1ed9e257d2df866ee34d42c4c7f080aa58795d Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Tue, 10 Sep 2024 05:34:56 +0100 Subject: [PATCH 07/48] Fix & refactor adguard stats --- internal/feed/adguard.go | 57 +++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/internal/feed/adguard.go b/internal/feed/adguard.go index 440cb88..87182c3 100644 --- a/internal/feed/adguard.go +++ b/internal/feed/adguard.go @@ -31,10 +31,13 @@ func FetchAdguardStats(instanceURL, username, password string) (*DNSStats, error return nil, err } + var topBlockedDomainsCount = min(len(responseJson.TopBlockedDomains), 5) + stats := &DNSStats{ - TotalQueries: responseJson.TotalQueries, - BlockedQueries: responseJson.BlockedQueries, - ResponseTime: int(responseJson.ResponseTime * 1000), + TotalQueries: responseJson.TotalQueries, + BlockedQueries: responseJson.BlockedQueries, + ResponseTime: int(responseJson.ResponseTime * 1000), + TopBlockedDomains: make([]DNSStatsBlockedDomain, 0, topBlockedDomainsCount), } if stats.TotalQueries <= 0 { @@ -43,8 +46,6 @@ func FetchAdguardStats(instanceURL, username, password string) (*DNSStats, error stats.BlockedPercent = int(float64(responseJson.BlockedQueries) / float64(responseJson.TotalQueries) * 100) - var topBlockedDomainsCount = min(len(responseJson.TopBlockedDomains), 5) - for i := 0; i < topBlockedDomainsCount; i++ { domain := responseJson.TopBlockedDomains[i] var firstDomain string @@ -59,31 +60,51 @@ func FetchAdguardStats(instanceURL, username, password string) (*DNSStats, error } stats.TopBlockedDomains = append(stats.TopBlockedDomains, DNSStatsBlockedDomain{ - Domain: firstDomain, - PercentBlocked: int(float64(domain[firstDomain]) / float64(responseJson.BlockedQueries) * 100), + Domain: firstDomain, }) + + if stats.BlockedQueries > 0 { + stats.TopBlockedDomains[i].PercentBlocked = int(float64(domain[firstDomain]) / float64(responseJson.BlockedQueries) * 100) + } } - // Adguard _should_ return data for the last 24 hours in a 1 hour interval - if len(responseJson.QueriesSeries) != 24 || len(responseJson.BlockedSeries) != 24 { - return stats, nil + queriesSeries := responseJson.QueriesSeries + blockedSeries := responseJson.BlockedSeries + + const bars = 8 + const hoursSpan = 24 + const hoursPerBar int = hoursSpan / bars + + if len(queriesSeries) > hoursSpan { + queriesSeries = queriesSeries[len(queriesSeries)-hoursSpan:] + } else if len(queriesSeries) < hoursSpan { + queriesSeries = append(make([]int, hoursSpan-len(queriesSeries)), queriesSeries...) + } + + if len(blockedSeries) > hoursSpan { + blockedSeries = blockedSeries[len(blockedSeries)-hoursSpan:] + } else if len(blockedSeries) < hoursSpan { + blockedSeries = append(make([]int, hoursSpan-len(blockedSeries)), blockedSeries...) } maxQueriesInSeries := 0 - for i := 0; i < 8; i++ { + for i := 0; i < bars; i++ { queries := 0 blocked := 0 - for j := 0; j < 3; j++ { - queries += responseJson.QueriesSeries[i*3+j] - blocked += responseJson.BlockedSeries[i*3+j] + for j := 0; j < hoursPerBar; j++ { + queries += queriesSeries[i*hoursPerBar+j] + blocked += blockedSeries[i*hoursPerBar+j] } stats.Series[i] = DNSStatsSeries{ - Queries: queries, - Blocked: blocked, - PercentBlocked: int(float64(blocked) / float64(queries) * 100), + Queries: queries, + Blocked: blocked, + } + + if queries > 0 { + stats.Series[i].PercentBlocked = int(float64(blocked) / float64(queries) * 100) } if queries > maxQueriesInSeries { @@ -91,7 +112,7 @@ func FetchAdguardStats(instanceURL, username, password string) (*DNSStats, error } } - for i := 0; i < 8; i++ { + for i := 0; i < bars; i++ { stats.Series[i].PercentTotal = int(float64(stats.Series[i].Queries) / float64(maxQueriesInSeries) * 100) } From bae95a5e07119fb1e24907a4ed98449edafb7daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Veronika=20Bu=C5=A1ov=C3=A1?= Date: Sun, 15 Sep 2024 00:29:46 +0200 Subject: [PATCH 08/48] Add important details about the server.base-url property --- docs/configuration.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/configuration.md b/docs/configuration.md index fb119a5..116f8da 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -138,6 +138,10 @@ A number between 1 and 65,535, so long as that port isn't already used by anythi #### `base-url` The base URL that Glance is hosted under. No need to specify this unless you're using a reverse proxy and are hosting Glance under a directory. If that's the case then you can set this value to `/glance` or whatever the directory is called. Note that the forward slash (`/`) in the beginning is required unless you specify the full domain and path. +> [!IMPORTANT] +> You need to strip the `base-url` prefix before forwarding the request to the Glance server. +> In Caddy you can do this using [`handle_path`](https://caddyserver.com/docs/caddyfile/directives/handle_path) or [`uri strip_prefix`](https://caddyserver.com/docs/caddyfile/directives/uri). + #### `assets-path` The path to a directory that will be served by the server under the `/assets/` path. This is handy for widgets like the Monitor where you have to specify an icon URL and you want to self host all the icons rather than pointing to an external source. From 28167403a46b71de8a3eb94920ca0d5edcce8cf1 Mon Sep 17 00:00:00 2001 From: SimJunYou Date: Thu, 19 Sep 2024 17:43:43 +0800 Subject: [PATCH 09/48] Cover edge case when Pihole's privacy settings are enabled --- internal/feed/pihole.go | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/internal/feed/pihole.go b/internal/feed/pihole.go index 3849267..5a4b7f8 100644 --- a/internal/feed/pihole.go +++ b/internal/feed/pihole.go @@ -18,6 +18,17 @@ type piholeStatsResponse struct { DomainsBlocked int `json:"domains_being_blocked"` } +// If user has some level of privacy enabled on Pihole, `json:"top_ads"` is an empty array +// Use alternate struct without that field to avoid error when unmarshalling +type piholeStatsResponsePrivate struct { + TotalQueries int `json:"dns_queries_today"` + QueriesSeries map[int64]int `json:"domains_over_time"` + BlockedQueries int `json:"ads_blocked_today"` + BlockedSeries map[int64]int `json:"ads_over_time"` + BlockedPercentage float64 `json:"ads_percentage_today"` + DomainsBlocked int `json:"domains_being_blocked"` +} + func FetchPiholeStats(instanceURL, token string) (*DNSStats, error) { if token == "" { return nil, errors.New("missing API token") @@ -31,13 +42,27 @@ func FetchPiholeStats(instanceURL, token string) (*DNSStats, error) { if err != nil { return nil, err } - + responseJson, err := decodeJsonFromRequest[piholeStatsResponse](defaultClient, request) - + if err != nil { - return nil, err + // Refer to piholeStatsResponsePrivate above + responseJsonPriv, err := + decodeJsonFromRequest[piholeStatsResponsePrivate](defaultClient, request) + if err != nil { + return nil, err + } + + // Copy the results back to responseJson, leaving the TopBlockedDomains field empty + responseJson.TotalQueries = responseJsonPriv.TotalQueries + responseJson.QueriesSeries = responseJsonPriv.QueriesSeries + responseJson.BlockedQueries = responseJsonPriv.BlockedQueries + responseJson.BlockedSeries = responseJsonPriv.BlockedSeries + responseJson.BlockedPercentage = responseJsonPriv.BlockedPercentage + responseJson.TopBlockedDomains = make(map[string]int) + responseJson.DomainsBlocked = responseJsonPriv.DomainsBlocked } - + stats := &DNSStats{ TotalQueries: responseJson.TotalQueries, BlockedQueries: responseJson.BlockedQueries, From 672547cd07d0620ae988ec2ff96ac298bcb07778 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Mon, 30 Sep 2024 00:24:44 +0100 Subject: [PATCH 10/48] Switch to using custom type for pihole's top blocked domains --- internal/feed/pihole.go | 62 +++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/internal/feed/pihole.go b/internal/feed/pihole.go index 5a4b7f8..3c7f1b5 100644 --- a/internal/feed/pihole.go +++ b/internal/feed/pihole.go @@ -1,6 +1,7 @@ package feed import ( + "encoding/json" "errors" "log/slog" "net/http" @@ -9,24 +10,33 @@ import ( ) type piholeStatsResponse struct { - TotalQueries int `json:"dns_queries_today"` - QueriesSeries map[int64]int `json:"domains_over_time"` - BlockedQueries int `json:"ads_blocked_today"` - BlockedSeries map[int64]int `json:"ads_over_time"` - BlockedPercentage float64 `json:"ads_percentage_today"` - TopBlockedDomains map[string]int `json:"top_ads"` - DomainsBlocked int `json:"domains_being_blocked"` + TotalQueries int `json:"dns_queries_today"` + QueriesSeries map[int64]int `json:"domains_over_time"` + BlockedQueries int `json:"ads_blocked_today"` + BlockedSeries map[int64]int `json:"ads_over_time"` + BlockedPercentage float64 `json:"ads_percentage_today"` + TopBlockedDomains piholeTopBlockedDomains `json:"top_ads"` + DomainsBlocked int `json:"domains_being_blocked"` } // If user has some level of privacy enabled on Pihole, `json:"top_ads"` is an empty array -// Use alternate struct without that field to avoid error when unmarshalling -type piholeStatsResponsePrivate struct { - TotalQueries int `json:"dns_queries_today"` - QueriesSeries map[int64]int `json:"domains_over_time"` - BlockedQueries int `json:"ads_blocked_today"` - BlockedSeries map[int64]int `json:"ads_over_time"` - BlockedPercentage float64 `json:"ads_percentage_today"` - DomainsBlocked int `json:"domains_being_blocked"` +// Use custom unmarshal behavior to avoid not getting the rest of the valid data when unmarshalling +type piholeTopBlockedDomains map[string]int + +func (p *piholeTopBlockedDomains) UnmarshalJSON(data []byte) error { + // NOTE: do not change to piholeTopBlockedDomains type here or it will cause a stack overflow + // because of the UnmarshalJSON method getting called recursively + temp := make(map[string]int) + + err := json.Unmarshal(data, &temp) + + if err != nil { + *p = make(piholeTopBlockedDomains) + } else { + *p = temp + } + + return nil } func FetchPiholeStats(instanceURL, token string) (*DNSStats, error) { @@ -42,27 +52,13 @@ func FetchPiholeStats(instanceURL, token string) (*DNSStats, error) { if err != nil { return nil, err } - + responseJson, err := decodeJsonFromRequest[piholeStatsResponse](defaultClient, request) - + if err != nil { - // Refer to piholeStatsResponsePrivate above - responseJsonPriv, err := - decodeJsonFromRequest[piholeStatsResponsePrivate](defaultClient, request) - if err != nil { - return nil, err - } - - // Copy the results back to responseJson, leaving the TopBlockedDomains field empty - responseJson.TotalQueries = responseJsonPriv.TotalQueries - responseJson.QueriesSeries = responseJsonPriv.QueriesSeries - responseJson.BlockedQueries = responseJsonPriv.BlockedQueries - responseJson.BlockedSeries = responseJsonPriv.BlockedSeries - responseJson.BlockedPercentage = responseJsonPriv.BlockedPercentage - responseJson.TopBlockedDomains = make(map[string]int) - responseJson.DomainsBlocked = responseJsonPriv.DomainsBlocked + return nil, err } - + stats := &DNSStats{ TotalQueries: responseJson.TotalQueries, BlockedQueries: responseJson.BlockedQueries, From d5fa6424c16ec3722bea3ca40cb16ea3e5b60b2e Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Thu, 12 Sep 2024 22:18:42 +0100 Subject: [PATCH 11/48] Fix bookmark icons shrinking when text wraps --- internal/assets/static/main.css | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/assets/static/main.css b/internal/assets/static/main.css index 03b64c7..d5ab9bb 100644 --- a/internal/assets/static/main.css +++ b/internal/assets/static/main.css @@ -1050,6 +1050,7 @@ details[open] .summary::after { border-radius: var(--border-radius); padding: 0.5rem; opacity: 0.7; + flex-shrink: 0; } .bookmarks-icon { From b0c4d70628369f55977aca741e320c6a7dcb9bfb Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Fri, 27 Sep 2024 21:04:48 +0100 Subject: [PATCH 12/48] Fix bug with collapsible grids inside of group widget Also move utils to new file --- internal/assets/static/js/main.js | 37 +++++++----------------------- internal/assets/static/js/utils.js | 25 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 29 deletions(-) create mode 100644 internal/assets/static/js/utils.js diff --git a/internal/assets/static/js/main.js b/internal/assets/static/js/main.js index 228f57d..ffa7eb7 100644 --- a/internal/assets/static/js/main.js +++ b/internal/assets/static/js/main.js @@ -1,27 +1,5 @@ import { setupPopovers } from './popover.js'; - -function throttledDebounce(callback, maxDebounceTimes, debounceDelay) { - let debounceTimeout; - let timesDebounced = 0; - - return function () { - if (timesDebounced == maxDebounceTimes) { - clearTimeout(debounceTimeout); - timesDebounced = 0; - callback(); - return; - } - - clearTimeout(debounceTimeout); - timesDebounced++; - - debounceTimeout = setTimeout(() => { - timesDebounced = 0; - callback(); - }, debounceDelay); - }; -}; - +import { throttledDebounce, isElementVisible } from './utils.js'; async function fetchPageContent(pageData) { // TODO: handle non 200 status codes/time outs @@ -427,7 +405,7 @@ function setupCollapsibleGrids() { const button = attachExpandToggleButton(gridElement); - let cardsPerRow = 2; + let cardsPerRow; const resolveCollapsibleItems = () => { const hideItemsAfterIndex = cardsPerRow * collapseAfterRows; @@ -457,12 +435,11 @@ function setupCollapsibleGrids() { } }; - afterContentReady(() => { - cardsPerRow = getCardsPerRow(); - resolveCollapsibleItems(); - }); + const observer = new ResizeObserver(() => { + if (!isElementVisible(gridElement)) { + return; + } - window.addEventListener("resize", () => { const newCardsPerRow = getCardsPerRow(); if (cardsPerRow == newCardsPerRow) { @@ -472,6 +449,8 @@ function setupCollapsibleGrids() { cardsPerRow = newCardsPerRow; resolveCollapsibleItems(); }); + + afterContentReady(() => observer.observe(gridElement)); } } diff --git a/internal/assets/static/js/utils.js b/internal/assets/static/js/utils.js new file mode 100644 index 0000000..af02086 --- /dev/null +++ b/internal/assets/static/js/utils.js @@ -0,0 +1,25 @@ +export function throttledDebounce(callback, maxDebounceTimes, debounceDelay) { + let debounceTimeout; + let timesDebounced = 0; + + return function () { + if (timesDebounced == maxDebounceTimes) { + clearTimeout(debounceTimeout); + timesDebounced = 0; + callback(); + return; + } + + clearTimeout(debounceTimeout); + timesDebounced++; + + debounceTimeout = setTimeout(() => { + timesDebounced = 0; + callback(); + }, debounceDelay); + }; +}; + +export function isElementVisible(element) { + return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); +} From 9a36187333649ddd84d256e1b225a95456a25957 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sun, 29 Sep 2024 23:56:53 +0100 Subject: [PATCH 13/48] Add /api/healthz endpoint --- internal/glance/glance.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/glance/glance.go b/internal/glance/glance.go index d26745f..f47c66a 100644 --- a/internal/glance/glance.go +++ b/internal/glance/glance.go @@ -275,6 +275,9 @@ func (a *Application) Serve() error { mux.HandleFunc("GET /api/pages/{page}/content/{$}", a.HandlePageContentRequest) mux.HandleFunc("/api/widgets/{widget}/{path...}", a.HandleWidgetRequest) + mux.HandleFunc("GET /api/healthz", func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(http.StatusOK) + }) mux.Handle( fmt.Sprintf("GET /static/%s/{path...}", a.Config.Server.AssetsHash), From 7e38ab624a8a92c64c9fdf31cf57800277392b3c Mon Sep 17 00:00:00 2001 From: Anthony Date: Tue, 1 Oct 2024 08:59:11 +0200 Subject: [PATCH 14/48] Update configuration.md --- docs/configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/configuration.md b/docs/configuration.md index 116f8da..6f9d602 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -852,7 +852,7 @@ Either a value from the table below or a URL to a custom search engine. Use `{QU ##### `new-tab` When set to `true`, swaps the shortcuts for showing results in the same or new tab, defaulting to showing results in a new tab. -##### `new-tab` +##### `autofocus` When set to `true`, automatically focuses the search input on page load. ##### `bangs` From 4420d1df2c1a205c771c15b3ba0ad47efbfe4a15 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Tue, 1 Oct 2024 15:47:56 +0100 Subject: [PATCH 15/48] Bump versions & update dependencies --- Dockerfile | 2 +- go.mod | 8 ++++---- go.sum | 6 ++++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index e4019ba..48f214b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.22.5-alpine3.20 AS builder +FROM golang:1.23.1-alpine3.20 AS builder WORKDIR /app COPY . /app diff --git a/go.mod b/go.mod index 17aa4d4..6b39a2e 100644 --- a/go.mod +++ b/go.mod @@ -1,19 +1,19 @@ module github.com/glanceapp/glance -go 1.22.5 +go 1.23.1 require ( github.com/mmcdole/gofeed v1.3.0 - golang.org/x/text v0.16.0 + golang.org/x/text v0.18.0 gopkg.in/yaml.v3 v3.0.1 ) require ( - github.com/PuerkitoBio/goquery v1.9.2 // indirect + github.com/PuerkitoBio/goquery v1.10.0 // indirect github.com/andybalholm/cascadia v1.3.2 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/mmcdole/goxpp v1.1.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - golang.org/x/net v0.27.0 // indirect + golang.org/x/net v0.29.0 // indirect ) diff --git a/go.sum b/go.sum index 28cb1ae..ed770ea 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/PuerkitoBio/goquery v1.9.2 h1:4/wZksC3KgkQw7SQgkKotmKljk0M6V8TUvA8Wb4yPeE= github.com/PuerkitoBio/goquery v1.9.2/go.mod h1:GHPCaP0ODyyxqcNoFGYlAprUFH81NuRPd0GX3Zu2Mvk= +github.com/PuerkitoBio/goquery v1.10.0 h1:6fiXdLuUvYs2OJSvNRqlNPoBm6YABE226xrbavY5Wv4= +github.com/PuerkitoBio/goquery v1.10.0/go.mod h1:TjZZl68Q3eGHNBA8CWaxAN7rOU1EbDz3CWuolcO5Yu4= github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss= github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -35,6 +37,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -56,6 +60,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= From 8a8aaa752e5dc5ad2d1a478c0267dfab9732122b Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Wed, 2 Oct 2024 10:40:25 +0100 Subject: [PATCH 16/48] Fix edge case in weather widget If the temperature for the entire day is the same the range is 0, divide by 0 no bueno --- internal/feed/openmeteo.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/internal/feed/openmeteo.go b/internal/feed/openmeteo.go index 2a8dfa6..2bfa8f2 100644 --- a/internal/feed/openmeteo.go +++ b/internal/feed/openmeteo.go @@ -189,12 +189,19 @@ func FetchWeatherForPlace(place *PlaceJson, units string) (*Weather, error) { minT := slices.Min(temperatures) maxT := slices.Max(temperatures) + temperaturesRange := float64(maxT - minT) + for i := 0; i < 12; i++ { bars = append(bars, weatherColumn{ Temperature: temperatures[i], - Scale: float64(temperatures[i]-minT) / float64(maxT-minT), HasPrecipitation: precipitations[i], }) + + if temperaturesRange > 0 { + bars[i].Scale = float64(temperatures[i]-minT) / temperaturesRange + } else { + bars[i].Scale = 1 + } } } From e434fe08475e50c3166f6c1136c3519767ed74ce Mon Sep 17 00:00:00 2001 From: Eric Haughee Date: Thu, 3 Oct 2024 11:10:34 -0700 Subject: [PATCH 17/48] Add Markets sort-by: change to sort by percent change --- docs/configuration.md | 2 +- internal/feed/primitives.go | 6 ++++++ internal/widget/markets.go | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/configuration.md b/docs/configuration.md index 116f8da..242e9ea 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1539,7 +1539,7 @@ Preview: An array of markets for which to display information about. ##### `sort-by` -By default the markets are displayed in the order they were defined. You can customize their ordering by setting the `sort-by` property to `absolute-change` for descending order based on the stock's absolute price change. +By default the markets are displayed in the order they were defined. You can customize their ordering by setting the `sort-by` property to `change` for descending order based on the stock's percentage change (e.g. 1% would be sorted higher than -1%) or `absolute-change` for descending order based on the stock's absolute price change (e.g. -1% would be sorted higher than +0.5%). ###### Properties for each stock | Name | Type | Required | diff --git a/internal/feed/primitives.go b/internal/feed/primitives.go index 755b002..90a6a52 100644 --- a/internal/feed/primitives.go +++ b/internal/feed/primitives.go @@ -133,6 +133,12 @@ func (t Markets) SortByAbsChange() { }) } +func (t Markets) SortByChange() { + sort.Slice(t, func(i, j int) bool { + return t[i].PercentChange > t[j].PercentChange + }) +} + var weatherCodeTable = map[int]string{ 0: "Clear Sky", 1: "Mainly Clear", diff --git a/internal/widget/markets.go b/internal/widget/markets.go index 0d80973..27c431b 100644 --- a/internal/widget/markets.go +++ b/internal/widget/markets.go @@ -38,6 +38,10 @@ func (widget *Markets) Update(ctx context.Context) { markets.SortByAbsChange() } + if widget.Sort == "change" { + markets.SortByChange() + } + widget.Markets = markets } From ea3b8124fcb7367ed41395b26774abc69a0a94aa Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sun, 13 Oct 2024 17:08:52 +0100 Subject: [PATCH 18/48] Remove unused class --- internal/assets/templates/releases.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/assets/templates/releases.html b/internal/assets/templates/releases.html index 9bef5a0..7cd89f7 100644 --- a/internal/assets/templates/releases.html +++ b/internal/assets/templates/releases.html @@ -1,7 +1,7 @@ {{ template "widget-base.html" . }} {{ define "widget-content" }} -
    +
      {{ range .Releases }}
    • From 1fe7f61ec87e6b99a9b22924f61a9fdf21028e06 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sun, 13 Oct 2024 17:12:59 +0100 Subject: [PATCH 19/48] Change environment variables behavior * Can now be inserted anywhere in the string * Can now insert multiple environment variables in a single string * Can now be escaped if prefixed with \ --- internal/widget/fields.go | 45 ++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/internal/widget/fields.go b/internal/widget/fields.go index 9ae1eda..91e7671 100644 --- a/internal/widget/fields.go +++ b/internal/widget/fields.go @@ -13,7 +13,7 @@ import ( ) var HSLColorPattern = regexp.MustCompile(`^(?:hsla?\()?(\d{1,3})(?: |,)+(\d{1,3})%?(?: |,)+(\d{1,3})%?\)?$`) -var EnvFieldPattern = regexp.MustCompile(`^\${([A-Z_]+)}$`) +var EnvFieldPattern = regexp.MustCompile(`(^|.)\$\{([A-Z_]+)\}`) const ( HSLHueMax = 360 @@ -133,21 +133,42 @@ func (f *OptionalEnvString) UnmarshalYAML(node *yaml.Node) error { return err } - matches := EnvFieldPattern.FindStringSubmatch(value) + replaced := EnvFieldPattern.ReplaceAllStringFunc(value, func(whole string) string { + if err != nil { + return "" + } - if len(matches) != 2 { - *f = OptionalEnvString(value) + groups := EnvFieldPattern.FindStringSubmatch(whole) - return nil + if len(groups) != 3 { + return whole + } + + prefix, key := groups[1], groups[2] + + if prefix == `\` { + if len(whole) >= 2 { + return whole[1:] + } else { + return "" + } + } + + value, found := os.LookupEnv(key) + + if !found { + err = fmt.Errorf("environment variable %s not found", key) + return "" + } + + return prefix + value + }) + + if err != nil { + return err } - value, found := os.LookupEnv(matches[1]) - - if !found { - return fmt.Errorf("environment variable %s not found", matches[1]) - } - - *f = OptionalEnvString(value) + *f = OptionalEnvString(replaced) return nil } From 17c8071de921304bc28b31aface4f95220e67976 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sun, 13 Oct 2024 18:30:47 +0100 Subject: [PATCH 20/48] Extract group widget functionality into generic widget container --- internal/widget/container.go | 48 ++++++++++++++++++++++++++++++++++++ internal/widget/group.go | 36 ++++----------------------- 2 files changed, 53 insertions(+), 31 deletions(-) create mode 100644 internal/widget/container.go diff --git a/internal/widget/container.go b/internal/widget/container.go new file mode 100644 index 0000000..9113ea3 --- /dev/null +++ b/internal/widget/container.go @@ -0,0 +1,48 @@ +package widget + +import ( + "context" + "sync" + "time" +) + +type containerWidget struct { + Widgets Widgets `yaml:"widgets"` +} + +func (widget *containerWidget) Update(ctx context.Context) { + var wg sync.WaitGroup + now := time.Now() + + for w := range widget.Widgets { + widget := widget.Widgets[w] + + if !widget.RequiresUpdate(&now) { + continue + } + + wg.Add(1) + go func() { + defer wg.Done() + widget.Update(ctx) + }() + } + + wg.Wait() +} + +func (widget *containerWidget) SetProviders(providers *Providers) { + for i := range widget.Widgets { + widget.Widgets[i].SetProviders(providers) + } +} + +func (widget *containerWidget) RequiresUpdate(now *time.Time) bool { + for i := range widget.Widgets { + if widget.Widgets[i].RequiresUpdate(now) { + return true + } + } + + return false +} diff --git a/internal/widget/group.go b/internal/widget/group.go index 9a15510..c4bd101 100644 --- a/internal/widget/group.go +++ b/internal/widget/group.go @@ -4,15 +4,14 @@ import ( "context" "errors" "html/template" - "sync" "time" "github.com/glanceapp/glance/internal/assets" ) type Group struct { - widgetBase `yaml:",inline"` - Widgets Widgets `yaml:"widgets"` + widgetBase `yaml:",inline"` + containerWidget `yaml:",inline"` } func (widget *Group) Initialize() error { @@ -35,40 +34,15 @@ func (widget *Group) Initialize() error { } func (widget *Group) Update(ctx context.Context) { - var wg sync.WaitGroup - now := time.Now() - - for w := range widget.Widgets { - widget := widget.Widgets[w] - - if !widget.RequiresUpdate(&now) { - continue - } - - wg.Add(1) - go func() { - defer wg.Done() - widget.Update(ctx) - }() - } - - wg.Wait() + widget.containerWidget.Update(ctx) } func (widget *Group) SetProviders(providers *Providers) { - for i := range widget.Widgets { - widget.Widgets[i].SetProviders(providers) - } + widget.containerWidget.SetProviders(providers) } func (widget *Group) RequiresUpdate(now *time.Time) bool { - for i := range widget.Widgets { - if widget.Widgets[i].RequiresUpdate(now) { - return true - } - } - - return false + return widget.containerWidget.RequiresUpdate(now) } func (widget *Group) Render() template.HTML { From ab0b11cc92ea53a26f773d2f82ca92394ba9996f Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sun, 13 Oct 2024 18:33:26 +0100 Subject: [PATCH 21/48] Add masonry layout functionality --- internal/assets/static/js/masonry.js | 52 ++++++++++++++++++++++++++++ internal/assets/static/js/utils.js | 4 +++ internal/assets/static/main.css | 11 ++++++ 3 files changed, 67 insertions(+) create mode 100644 internal/assets/static/js/masonry.js diff --git a/internal/assets/static/js/masonry.js b/internal/assets/static/js/masonry.js new file mode 100644 index 0000000..f2e1535 --- /dev/null +++ b/internal/assets/static/js/masonry.js @@ -0,0 +1,52 @@ +import { clamp } from "./utils.js"; + +export function setupMasonries(options = {}, selector = ".masonry") { + options = { + minColumnWidth: 300, + maxColumns: 6, + ...options + }; + + const masonryContainers = document.querySelectorAll(selector); + + for (let i = 0; i < masonryContainers.length; i++) { + const container = masonryContainers[i]; + const items = Array.from(container.children); + let previousColumnsCount = 0; + + const render = function() { + const columnsCount = clamp( + Math.floor(container.offsetWidth / options.minColumnWidth), + 1, + Math.min(options.maxColumns, items.length) + ); + + if (columnsCount === previousColumnsCount) { + return; + } else { + container.textContent = ""; + previousColumnsCount = columnsCount; + } + + const columnsFragment = document.createDocumentFragment(); + + for (let i = 0; i < columnsCount; i++) { + const column = document.createElement("div"); + column.className = "masonry-column"; + columnsFragment.append(column); + } + + // poor man's masonry + // TODO: add an option that allows placing items in the + // shortest column instead of iterating the columns in order + for (let i = 0; i < items.length; i++) { + columnsFragment.children[i % columnsCount].appendChild(items[i]); + } + + container.append(columnsFragment); + }; + + const observer = new ResizeObserver(() => requestAnimationFrame(render)); + observer.observe(container); + } +} diff --git a/internal/assets/static/js/utils.js b/internal/assets/static/js/utils.js index af02086..ddf7e4f 100644 --- a/internal/assets/static/js/utils.js +++ b/internal/assets/static/js/utils.js @@ -23,3 +23,7 @@ export function throttledDebounce(callback, maxDebounceTimes, debounceDelay) { export function isElementVisible(element) { return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); } + +export function clamp(value, min, max) { + return Math.min(Math.max(value, min), max); +} diff --git a/internal/assets/static/main.css b/internal/assets/static/main.css index d5ab9bb..362e257 100644 --- a/internal/assets/static/main.css +++ b/internal/assets/static/main.css @@ -440,6 +440,17 @@ kbd:active { box-shadow: 0 0 0 0 var(--color-widget-background-highlight); } +.masonry { + display: flex; + gap: var(--widget-gap); +} + +.masonry-column { + flex: 1; + display: flex; + flex-direction: column; +} + .popover-container, [data-popover-html] { display: none; } From 3cfbe6585568e359bd49317147f29f1dc6c4e49b Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Tue, 15 Oct 2024 15:58:30 +0100 Subject: [PATCH 22/48] Make the first full column the primary on mobile rather than the last --- internal/assets/templates/page.html | 2 +- internal/glance/glance.go | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/internal/assets/templates/page.html b/internal/assets/templates/page.html index d2cee76..18d8b85 100644 --- a/internal/assets/templates/page.html +++ b/internal/assets/templates/page.html @@ -44,7 +44,7 @@
      {{ range $i, $column := .Page.Columns }} - + {{ end }}
      diff --git a/internal/glance/glance.go b/internal/glance/glance.go index f47c66a..2fd1ef9 100644 --- a/internal/glance/glance.go +++ b/internal/glance/glance.go @@ -75,6 +75,7 @@ type Page struct { HideDesktopNavigation bool `yaml:"hide-desktop-navigation"` CenterVertically bool `yaml:"center-vertically"` Columns []Column `yaml:"columns"` + PrimaryColumnIndex int8 `yaml:"-"` mu sync.Mutex } @@ -140,15 +141,24 @@ func NewApplication(config *Config) (*Application, error) { } for p := range config.Pages { - if config.Pages[p].Slug == "" { - config.Pages[p].Slug = titleToSlug(config.Pages[p].Title) + page := &config.Pages[p] + page.PrimaryColumnIndex = -1 + + if page.Slug == "" { + page.Slug = titleToSlug(page.Title) } - app.slugToPage[config.Pages[p].Slug] = &config.Pages[p] + app.slugToPage[page.Slug] = page - for c := range config.Pages[p].Columns { - for w := range config.Pages[p].Columns[c].Widgets { - widget := config.Pages[p].Columns[c].Widgets[w] + for c := range page.Columns { + column := &page.Columns[c] + + if page.PrimaryColumnIndex == -1 && column.Size == "full" { + page.PrimaryColumnIndex = int8(c) + } + + for w := range column.Widgets { + widget := column.Widgets[w] app.widgetByID[widget.GetID()] = widget widget.SetProviders(providers) From 13700fe2b2524c53acd21fe00152aef3aae7769c Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:04:22 +0100 Subject: [PATCH 23/48] Change masonry options source --- internal/assets/static/js/masonry.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/internal/assets/static/js/masonry.js b/internal/assets/static/js/masonry.js index f2e1535..45680f4 100644 --- a/internal/assets/static/js/masonry.js +++ b/internal/assets/static/js/masonry.js @@ -1,16 +1,17 @@ + import { clamp } from "./utils.js"; -export function setupMasonries(options = {}, selector = ".masonry") { - options = { - minColumnWidth: 300, - maxColumns: 6, - ...options - }; - - const masonryContainers = document.querySelectorAll(selector); +export function setupMasonries() { + const masonryContainers = document.getElementsByClassName("masonry"); for (let i = 0; i < masonryContainers.length; i++) { const container = masonryContainers[i]; + + const options = { + minColumnWidth: container.dataset.minColumnWidth || 330, + maxColumns: container.dataset.maxColumns || 6, + }; + const items = Array.from(container.children); let previousColumnsCount = 0; From e5bb102ab184b3bd3911d6c3526fee17d806c839 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Tue, 15 Oct 2024 18:05:29 +0100 Subject: [PATCH 24/48] Add split-column widget --- docs/configuration.md | 60 +++++++++++++++++++- docs/images/split-column-widget-preview.png | Bin 0 -> 335405 bytes internal/assets/static/js/main.js | 2 + internal/assets/templates.go | 1 + internal/assets/templates/split-column.html | 11 ++++ internal/widget/container.go | 8 +-- internal/widget/group.go | 14 +++-- internal/widget/split-column.go | 42 ++++++++++++++ internal/widget/widget.go | 2 + 9 files changed, 129 insertions(+), 11 deletions(-) create mode 100644 docs/images/split-column-widget-preview.png create mode 100644 internal/assets/templates/split-column.html create mode 100644 internal/widget/split-column.go diff --git a/docs/configuration.md b/docs/configuration.md index 242e9ea..d5856ca 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -15,6 +15,7 @@ - [Reddit](#reddit) - [Search](#search-widget) - [Group](#group) + - [Split Column](#split-column) - [Extension](#extension) - [Weather](#weather) - [Monitor](#monitor) @@ -890,7 +891,7 @@ url: https://www.amazon.com/s?k={QUERY} ``` ### Group -Group multiple widgets into one using tabs. Widgets are defined using a `widgets` property exactly as you would on a page column. The only limitation is that you cannot place a group widget within a group widget. +Group multiple widgets into one using tabs. Widgets are defined using a `widgets` property exactly as you would on a page column. The only limitation is that you cannot place a group widget or a split column widget within a group widget. Example: @@ -933,6 +934,63 @@ Example: <<: *shared-properties ``` +### Split Column +Splits a full sized column in half, allowing you to place widgets side by side. This is converted to a single column on mobile devices or if not enough width is available. Widgets are defined using a `widgets` property exactly as you would on a page column. + +Example of a full page with an effective 4 column layout using two split column widgets inside of two full sized columns: + +
      +View config + +```yaml +shared: + - &reddit-props + type: reddit + collapse-after: 4 + show-thumbnails: true + +pages: + - name: Split Column Demo + width: wide + columns: + - size: full + widgets: + - type: split-column + widgets: + - subreddit: gaming + <<: *reddit-props + - subreddit: worldnews + <<: *reddit-props + - subreddit: lifeprotips + <<: *reddit-props + show-thumbnails: false + - subreddit: askreddit + <<: *reddit-props + show-thumbnails: false + + - size: full + widgets: + - type: split-column + widgets: + - subreddit: todayilearned + <<: *reddit-props + collapse-after: 2 + - subreddit: aww + <<: *reddit-props + - subreddit: science + <<: *reddit-props + - subreddit: showerthoughts + <<: *reddit-props + show-thumbnails: false +``` +
      + +
      + +Preview: + +![](images/split-column-widget-preview.png) + ### Extension Display a widget provided by an external source (3rd party). If you want to learn more about developing extensions, checkout the [extensions documentation](extensions.md) (WIP). diff --git a/docs/images/split-column-widget-preview.png b/docs/images/split-column-widget-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..f1931f82d03cd84aeb3fc8c5aa01d2409fbf5448 GIT binary patch literal 335405 zcmeEtWl&u2mnOj-fHIjq0mNOI-df%VFH-le(m_k9l7RiW< zsJiPPKO=n8-Swb-$@MKxJCSeGwwh&to}|PC$bA{`cXa4;Z2J%kqDlMdh(*(RYcV+g z^+jRph{w>Fc>sODusa^yt?ZEkg_jND()>6Qh@TB5vnuLHs=;Xm(cAZ7e zKAif{J z1oQmk92nFfpxku5-83M#K9M0!LTSsRhZS|Oc2(vSTkFO$^Dvg|KjZ?D5ItbfF_0{? z_zi~J)K2mo6Z|;J*@WwfPqmih-vVU*NAbEj7W#UuX=is5iOZl~t^d5@Jl-msER7jVhi|SsukUq|`+C1;;C0e4NcyTL zFTbj$p~op8;Bt3nFTMEwC-&!NcI05u%_!#9ySsA}maeBn z{)1q@yRcJJwhShn#^!CBI_ufPuKTPn4ULV@^L~Oqtd@4u445OgVgdXsi`yA;NEU-= z+$)G?FI}&2e0pa-aj`tXUQR2@(V76 zv&L=3@sY*%9176+`hu|GxbEZk947qqmSp{YOnB;`zvluXJY=8l8h*}s@l1u_O%O}h zH}t-ngO&G(NAI@IoB4ZLyU1SZ=PZQ1#!cd$(YfHpS&tQ%B0HJgb~*}bvb|0_@N+ym}2|hZ$I`-$EN7v0_ybwzpBki!M?zq_|eZAv9ZHLJUw15DI%Utrk z_sd?c-^=f;F9E_UkUPHip>emeJ4qE(R1n{A-WMpr;#@oDK3;ln8a3CPVdI)m>;Dbm zmWk#KP9Cw3_v5c7gRuba6^Ctzur8`!A5IIb>DAPRZ>1)emRfBW+1v(xQXeMfmz0Dl zgl%qa8u58YrW}X(curvT;<&A;o~(7CaP3}uZroQkHMXiaBgerXyRk_Xge!%FZT9wl zR*lYZAO2g>GM=RLX^;~wJ%S&Po=m`3EvTJ;Oz)=Y^(KObgoPo>_r%74rNV&uI1XC8 zK*`P0-v0t(XoCQw^a824F-s(rxX^sslIH3^PZ+j!NHzHTU_T}v6|(Yp^S;`jgy4posl6i3EMP>d!TLG`Uw=Q=yLSN4b z81G4Hlne3$TF;jCDtLA1e=+F6IG1?;){T}1FRDeX?nhf&c@04>rI18eo`9k+AF8&t zHnmDG7;NvJ0hR`HLWFA?iVKdyyDr5}9Hz|HUzz!*0=0ix?>ZR?{wA)s7|(G%nwz`< zowYk|5A-to2$HZorwFIduB>=(biZ+v9GfhVvaz;4ZQe%Lgn~GI&rb+!#>e)eu&_YD z)CF&Le!j_imY&at%`P5dk;9f8nJn}ex@&}kUb-vhz zH29tcy~3y%*43OV39oQ>Z17BU^mT5yzx?Lz%A3yn5hC?c{cMF=L*o{L>_y6S>Ck-;G!oRWzD328x^3mL7sgpV+e{0Q_H% zkL$)ekAa}EaVr}eLGQb>rmknVvoa$NOvIVFIlQra8#Huu+m+_GUlFGF#&cgGU_5bv z9RR)G`gM$VubbZ0^}4$K;v&xPiGmNMkuGwpSU$^glho_@15b?$9;ZFh8(W7ycx8B= zoUW%`zn(~!`_H}?Ne~-@XM}>m5W0)%kHYWMW`(NTAnSJStS^wHfsTUMV;p!DSn+uJ zdT�mse-`fw}9+N&Bu+r^)yAalNE25(kDF&+i{zGmH(}!-3{zinTB@qV48@)vn)F z+)=W;KHLVe&CaI_5UzxvgP|W+mR_x~1P77NNyB{Sb!C@h8f^ljSFvuo@~WTk0rcH; z?$^ifAOCj8>FEC%?s^#;bm1W~o^-W)dAg6nW3sljm7~P^EO7qw$4wVi#!V_nLJsK2 z{1@;c`g|N+O$AM(>oETvK_^`38g|*#|FMQi-{O?v{3`L+qsfD*(HPSH22#Wn)c=-+ ziuw_=LC2N9^DRu#k_6>)KiNv%MvojfslWVK6fql*C)SO48IVET2n5anzQHa8P!6|N zvHyBp57tT*{FBs_*j^Ugwu_Meb{%T*ge%)|2#YKCKXmfD zkWT$Rb%_c7Z#|Q9q@?~c+Y~ykar#HXsyO`r7yefJ|1o*2<&NxvnA;lL+ou2-u$lzw zj(@CKK9>%5K_V)((x9scAc9EF;ZuxhXyl;@`i~3Q%A=2ndDGpH@QM1yb9aP2Gz?+& zTxOyEATlzN-VGK~23}=|`gc5C90`zA|1mkshh!o{5Qu@L^NwC(xOE$1N5#W9(8oB3 ze2@xibFa#j1jWYAt-rp^FWL?Ogg4i`x~?CN zSnQT>_y8gCXmKCO(iKY3N!MO`Q9e%|_}gPPUJg;*wj~k#&RTzptvV8ZTzm~+TKB#j z)X`1_FP!7)p_osa{pdZYIrn>PI_+Uy{e9bcTerm&F@FZTVUY4V`Nt}UXdo}(;Bfl!Ha~({R5j)&d%G=tua)re zKlbsrFO=l^;^6t?8f^t(yzn!6OiF0H4EjAGO487?iXx82_Clc)aQvLqD#$ljgTvQt zw4UY51mX>xwR<~xjdC_IYS-%~7QVdX;2S)_ptVatGfIHY&iaH)K#$%p<33=P!Q$Pn zyZ$cG1r|nDe}G7ONPtp{OI|Mn^iZ{E%o0DXQ+A+yk1Rn}N1Py|Ni_~OKtFgQOv}h0 zPJ(Try|)!TGBmRnIWl5uG6><8S+gcQwwInmxrYsN-~*im;;3WYs#8mQJFvFaL)9U; zS%$R7aKC``nceLWDZZxnveV~uN(r$6-@qH!_DyOS4rZc6x~N4!e^i>-_v+G8x53Zh z{h@fwy3jB&F(`&__})%D_jYG}=|qO%ck7fWfssih?{||@pzU-E#(XdH^)E=@#W z;C+4ovD7}n7XIzvy74tc?$`P)6HCjFsb&PvTIE+XZP%D?!b_m5wmtL+!fTA~oc{@93k| zD{g+mHJYI}xmCbzQHaUv2zsKwnp|Do9814zpa@np@-K?CsM(%#jjsHjP763WIvR`X zb@nAxQ!|7j5B?2YtkTu*^p@w#=DS!^w_^Q7s?%i8YMMV4G)DOGIT_RJyIn z)&rsg-J9LCSLqTJSJ%rmAGdd?(IbrHF`+KRB$z-eL1>9v6c|E zc?U)C1On&>6bhN>R5xPAImA1Tj`mvE6)bIaYy4jA`6{gFE7eoYS_%ppIy)ziu0`U5 z=|U#4a>y_6)!$6Vqr?fnoIA=S8cIM4h5d_~(gGPcr6y<37yN6++&4Fg$dR_c9`)i;GeC z&ONTxRgmEy@#-21pBi0tF+rn#&BCHrkK0OvnsujD>kpfb?;72*jiKcHlB#|;N7j|g-`J}B{((Jorn ze~T5>mro1mh+ZOt>`eRWfxL(;WEsLt{unjb^ol*eZdWM;Ucv&GC~|2 zj3W*G-sN&Y&zBHrMrL5p?tWiu61E~k12Ye$*$>G0xViRLbU&!b-Jgl2+SXc|hl67y zc5lLZ#aq?_vC)MLVwF^aBwr|%B}<~A7uhLCz|sMi<6Q(fDDM)oRoOBS;l;p+ef5nb zA$v-svb{#HCCI||;)r<}T=d3?znwqlSYJ6aANzGGARP^Yf8Y6U+#^B*HKszNgQQm?3`0)RFRe zK)p*1;dCTiLeFhgPPN;Nd9 zsKG%$DeV!q+KmM1z%vPXu^z@{HmMw%X@iAefe1uK}%P{40?X%S>bqgz9;O z5V@kn>+6^vLqzp3t$H}(_Cqgl3qCZz`6XhW7DQ&sM|0U?K?K3_(#BFg#E2OuKT^l0 z%d6~3bSWT4<*LVGJBu;p0@g$uWQJ{!GYzgr-Tx*f6#uN{~dZ!Mzo4|Z=K}ndZHAMS)*MN}5FMgNT^9J;#$lDt|9r62Z z6sMeDPZ7zldf4p!Lu%lA>;_|-$l9JEv{-d-x{MAVzPjXexcuq;W-5uYQGAv&R{dbB z3tt1orJim}OKj(>+&1950d!DpL&EzwOEa0i)dCrE?gIKtO@QmG>8|JT*QYeM^;P)A zCmNx1j|u}x#L>)J2xMj+wKqdhp{vVchNYrPyFnqbaF{!b7WZd2#D{$MFaj-%;)vsa ziS^7?@*^1E(fRTrB0uVmalq zx8$6XXFWk`Q0Kku+>ps$E_5h7<_2Vw#~W_)NmB0OxK(~pL?3@S97FO75eF}bw-~z5 zJoDNe2sFM!3-4H6&8DCb!^KrQOW()t5sg=y9_n&G=Sk@;3iKDSSK(Zcc-d4iCg>8T z1+n2Iay5hoDe~Yedo(KxTns(OujD!o@Pbt#n>E6QTQIG<+=3LSZ?|TDd~PQbCl&NO zn>qSQ12pV0c7M4@dqq~Z848o~p^L}6p2=c@@s#);_XMK*TQEv!T96#8A_Cer0rl%j zYitBPZDe6V4YFM&VU$zv=w1~+ekdn1+F75B8K&D*wd@9> zFgr^*3BzQa#zJZWbM1uF!+@%)ui*<>TzZ?apI4?l*ero)M)9$D^r$tLzej~LZMf0m z(hOcqTwMXj$zvl~EoCRe$3Dld$lo|1pwoC)a*V|jU$LEi_24DOvYd|d}ZTg;q-$&2Slx1KA= z8O4^+5;BEiNrja)ZgcSPwgY1(j_ZnxN#G?pk={UfFl#HV!&tfYf6GU>yYZGLwu}4-z=08p#a}zn?MYLM^oJja`{Q;$n}QPPk)i zQwBr$gN-hsG3`$mq()!}+#-#S3taLqU7)j#^-{Z6R!Wh{v-|=K!o3SXK!x;{s0j!j zsVp#*hh z&2n|mVMqfi2hkoWcm{iuhzl+YkOiKeYNepr;f9X$b`QG}gaph0rQHC_E(nZWA8~j0 zp0%3{>ag}_hhd7cTjfLPgi98B%jvg$^^xI3hcpRhAc+l2#}yHxBP55t?RstCrwAJu zhNRy{gv{9W<%(t1)or!4i-3&oqBMQ9xxtQCygtLVc&0hP8^2K{)6+RI$Bys z=wp=4O6xV7iKNd%&mAwr&G*0KWD}qMls5lSJK=ZT$u}RZ0e9ith#?gh2OVd3YMO@c zZ+5?PNZLOL4uUAgQ=YtAA+HJs(j{WAn{o0uS-O^rJ$93#4)A@@XjcP>BIePhi~8%O z*c`O`JZAlAdF5HLg+R&b@R^K4m;m`UNG+&*^ruL>VwYw5Ck2zOV1A15{7?Ra>;K`> z{@?hrDV|t-*n~ZgKSEVhN;S(UwpuRc7pi2Xh9uxJe?BLO1KvQu>vt^O;LblgfsnE` za*GFDS!bGKV^blMnjq<|=nvIDpO&%R{?QQa4knv8S*;p>bO{ZsvLW~m`QqZ=8-Q73 z#n}J475TqDr3Sa2c^gL@>?94@Q%j359cyd6-3 zNF;`vDN0cPNHQBadN?TzB3X_CRwleBPi|CS&>@Roa!OF@*!%DJ;>6VrOx02TsUnP(qEgzD;B)GNk1cxVGz1*ksxx z<(n?!fshVdGPm<6Q9&OtzhP^c`1$b_{RlN`-Gu};D^95k^Kb~ByKfJmHOz7f<>D8A zWc)3|;X*JNT9~=%-u&^SE*_aAAL`&a>lROi34cuu*_o*jf=z1sX&jGC%u8ZQ@Hgo449rvyNkc=KflW0D!o$Koqtj+@h`=}o8d}KvgqO}WX&&S{4!t-ktkhjb zgW9V=6c$KYfCbyLodAV2hf0AA9kD_gU00(u=x7UiU)pFyl$s$;`S9=n{|JvxEMS^d z3?-tKynzMf^~L67|KudWl$RK(XHGL!hAN2>gccM1aplHc062&pAua`vFkQ+q@JDay z{BL*(&T^aVuOq1-je+*Ay7I=>rHL77o~gMdbKZ)DQSsVS>vE;PYx8L=lcSc(oGpT1gEGGaL@lUTDbF*B{%8m&1Xlfs7C#<{ysry(mX z2y16Vf3dH&BF`qm9hDh@^7bnu*0hWwjmbgu)avr<)bAz}M>$9vkiBRo{nz8O2!xX- zLujZ-+)g7qGwQm1r@>?s`5>>>fQHg*%vH|QSZQ9zh13ZzaFA)7k(%>CPA%+}QGK&O zXaIi>!4siPG8EhTeX%(X|GT)T)-3}4*h`1lo(tm|U~zkX;_TF0Ch#74u@?jV;Yj%r zeL-jIg`%t01OrI!`+It#nBC5ciwi|E%$RN!s427X$9&pgn9dO(@L^=AJ-kUUb=C#@ z(|#%m1X|+$t@~SIJMw|>Vm|9jdueOyr&MwjY69sH8P4E7Hi4hQeZh=)7aA%!1fdO@ zYg?KiAjgosQCy=*(g0SWHQ|L`D2>_xy4+jw9#(m^=}j#aSNEb~qn>ax5oR=EY-7Qn z9?BBNi6MraGF(N3d_Q$HLv4vuS<%ABUq059HCoj)>CL-Ba49c?RmvDRNMTc4T3(j^ z_z@%D(9Ny7*k+cqA)hfVO(Q&?hli)IthM_x&+vPfpM#~l`@t4fBIQyvg)EjFK2?SV zZw`fKDisW4X{;dtOOJdzgto#;n?7ZRqai<^ktl{OdK%K!@|w3-1C4#j>9Re*s-Dl1 zu^>Y%k3=p%D%-lfcMs5D(^A+7OsJ{)p(yZYPgdMg&`xBS%_jrp1!hW%M?qxYq^Tt( zjWa3|$7m-bk>5d6fH;_S6_;ly?;#M33;O}z7JxW|X=As#(quy;Zl;y29AV0qf(7g0 zPC4deOPv%<^(@5FhlC3HSQsKrKkVeM%HXxJE4C6^NW=xN#pSOhVEb*GY^ygB(_Kq5 z#*9*lHZD{Lj|(6)S8SC|NfB%=Ui!g#(<9GF`mQ zK5;mUlgQNlI40j&nOJTV`jlR08{QF5#a{S+k<98thD2wMG5k}GVfUUUd~&!EKqOfz z)bj%*f}8geM-0dI5oU^Z&RV=nwG$z$tS;}`{GFw(jVIDxSyp9lWpzKKMj8TwrGkNWXf(OuVl!7R#BGO*R8J! zF{{zyS8F-$cB@#}oogF)RSgYv8s!r`!CK88gom5*mIXm zl*WY*Hu0N~JtWi|P+fGFG~(eRHqDoPx8s4b-PU;h)l@CU+gaSuJ>vuKfV5bW;Dte#_Zg6=Xv7#(3w!&z_54odytnL9#`Ko`Z8ytOi0#GcZ-5`>RfuZSh7!r z%6%N{S`sR_GL*Hejg0PNmIEvX!l)5#IuA%sqXxRJ{UNdk4vYz_jpdNhh}}3Bmtw)Y zzR%s4s|L?h0Jy9%t-I_mx=pVR>wBkOKeIUo78(XPhx>~+T0!c*+m~q_H#d`yowv#S z2RPm5>kVB;!}vFl4u;RiUm;(fMC4vBy}(FeVueLnw4$CU*u1HuJ|3AfA~l6M8H7Z~ zrzZ!tHiFuCXtT4k#Jrw`ZRKg(g#&O*HtN;e9^v_zhUDLuh{uWeo-D!xaU#U)T63fe zrLgF--V!U9e6z6=AsYWcyj?@7L7g&;dZ5^c3r6|uMfkUDrY z?P_zo1~V>ry-pJ|oJHDk+cJu9>F7SQFK+n3z4KWXDPX&kV)@p)Ot2Y+OnPGO!SS$B#!(W`{?D!!PyTD4bwSPt&R%t z14!fb<$kpdw9`Y*Sr%VuNN}wu_^LJ#KS58eNa7#0E8T9p|d___dY= zoKFtRS=ySf_iGVI-3?zmVQl8Bv?hSk$^Go})wiAkn38be2aG?Rv~%V7`14VxXIv?= z70iHym~k`$z;EIG20ptfFE49mAoZVHwJ!Ac=a3%zQw)B$B#G~x#<<{PqM2odi9^0A zQhuiNQY!f;B$V-t_PH^mO#P{D9okot;A49w=Up72qB~2q)*9>KPT?2G zK-g6XU18L=y#t%?!|HMxOV$0{ZLarqr3tuDh4rM`M)#_i+K*Jkptrt#vE^wBO_IZ*MXtwkV?8nTN@yFZxYoj;-L0$SjICEdt^X zQS9Ul)N0*3bsUIQjV4YlW83a;6Lk=S;}IWW^^qS1Nn5szl?)9H;x~xOh)9piV?)Vv z!H0)q)|tbIISwA*u3pU>Ik=rt4{jf%`T4^F#M7`PK=owu=&;a<;+{kPJPJ#+I)x7e zH^%&p5H?#b(}XvUva}4D>iq|yc}?Dw;io~r=bJ(qwr5Z)1@FDTw{mWqGmOCN@#g#i ztwfOI`PIQE>)fcn%X({S_N zQmrIjiWWF_srp=Jk+JJ z4w}nOhHnBmY`4iy&0Rt@09NNysi_k3^75C5WelEiBulpgS(#?$RHX09lKXJEXljVX zi0r$~x<8P2{3eJpu@l*7FN^?6ZSd+%V@CvA5da54yRARA-9^}4l$W#1t$9n=0w{HT zHf!xP5ZZ?iwC*~?scaEPfUL! z)kL1^&u7w4Yl5djXWh@^Pn(2P<*4YW0ABB>iM+Y0s+X65&6~!XK~le`7;gP>Q{|m3 zvQT)L>O7mg?_IUEd5y)^z9xN%R47D;WipkLRS&#PpLGlY(&^*|q1~i6GP_2vycU&0 zw-vK$yLsUTWy~0oK|m{7=snHiG0kEV>&@?eM$VU%CKt(iUI(At5PdMOFsLubEv*Mg z`W{I=f{Ho7?g8)X%%xR)2z7Ti7Xh!B8y?|K=z}7S7543Cym{3NA@}_nE1jb;fhcwFkG8wc*CUuSGSgzFq-o>Tqe=W8C;B&r1rJ+a2 zjG^85Ha7VKdY9+@A&bueXfMalx60x(LZkOo`Zr+7&jifmlrZ& z8AkU76X-ZJOwJBz6^_<-RYi2K2hQ7((XLa?ThQR_J`;vlW3a%V{N~e^0^h1t^tj=3192Vi7t2STi6At{f!DbM249Q+3lOG`@!2UZ;9(7+zx z1sgBskBTopveqjyzw(v;Xw9*i=~?E28EzijKEL;gPZ0anC?kBIYL@7U8NQ8b)AtHw zgcEx!lgOw{_x__Xnlu{6_TBT^Fy-*_t;_GAlUP9jYdppfO@q-hw0ko}k^iOhF&$rr z!mjIRp!fNATQDVuk2&~E;r^QxyVqb2!X~>0g2-VS`KL&dwe4F(tS@}j_j7eWqkxuL z@TEZx#8ViZc49nK9WKC~Bezx~p2C+PXM(l*;m@CDQ$o}kE428!Y(>Nh*>+Hd0!O@d z4*3R2xy0i}qZFz|K;91pvWMHv*xuf#tU?!yL#WEHjD-Q!n1dnWj zukgq;ytHMFM`nE})8rkh#Rt>_hsB9#7y8x3HJ>NT$11=h8=>sG%3Q=TXWRhW$LKYm{5`{NnyZ54OgjYf*r;_Z+&n-rg&p>u&Hkr zHfPmQwY7E-vucu~$Z-$_CnKad>X^L4u6TNJ7nJIEewn+++t^UxwmH?XtiOEm`aC<& z1{jR(YO8DODCy`>QQ|NlJG1b+vB+(H#IA0C_@pDHBW9P~jg&|U6c~3boHm=nhnMx` zf7d7mQCtyq_L2^(8nqx#nh12o(L+DJ!4^W%vZrqoGDr+C)d@R*VB`3fq6d1t3? zV&B)ZXC1mKbY8FVV(i^`a264PtHrlWEgqusv{}w^2EVNqJq?sgcP6)4mS*z+fGCth!_f z4No~7w8%K_6lx}FS?q($%OxgsLLnH|3rjN}^n$~%q9$JgQy=ki>-W%Wamqu=yd0ko z>CintKHb&{x$TA8FzdaUHiKWy-uR!bhMDOozb8`K|!k9;C-Db6cGbTt8_mINmGt!Mz2-ZKm{4W#&K_G zBp;ufNO>p`M4%b?E>c}Ls0C3t4i!ENVI17_et-+uc9D)J|0U`lN?^mEiZn?QN|EQF zMR|Pd*{)A$j@WLpuO;Ho=HOs<_UPleqIg|lP79>vEqqHl9*#cv%T~(C3;pIJWobG3 zUcpuA!qa|7b%)Q)UdmjhHSxP0a$^IB8&O0X%m%REPK-A^s@Lo9J(dtPLjwEL19`S= zxC@&Yw03Mehh&PNZPkoyvv>H z&=7o_<{?p0nXorZMm}~pc!)-WyuD+|A#vgoS*to?oo#N!2 zoj35KIM_t*Ew*z7tfUbWk&r~gnGIQV9F1!VS6B6f#-Dub9MSh&?3YLR-PPtiKQW}()Tp7M6bZ;BcwQ4b!vt?!(eCUH!diU2uGY?zWXM%=*fnKNha^!`|I(^6c9 zp`B7YbLngS^KIO-n=~a;uH9l1uDhP$ROA-YUB205RqR(uCy;;?PR^9W$YemTb6Zgh zmND5*Rl%C>pCapEdA#HZEWC1CPSZH4MYFmget{Cyd%8EZat$d#TK88ZOrky{&~;Vy z($*Iw3%%d4ZZ`LTf#pVAvO(ztXcAOyethnW%guXN_+_*Av|Y^O25^|?=$l{grdU^W zVoh)hy+eb(a`Fvg%bCC4gdHB(MwPN85BUBtsKufBd|9}i-=30Gtv5p9UAUgZzB*&6 z3Mcjp@$GY5x$5X$uTK}Vw-q*SXE@537Hm)5St~{&T}Td+gLO-i!jCeo9C$+< zYP?*Dm}OgDj1j0?f5n`noYsRW|Q*thW6@hB__hsu85hN{LZDAHn;p@+Ot3=Z}YHF3{TTGW(hey_7l2}@5 z*y1wWE+UC?LEax}rGed-`qebI8Du*Xh19{~uCcXf!1aWLx6>R(yvj79(7shi(S#~@ z%wrh%o!P<=&(^8ZN0~qG9a3~}Lbp)el;`XCDSWliSZfmlt*05zOltH1J7X0&&k(+X*GH%>6LfBb%nrn~vwQ%y!uDhNm!l}LG>D0PL1`k91lJU#a3C*Q?w%|ee4 zl+BpxvK1r?SXxD)D)NPKY>`m?g6)=3!zGjAjEveh#Gj7M>|P839TAJij~qhX{YPk3Xr^7KnAbaoTO z-xr#RXgiVJ!`kKN%WaEH60g;oq(BQ)cdRkhqJ&xwb~Qq&0q_ALAMV?j|GW%Bqv9^T zZHY9`k{EF^o~%|QBFMWAsik6# zD0v*jsNw~0K@)<&W|zs{hVs|K*MvX8^#lA^Xg3q)dTOb@WtIYB-ur!GRYEc{ zV2uJZ;El(wYRFWh;N6In^|Lx0gjq<3Y!Y60X`3lN5h%1N8?cR9``#Wi6NFl5tEQ*x z9JomO>MhkWFqDHvMw~h{&vuo@C;Rx*zSWv94n$om&K7a6YOkuEo_mS#KnkO*RKB-OmJ|OWbg3aMaJ_c zmQ(2iHQVm|b=S+GCsD}88>Z(cn zyG1Eb{ogdtb&Kh9u~u*ql(gGQo}MNDJe03 zZ9`;5`Q?Ow8C6l@6VId-%*I4dCFx38?@t8MRb&;R=i1ACMr&lIW_(VK*b~i-*%fY> zm4pwHtLM0}co}dS7R?zxH?z;+JNNIDiX?73_3C07ckm4XH2b; z3&j`5ij*leXC<3<`>@j07lhu|mz`DzDUx_*H=k!$G;^xKJXRKP+f{0aYlZW=tSw+su0$=jce#hwKOAKdivpX3O&M$OOj+XlK2nQW$fLm$)54od)rcU9*NC_c zQ0lf=@m5-9?i0jbJTz{D@aK05){EYy(Uv(*Wt#CQ-j9&F50A#+8gxEFyR8l5@P={( z_rjBp77xb5bEM0%&~o@(dznd-85vqDXx}-;ku##kIgZ~aLl}R{MD&FFC4nS8-6q zaEkj#L*pjiX6h$O{g#o3&MnvEV#@M{q{^7MoB2>4j3wpP@*Y>m4L0<>JtLO&Wx!83 zceZ>*g-MCs2x1~}^XviwQ_Iua3wYyfp;n^WsI|EHA1Z6OTsU`dM|wLw8dBu1)l$ri zmS-5ng1nS2Kq@2|y9A@bg)7EzbLLF)8mMA%{h?E(lyr$ENx?ev(+7m7^1kbNIabGn z+uaFk-Wws4&f}KF)0@;^AHiRV=3X`j$GaVe<}LdYNgubK9ftk2ZeN~FSQ*xr87r=r zmZdJ=1$Sqi+IJ4YUy@agqL7pT^TFzk@G1YyI&A2gfXPzfBx-cSC%f$8z6! zDhL;`G%+;n$MW7!#Bp$)!9bK2KKi#T52p%0k;F@~VLlcf7^RVQvXlD0l`T@;K$b5l zAPDu={JP=oP>l)FEq_pd+-5z)HPv)Q=vQgv@%kSsKN9Y{ODoIuY8;fLr1mgg$K%%A zx8=jj%Tt-!z=!3%2}2(E`Yy9*+`nwB2}lmvk~x0)yxiljt+udd4ZBk=p5BH)`(7lF z$O^Ok;?x@(ZusWl)sN|+kSx7{ONI1X8tA?1I=^;P8z)L240$8g@AV^fHX8>O))idu z+Ji*Y_=0)Zz#y8q7lBL*-Rc3aNR*l(>-p)C=tV!jc*bz!>;AS+`NYG0Yz{mUL26LazVTE zo&dF*76AXcXTc&m><3AGa_+{*dsclrp+mq&JyK0mFxRtPuS~(2>>AGpPU}k_R0)Pz zR-0jSqS74lr{TNp(B)Pd%Y*b+kr_gwaC|+VA^iCnk>Axx)+Sju47{NWNJlDi9QqIT z;vLIu}mo{)J^bM^Kq8OToHe#vOZ13nmdGDiDPrUV&EhTgU9rR7pRrEB>(HtLF#s9&ZJvZ-tU~ zbY7okPG9bF;(7*{$W7_aQUgrk=K{5K)`Z|QP_sEXIVkeaVUc0(v9g5-@3BNb3#) zdl)e~J~!n51#+&ibIg#&Vf;)wclpYb^Q%FToj^*uWOOr{GrvyZ2ivZDYbcgat+=j| zq;f3_`+)7)rMDdcJRRRJdk58L=e|n)F$-uCtUezbOO4el1f( zydQ515h83JF3C0T_IZ@osA{Kbn1xS#L#IPmk%-)ED2&b>WA} zI8x93&4I%Q+)I4M3PxeSer3DwES6fQ?X_z2zxtV&@NHL`O((ZnmxuyX#p2c97HTx< z+B9LOfObqo`NR*?oaw6Ox3A+rVbN{eY9y!iNOre}!ox#18&Mk9-pp-ZPdez;w*&LP zzC6K!@ETUWF2`gR37!AMjuUt)Z(4s3X#eeYCNjytF@U$^Ec$YpGrrog3F)(lua{lP zt|Z-yt|iN>M$^4>3%Vi%e;JO(hDln-Upedo&Q{tLO4`M*neTBgEPa4Y_=cYACCMH= zwfSD5Hh4R5Iry{BNnWl{Jsh$_&mzhtTFim@rJ(so93r(^e)`164mJUNmQBW7uA;!@ zqA-%>Mtikwir0ry1YZYy)E%3rs9%8$_&;}^!ybKK7^d`nkJDU*Y`sZ_BFJTKQ1X9W z%>Ft9mdLR zn^m(ooOSoS^lXaLpIjm+Mu2%5KJ!o%MVn@!}Ez_r3dDPd6Y)TO`vp`SZoO9vhD#ssmC9cj)55AArG*^ zw!`AAqSAg=MAG*sbF)9I=a5YSi4mIc6rdF)2OC?$-#dj#{U)57VO(Rc-i^*W)pUG5 zvGBf1a^2IPDzXX6xRW++b|rKCZs&d)0Fw;^Luf{sMJP>It69vQeLzTZcnCfMj2v1` zB{m}rUJH#;3a|{=I2OD5cq1Z;wpcEeSg?sm*%>c4xLryWl@`)F z`O=g3XOy93T8k<{Zg8vAl&#d7XgEu&v9Xa_8;{ckEzvZr7B=V7bH_v~?&|j1OF$?V z8)!AkMp%8^AXiXQt%JiWveVYOq)G)qeb7wx)>?r8P{21V``U}#y>Vhh%X>`i^sR0^ zT>+U^#X=0XLrS@Nk&k_xD}wgRvmfY1Sb*vYS`u{zf5fxf%6RYo>Eed$)2vC20(VD3L z-qKiARn|CXzEHWm=DUG^d+NP6>bB{P90D0NsnYLo+6;sP(q@EO5#oV% zIt}H0UovMNf0y}cA#;ItI}Juz(Z?MVDenZGhE6fu1>Q^X9jU6#Ivy)_lcK`|5Wt8$ zVoC;n*C{uBZRoas9o5@IXNITFkWS=&XNQ9o0U;q|Fs|nOwu#xKwfo&pRo1*%naq0G z_RZQ^PYQeS@cPG<*U|1R@Ckv{M)9*y1fzIW?)EnWBn1r z`TY-`-h!>lwu{z&knZk=MM!sdH`3iD-CfcONJ^K4Al=<8Bn70qBp1!1`@4O=z4t$W zgPVEH7~>qfgtby_`BG8r&O7@FDjxwOLobf$Dqw|H z@)N;184;7{(-+Fl5c0ey>Oqv;iH1=p1dnBFrfU1x!K;v3b{q^j8tQ^6ey&`RfF{q) znw@I-Rou}wkfhT!W9)|T62Az}`SGzTo#kbJ$SNOm1(Ux91+gN9xX<&*w$&9$j?Hpe zX`{%OA5t7d1pfK0ql8G*YSL5;_~RwRK_kK2W;2>XdIn&W6eRoW8qq*Za?zEI=~NYF z(50F!_1+}@0}qTVKQN4cFOkq@Qh1^aa54&ZzP|D``7dju5i{6co3wux5bq`aN$1IM zG1k0iO{Mv#nIN5V3A2)=-H>_7{Ra2fQ>`IqMAcGQwHgN>)h`g%6Q#hnueOwPHKP1C-GiX{P&=!eB?q4w}Z7IFAMt96lbCV2g<#g!8P%cr#5F zI$EqbxUvOc1^ln9l~bGd`?sg!553~+^-t@{wH+R(565E}8MPf=({zi~>rM9CL#lC$ zrcIVNQR5jkIiat6$CI6wr^KWg`TqSYAH4k-v;F|;Dw^@j5=Czaw4gqBW6N1_v*6nO zO~uCt4f$-i$4|T@!0dIw)%<$4HBY&WHd2k;p2fl_-s)vLi^2DF!~bMy+e#i&^yM0N zO5_E2+TPBx?DCg8?eqfWJBJTA4Ro7XBvYJbf0t^F%HVixJ$7V|v-SSX^_==z#uZzH zjyWtR_ZQ-Ypn0J!gqtW`lf%V2esJZMTWqbFoq`QVpY}Ns4fE#KtG6+j^kllF>J$4` za&VI571{ZX0$BQ`d;Js<^E_@iS|<4z0=XWcfo%HkPv>(6Fs!pb&-H!%Xo2)YbaX(p zZjn|DxI6`DA!2r1SjTrt#zr3l@7qGHJ=y&0&k;jeTYS!_X5i#g(0iUtDt5(<1g%4{ zPI@@YJV?+qTP%NmUxw{0q+v!HrXrf9`O)#Re`z$3T=KkDf}_pnG+W1UF}L}(s&P{6 zIF`A#?f!4vLX`=3s3~yqS03qmeo)R}!BM1iVaYkR5Y%(eb(|mSgJZa>tguEQW;o>N zcdzQZDq>WiIStF2({GD&-;HAl=~c&~(@0@r8q=#b6?HZ3wm&j4F{zt%6M!?H<$&j7 zL~8Up=P3SYhmqtk(|RNmY!D=YkHF@aJNDx5jw#+_qVW|NO?!YtTq>lW+m%EaDXg__ zN14PAwU>*FcPITK!egZmpCHy3jPGbD920uGvH2@Fa|jfzifZ|30TPrmRd|4hWHsVfQT?aRD0RS!w7@u7Z1|W+O3wmGqIB8w zGyU}4ML0p>aqMnRTMk`E(C_2hS$Ai2jQkA5i%aY#1a_awul9v!G4UDLG-s-1QM*Am zU*^rEPy(JZC_bJNy)Jo|h3;{oF9LOFePs{bZE;796(zkSEL^TDWkpvV^fv$Y9HAET z^-1JiN!95(ZLDQvxGAHv7^7;x3LZt?91Gp&6p&{ZQT0!>$N`8GUuC(efw|KUOH(>R ztWKlEv(-mivnT4=g=ZUHF>25wY~lXcMb~4jf82QX;#^gi{%5|1-0id(imc@B{p@-C z?a!G?HazRL@EB@6NBim9+PA+lOd*i7Q^@I}N=tn^UG?BfYW3;ZC3d$K7JlO3{ebcJ z-{8+h+itO=SuB+03Hl|8Qh65s=mYJ%X}TU4wx25Fg}FG}X2(N=(O4X6BHy2l49cVtYkgzaV3_+5DI-tLo&J>+MjMM7~n3{C5Bhl7(GkkcP_*A|wOaqWuW* z=fSoD3AHDdNU`r^tNQ{i-POUs{gxt`-%BUup+Brgn+fK8%!`YYOXS`3#l`f3^zcfm zf$Fqso1x#x`A-x=)4Iz6RYHC~KFK<5Z4-Vc9bT?17Pws}IStR0(WauG6bAc>L%#(Q zU`WM1uD1YAQOv3E#%KvncQ?67UiH)MnXQ3*`me&|p6zWh(v}iC^Mm2l1gFhQT_)ly zzd^t*+#bb-l7jz8Yx`;82gSMHlnLcp&;Y4_(Yb`k(^1&|5VW3>jlj&&7=QXM2$yNo zjL4Xli&&IW3NlzPcZ#|&*2^X#{H+B1iyz4VPvtp=QXDq)&p<&Pu(-cO&;NT&5_KCO z6Jx=8e>Kr;ie2i%gQEJ{6c(J<>e3^e;<(_>wEi1rq^x$WiEJ`V&oj78s)2KnNwV~X zF7%HenU#T$07;&BuYJhX^U#ogrCyD3v*oWMcvMo7{c4lOfXlzK_$uTdIYh|vlK`I?M}t{;Dzb$Pju|4mn} zZ3Fl;?48gGW?&ryyl8i4>$FH+&Z~9$vcK$?Qq7&`?Pp;BTT7p{BWY9XHq3J2D1e=9 zQ)SSsCNJR*hDx)OgU?EeO1mTbKLr7z$g9g14w&yx;qW8z#wr`YLG(d+N`~HSz(BxR zZk<_`Voh#dH;N)SpiI~l&;=m%VntpRNQ3*@IEj^@)DJjlGVMeD|AbgJ%f;o<6%g0% z?%=CR*XwIEqU`yF70BI#jpFTRj}K7gszq&s@qGi`i@;}KFUe)E#UOso^GE#p_Lh9r zr)QO4K&4~+;_>cOye@FFN3`><8+x>_XBvE(Heuw`)!A5CX|(8_zXMO);3SzMLjc`3 z?sX&BJw~%Kl#>o#pWxqc8&_Rif2cPCU}9E_rccR_j~$QxUs;uHFLDMOF*p8Iz863c zS-aBIRkGFziYidJxn|(&4YuaWBZ?2m0lK&Uve3v&VHm_wH3vtVbct^WNYnHQ^!(iD z&EjF@0~Xm_Kk0FfigC)lF9#;6jFV(|62ooD2-arDP(9$VJJ#|fp{{54yx=%_NSZrI zAZ~>!e#XgCG=eOFzfAQze0B8Mz?UQk@W>7EMXj;R!@mp3w;FMkRE!@XDNVBxWFSM< zThR8sMYBdjg&M7<5a-+3d@hOI$!sZZ%?5 z(6k{aHjF5jI-p;p31XZlOQYtb+cfAJ&c6%$IAXS+`Yb|AT9KzPNX|ftG$L}o$h%J1q11xUmnZzq}} zu@O+8d@6I$T2~t{^oVAcljpHr^5}9ZxuF) zWMUszg}~XXzFjZ-IYxZFw|^C?db>{#7h27@S@HkY?kutFSU1`aaeA|Q-hZgyWSd&` ztV4VUk52MWU8bkKlg6Leapm#R&S=rBX9e&S>um~^Iv}uYB@}!Js&;2J($2x`;!p~W z$Lr&zp4oN9ZeSfpm2Bul)rWG@Nch8)i6Y?@^SO^MW)#Gj)TEZTboz8g$=Nx42qMke zH2VsfMWTz@r0Y-_6)nsj$~cGr3axbdbTu~K_^tL!%j3z$fbgX0Au>w*?b^DOMDeL|6JSn!sQuSD7NU}CX4rx**enTk)C4=N@Gi`m4WOAtRD}Z^vJ8@$xD3g?@L}?0GQi?0&HH zxr3^^%z&(mZ6#?lkCW3+zVGR;YcCXAA604$-i|#|C3><*18GBm1C_7SMaOFUTpK1k zagSC|l!V8-aL$p@$)?7 zY9&QUfK4FUP3cbtTGSgLy6oP^xr*dFESFBuZ;Vqkr48%`p*%Vqa? z_d%8qi9h87k-+iVnd;~8vbL9auN#JZ3(*9eJCtQs@pg}3B4#N?iHvdmSyARPt;7CRDSc2knAVPQ@}BNR|o1Z}r=1)tz`N*9qv27UY1D+C9A zD25?S1Ky$Y4u8?#0M(K0S(53(6|?6k89oygQvm5~F4x!dGD<9w>$DN;@l&|u={ z<}g&s+uK=pKH5srq*b&0yXJu_N2!`t#Sim$@%VLz2ny>s1M z4;i0#q^6gUgRZ}AQp&Ga0kR-OLCIv2-|oG%J~Pcj;g&peG9UFLs0wb z>F=xj#wTIKl~wZYXtjL@B-B|%v`w$Q?EhOl8AM5d^6J^R;mPw)kM${dZ))S?Aph+N ztB#%-S;ITSLbPGx=qtLCT5Jjqku%Onan)C-(1XDbrq>h;q6DTjQh0rG ziai*SqcTpdIKajKGxr6iL916jArjUGKlvjMQ2RSWULKX%IsrNLl<3_C;V=*et*bA-|rL}JrH7FuE~#t z`iIT}pXdiTl_d!K2LbH!KOx}8tAGr(A7dxlIG|6GLL#h-8o(hK!d)WlF8pMGg(e@B{Y6E4AT^(F7NaKK4ZinyzY+C#Uyj@~ zAOLS@6xdqBywdELMhxY_5APOi1fum`s`oOBe5mt%Y#*?$nJWuB$Pa{^Rtsa23%QVB zk@}CsIyzKPb4YzurB7{FJIeB+r;B+ZkBBgswY4sIKY~n`qgbXh|3Q0#M^Ov#XbVVE zIVY0i1o{)uh+rn`C0Q@MD-T=vT2%q;hpMWZCz^g6=h``ss|}?p$#JsGd;+^Wi4op; z>t}nFTKok5EOtB%E#*h4M^oIPlYJc3oS8vhkE0Prz(&{2a<}yZS#GSC;*y3~eufu$ zjOY15Z-CXqUlIY6bw%9FmE-VPfdWJDarg*FR*hJpHWmt%Rai4sU>F$!SJr?*9eJj# z=gKn+%B?=pC}jHkCEScc=DYWFPDyMc#I>%%A$QdWQr3>ZaJr#xR)VW;h?YI9)}W3i z;h0*}=JwtR%jJ=Z*~d-=pS5t2c>rOXsKp0unqmXy8~P-HVPUS4BZtUC0?YsEqzD-} z(ZqNEr(Rx|TtlRheq zRS+oo@Yvq|CmOu;q$nH{gG4i4>9x<5Uk{M@N$wG-#`?iF3?&?5}XMFIhvSiuAZj(b{=Utfh+o3(*IYd1VEb#l^&Q^x?qR;y^)ZU2GdMDnLDw})RMQ^zg%tjsYibH}OV zT2u76(Jmy><)m0RI%a*Ff7XINzSTR;{2|LqCZb&?IbIrGBB(Ob)gAJ{kPk_p!t+b7 zcVfQtc3O4UR*k~bOA-l&mBtE>5ECRpfeY_P&ta=^&1G=gMQn{hK%^!@l(NvEao#ki zInn1wOYpLjDQbaVrTKb6G}{t#pZXRDL##Sf>PZlCK)M)w{G_f{ia%n1;`;ixf|<=Y zV7pq}V_1E;$<^(Q@t+BQ+$N1jj`k}DQA`+Pj?ytLr%hX^f?{b*A|=_%t@dzb;%)DX zkocct8~xR7YHJ~tg>WRN@r1q=k&>wdS`H7J_V;xOqXHE*OdSqJrKQXCR!am{BdepUgcPW!%P5TbCvd8MwQ;7a1f`biRO()etS&C{^Y9!d+h{FnmRErS znJSrH!afyQ8>CP3a`WYqk;F@zGgRL>lxXXmXog9qmC9?Y7T7YfgL2Ck)C3! zBnl*FcE)?sZLnkrg#ee+QcU!$-azsIech6J%#hEDq-2wtv1rtTUeTI0Iu&eFbYkH& ztwG*zAzMp?=0|;*21^6#PFchol++;Gk1V0$B$jm~J(-2)OIFN@oiSboapBiXb~jhk z=4;>(KPl)r4iMQ=cN~Ny>ZFM5jz>Nild8t37aX=(8TK5-VPz8puXkscdWcjK%dL0$ zQ`DX>)fc}6n~)J}eshzATgSu^4qnJZ$L9i&Pc{=~uO3oKEV$6H%e0_Jp{gfyYZ9D$` zTqi2@sEW`(3M$Yir-Vzypp?NMGm!WqR%d(reDSHs!x6)Hd(`lZRO$YP26F+L&nb)& z7~_(R6U}-p+gTRmwIFc30wV~;7$oDssckY*=7Y15(71!49vp0mFw) zdy5hz+N8XfW)OERs*FarZ$bWLAwbGTh@?6eOXpqOfh_ki;4&l>xp#^!7DqqbOKc1T52KDv8(7A)2H#oR>+4{r8gk*YAbJd8P1gJgMo0 zjivM2o4~F!&vH_bCYdWqsC7{_+fA0JtU$%c~ z=PQ1ZQ+?rg4aqxQr;IHilKY7yiKXJH`BJPp1R!ayp6M}5ni{&S4sHv>wiS5rt^;9V zYEJ;gjF*?Um#(gkqz2&Pl34lhQ%QIIb`nFOppuDcMOZlXi=V2Fjq-SSO~P%$TyT1R3lUPsw=&%hU7_mk9mVhw8iMq%Fv{SFj1vL~^D`=&Oig z3V7Si-yc36%3^24H+2Py-e(HGYVPNt=2uE`7s{H$nMKUkhWjTAssX*uHf?-c`Dv;Fem|g0?^w6!RN=ia@bbhQ(&z;FY8(F$ehCD*b)=|;x zniS^u9x1zYaZVdis{f-wdtv#Pdn7Aj)cq-=<{%9LlB%CoWE2UBgO){ooGoX`?a-f_ z^{jDC@f`3e!%|d)g85bkVKSy9GlFV(GBIAc{q`M0lG;AG0PGtzoQRaTMRoT0MrsV* zo^zZtx)8uyjyD)U6)BlNli96S*+}M}_GyFHye~Kqta*qNpF@P{ul~b$x3<_uJ8QAR zFW~#nfM4$6uj7o1=Ju}4uw?i<6li49Sfh!RZ0SbrYf`wgtsaiOazITfv`ZbMQQ?{f zOVNj;b>e^@WMeBJxe@k-3UMd99@ILq03i3F6qGAAc zVv(>rf$n{itRS;ES2L+*qSu{LVm;H$%L@x2RYXObn|b$aZ2HYVe3L1d(lgQnH>mJc zlDRqy`(03#r*18qbCfs+Fy$$MQVPwN2$3Y(2)yR z5)$z94en-VS3GvC*o>z~y^}P+Q~bdtAJT)o4;48VaN)l$>4$z%+BSZUA`^?2LQ zhotO624O9oYP>yNw9ZP_a7r|@c%tZ2fzJu!1h1&0hP0y8?pu7Rb!xr7ot>Qsg&rOw z$v+ki4`AqC#{C&-js%l>0B^E5u>D;e>ks;POT3eih5<#rw=AI6_!}|0WKJ)bLPmmT zp#0ZsV_{B(D^F>e?}1ZnsS|xWt*Ld3Dh0d%m#obr?f2t_{VM#UWad1NL3-*J?KcTZ z>v;}_93AT00Sff>ND%{CbaokoTM55?eaUnMTC~h_0fKSQ^E2T{fLz6cyZ> zIV`-7F*{r5Tiqg9kWXe_Ms7#YN-|BJS8!Y}b<828AaRjp!2dw}yYh^2e!%PFCh^4I~juY`Ifs=%q=Vf0>R?hneDDLup zq(Wz0uhw{aarW1hu`ExDS{XnSNS&|_2~&+IJ-{f~8*~$xn|BXdU3JZhp8oS8LuJT2;u$N}xzP0xSp*ZpJ`4q$n{%Y8&|A8%Hc_MR z3oO(V&v=$Gf+J!wT~mFC(Bvyh6;*jbV+~!-2NY-{|0D4*XMp!?XzT(6m{S!QQp>-C zVnvEqhZLBY-S@i~U7;R+uSyzFMu_%*Gp6~%3#(V>;-QC2+b#2sdZ{&{tjvcuOAzb* zd(-6>f#_qB87mSk0+72IZ=Ro_hA7JMc*VkJ7u%b7+H4EV19WAWtW=r)jNe4bP!H+x z3o^&0cr`-?JF*F=05xl&zX1K;D~X1$K)6w17PmZf|0wong*7M{75+KFrlq+VXk_Ns z)2ORiPu2r(Z*S2d(HcfZtBb3Z5JM2o+3B(RU@Dd?weqdso)aHxr9_<%8EVQNkO~nC z^;n-%bsF_^7X00e5JpjNvvb*!a{N$^=rJAR@(@EtT3F<#%@ z1&Wvwx#b#nT4`dd95HxQ?njSo6&!sVeQTHWO%|t~C=g6&r8i-a3IOd2!v%neepYQX5ci7rL90q_ZN2~t z0*5e9zXVoxW?_$ebG|&#M2sS#3xbT2$+#3>jv@mZx84_(km9sK_4Pl_<9y$-=}atTg9OH~>bdq+GSV5NI^of+?%Y;v;a>*Ju<=oI0Qr&tQe_;`}#`O2Zx~ z!w7olmk5)AwzixP0l>R#QsP6>6iomL3uhF(`m1`thgY4Bn>vw4BZ63noBY+qbE>Cp^`3YVuE<^ zi7fu2=TqvJG?9N!ICT>HqTjvtyd%@e-0}*yYQ}QEi2dux1c!f5e96a#3h+%yOd73#$)0 z3-3^PV{MNo@9ah29+*7dmUr39K)-o1-o~Fe5QWX?6Fz#6|0t-^*i>w$mRgvtF2SYwS{t2ZMh)YhNDa!7Ka@e+qyV#pP^OY&*2hQ!Vjn7 znt~GpBFB; zAsc4VF8aN6bY3MECowrqXHje}BNS)&0%A?W=w>69bpZeC&mHC#W*Swb?I4-`H~0Q! zM^N&Ftya>J)a}~Jh9C#o;>c8DT@svQhhmR+#_@OV-8(+sxq32w4w2uU#=06*cQyvP zI=mWGUk}FysDVE3m;`5Zx4u}uA*)F*{he4r<`Z6hQJ0g&c=(U;^dGa3{xAzL&uo^H zNV28#G)KIG!0we|gZ#xv(dNPBQ+KolIHjW$Ic20V7r^1+)d4YkAESQ*50WmydLGYN-#^r! zk0*#q`IQMglfmZPaWZq2L&%eqc&pGsx-Gcjev-X%)bO#Xv5Y-UO|pwe1>8jCNH322 z%NlvJ+Xy5KG0JZ%UAw;iua8msIto~$f`E;luDZ19-|r7)k~L^>eqKFsq8fS21>UXG(Im#V$jpkdwdD2h;8r_;o}jh zvL~?ymH;I`|szerS*1Ns$!kLm(H225Xv{R)O zS1Gdo3bH>8?au=xKUBb?N6=A!m78&?6cXuH)G51rp|-#+Nf zhlTY&J_ala3|}@;22R73#!+TkxPHp!T83e6Fy1GP5GSb@}U(H2N0b?+00iy=bl zVqN3jJ!nRwqN%ZaxKsmRXdQ=vp2iF^($yv0XF35>4we&7py7PkSCDWq?Ycg4WEVVG zJLMD7+N6n@eHbm_hI}ikDB)XfQ81r;aiJ_Xq!(q8mZ3`o zcq9mDp6wf_)FD?aRz~zC6LsB62# zzM$Dqx#vHFs6<>tJW2lt^UN$x8@HR|Gh``lyxrRRJm?{rILwTc{tJZv)h=%crM5UH zzLtqmmRPRU4|V@2;k_>0UY(iSQfX=FQAPGi{kl`vu!X)3KdbIpJOp_jCs)iID=Z+D#fqtNB*ra!Bo%!3q-&Wn$J!&?$+t?0!vetyL> zRZvT6Yv=2#%d0TrMbx{ANZg`FZ#KxyVxomV;%0GEbF0>?PA^`5dZXVlz};d++TzRz z0qt%Ayz+E=$qsa4_da$$z6D)vxh{(7^D6{cpn0xhmJ>=#_LIbE&#s6)s(?nXFh$qP zhLI|oi{B#^5_8I1df3QjffP+^5hh$GifvIPCcE0%IV+Z$Q@U>N|^DvSJuiU*j{XW!trte(|;@iO(~xb zMsM=bUY`a+OZ=Bn{_-{N-}wei}tdx1*6d_@uMwIoE;0eJ}bWsTQ5FIy+uGjid3z{ zfrLbt#VA{GP?hyK2ESV@>|pkb7gHK^#FS#7Zi`a|w}{ie-y#$3rE98Q3-T?)4mRb# zZSiVG#QHtxQ(;#Zbiqg*CNv=|Ow1QYsw_`XD;b-FNbzJNl(ACUcHAMFPO*#SVxrkb znc#QKNTv!sH$=sNhh_}=L1daAF9NjKz@kr1^Ik?nV;4<&R!3HYcXTJ!kD3#QJuccX zJ6q%(A^MY4NP7_r9yHKkl`&DKD@EVLR6~a%S+J$3O9T(24=>D)d3^j`NCD`gnKun+ zhOQhO#=!ltpQjG6owyxyIyR3_iBL$Doiz`E-yV5n58g#*TsskcKu@ zPxL^bU|<0MAj;UPOZ-ZGLkRHJ-+lpcj!UkTtL;{HAd&>R@o0HDs%T&W2@bpyz5c`A z+SA|Dw? z`Tevo1=0}L0No;L@$@0Cx=7SN`tK=FuX^r}9KF}E=)(4vRQSf-supScG8vJ|{W`jv zUq-^fX*PSnO1`4z=H_;2hqi3rPFNL$D>wSCb3Q_!K?w?M(DLksfe#Pz_ z0t*XmYP+7PT&&%!bKUF&@Z38<9H#oh++1@Dh5N9&qi2(c|4xIg>(cC!@s!cBc4(mU z5^fT)sX4LQ4T_po)G+7Q$>iT#<}}OvMRxH$HPoW^aKYH`@j$&D+4DHVm|V1ZSf;8* zZUA@Y*I7vxU+#B3OL&dN31D~LVxu3xg^f$ML5MU46Y3X$goFs4bP z_!{AcHrnBw{Ifu*RAvZctfyy>@t4?ysEczA-Z zi+#-kAo2@Ug19qx`T1&@OEV4E*^VyD-GRa;`*Z!KVy~A|re4!&u&}{Eyn+|aTI!nD z?65dAnRKyMytk|C??`fl*Q1R2!>a4sHNKwl!ObJo6_fF(O#EdJ$Uyll21E#H>YqTN zV?g2&Fc~FSa{(M~vARposqXKUl@Sz8e@kDI5;S)OjDv4f^~{2~pVt9-CfJ>Or1p%% z?Co)LkFYdxpwaT|X^`PnBxhoGijK!~Utxm`8utPl0S3Ek;Gv}kEwkfY1X}xFhL^et ztj+Q#>1ZpsSi}|{!$wH&@>dZ<;YAV{M!6Jofu*0HVtROgQiVeb<4TJGph(jtpca4n zrg~hOtYTw%Y0ZeEST@^5wUSW$GuB=|-TCJ3MzAGKv22tL4HjXnX!--A`9}bTOoRj| z+yak}kH*KC1`7X#S#_7?^M~H#$MyPdeoe0PJx<{Bor%xd2(C8O^_|Ki{X6RP_F*i~ z3x(o&o8c9juPo-h+Ws*7N8$0}62|woijhS+Sk?NiE*|7B26$5-jHtZ11L~7>!tax^Yim-CIR-+B#^(;UDmmJd>I@5 zU!WogXIi1DOQeG7D1E|cpPyexdoF2cToA-ek3Ufo3L1&wRh_U+(`JHS3xB$r#eD(vnp^%I)JD&YVVq_>Sq{HwBsJUS3qMa|V|R=d zS+dPI?e@wM%80k{im+iKB`0sxb%BZ$<3oRnvG_Q_%V5Hee=TT~rd&N*#9&LImxKTk zz8v-m6IWH5P^P}3L4*wL2e&=aNRq}?$s)}Xj!4{v_ybw8w^W#fzkxp^(YHbgYZwYm zcm0znJ=2_^l%Q4T0^@p1=bl%u0N4M9s}bH?t_3=b9bARpHim9r`UwjeLcVG8i@_f+ zx-zn}haTkduU{6ibzdI=VHFcz=sN~>d2h*yYhH(cHlF*lqINindtPsPb8^x^xH@cK zU!=`^mgg%f$VA!}$)~dNt}JfTfaNiSuwZ7 zQ|o2pGDd4lJgRXZOr#L*c^e56MZBZu;{2+JIVfcLr6)c+ z+MF^$PC?$IqA086jO3m8plggfoJKgu89@i5Kp3A>+sE^bX-a1k-}P!*+6W*;YNW;4 z6(|$n}1ujV8W%i0qB1i%`7e1i=8ZQmXW-p=xTHvmlhr}|--*R$s4 zt1Tq3Oxptx3On@&Vt%|Z;kBJ7yvc|5{2%dz{nIT4eOTgw_xhH>0&`$j0~yLAb@az* zQ(XdbzcJxXrS*XI5LZn z@)a8;88r5M5>Hkt!`GSRRk*ZBOmd5RM|tsNVUlivbLl6PjCLQC{sR-^+R#Tgg?M(Z zc$$l@av&ktG|}i#YgRn-xA;^OWL-}ycp0CNEy~XKd2a1(gmm)_f+~FL)d%>xte*0h z)l}?>x3&`!?fBkIJ^Qa;)9ePE(%sG|zuMaw5Wr0uzYU=bDt?|!`ZnOjpqKIcN(zLt zCqUq#m#M5*X#RH~JqoznB1eM(np7w>wZOQ}O%ibP%LmHa*=3YEh}DX>QlZuxZAG#` zj%YmZFOqwDdSDSTW=I@9Uz8ww*07P@+V6E}M+f(R)SB(OniTdmofSbZ{YV0F16Qw! zweyaXZk-<{{MMm$Z<8RdFZr8LKoCp$upBfx+gXb_NX*NNOa62Ao^Hw}B?cD`DK;MD z(V!4wA(X7p>VuJuhWb#wc+Sj@$(&_vAaIiQ%ZYw8rF5u0B%L^6ca(3`bu?m}SDHR7 zEloy};8#`3G&;FdR|UxhL#x6kU;WkVQA?}f8|W|85yDp@O-^(R%D>eX*%zOj`zfpw zomSIphyjO+9^izN#pc^12*3f7bO5?@_x<15vwN@3z4XMpTc3gMi+oXG_Kw3?AZx{U z$Zt~U_!$VPn+|kndurQD?*wwo4)R)&&prT|v~<2At(OBr>3>NJvNxai34sW6aX0z> z=$qrIz}sbphUIu+F=lVopKX9wq7z7cs$IjrHU)w_1ebw3$)Earh2I~vMe~sTUnnFe z9TpT86tcs6t7?Qty*^UNBN?Wgz=cQa>An17~p2EVK$S04b59;a%15wIb6yKX~fbQ;Bm;V(&=b>h)G4Qk%p%6|}MllfnYAIvi!ia(KP18QcZwV%kn|nPgY&@ zhS7wq$Du$}%~{*dEFd_8F@As+2+d?)0ukyS%MJ4p5y4(h zZfnqqNYqu!*~CwLE?v8^%ry}a%j@ffj0TxVMxUex97`&9bMV1BM?iRR#MfH0P_f^l zX;TUGLKu1`-Y@@B3NutPk=T!bl;jAzOjMgsy$VLFoS8j9NSeOW$GKsH;@w2pT+Hm! z{lIs`clUk$k)2~eYQ12NDwsM7_dip1vL+xK3I4X(WnIuMd)@!Q4$Asxo823X-U^mv zepX0j6TbzOIM-~u^&hi7cZR@Y`Onet-L~#N_9F$wSq1A z^8yQ-?o6*~kJLEob#$>!n{HFtA%;Ubt^FMh9Ubwxq|oaRqhrud zg^uYKD7i?(W5-uRJD0TN(y6ZBIFm&Y11aw(bp3pW?Pjje97n?|(Ct|LcJg*+XILt` zg%MT-9aU!sN@L$1dP6b6cf9|L1Mn=7C1n`TPfv#r=`Hxti;`0LVq-8v0H;Zn7!yRjLT|F0 zN@9@-TVG#Q<+M(0S7p?CmJ-Kq&=MpYye=X;da~Nt+S@ChrI1ZuJ~A?|k-C`@KHd$A z?esZSqQl+W+q0_@hAr}Q;kTA=cfe-Ip$j7!`=F;si4kLAG7H+gp%+g*UE+8K5}MTL z=@SDHCif|QxlDszE&%FmP81)svHU(Tl+O%$eRd4%E|)jg2A_W@q3TLh@bquEIEr>8 zTG;mgJk|xOgN3d4y=&p)<3}#aj4zXhDX=)~8hPx3=C7Xv?2ZG0A^Pex#XYV;jU@#( zQz#9)A86@6+ElZ@v}wPZD#BXiquo$2C#g}NUP^>*3Wi~i%VzDDaK@1@oD2!z?DFj_ zX0hsz9UQ2+u4tT8L1~-qnA8QK{^Ow3-5i&WtBdWIr`uDHVPe~f?8X@gUUzU!O$}?v zogvwpeT{zoem`QU(s}aszDD{U4gZdtd?;Y;1k$JbpvzACfVFXa@h5O2HuYKN1p?6V zy7l1Qi~@j^Jc5OKyv=)=*6#mq17B_^$>)s$6Xm^Un>$;T&iA3}Ki^S-^&~iAL-^pl z|H`>uetk=QV(4oI22;7`s1NZmk|C_Qcp8M@=qy#=9OqkCZ z&tUZc8=<4~X*H46^(P8at^)@-?R!-$LKc&v)hc+-Z(&5rVmFP7!j_W_PP1Iz(sxMj zj*}eF+QjO}vf%r>cMdhY{pxQ#hpm|zPoqgZp`37$z8C%w5f`Qvl{tv8Zr@CUZ`z-k!&`AxLhsgF@nypd z%C&J!v7O*H9_r3g=$I`m^wC_xK2rBW(*SQ^aBKHV+v0IIbd2;+&C`f!S!Ni<=Mrf1 zc5}WazToybKKv!@)d*U=zyW+<`KPO`1MZ&)J@&H>{-x*=B^<~M$58zKz-VkFjA;tx zU0i#AK?kF*`ar=_4?Cz4kOf*n@z$eX$MeMh2wE(_)HVQ-UwlvbI2x zkc->`c(9w8gvC|>LY(NE$b(zpdWYw>KUW#9(0ha1KIdLxkFip+)G0Afn?OgSz(58W z?XUx>{yyLyRDXKf$|8M-5Z+D z4a38+*GjUaISA%{3RRD4BuP;fDbgVNIY^N{2Oa($2%FHaRvsf};ERBd9 zhqy{MfxyB=+7=&-O`yGe_!XP^(aao(HSYnU5*}9=S+JC?3qssCrzk?!^Y~#H`N7<1Y>tLYQT)p{mZyaz-&~r|2ScwF9XsDx!Z}`H5d61Brb*PE*pPw)m9`@5wJvZMs6Y+2jJHM?6T5#I?v}ig8)`%1;OrbJdBe_ zv|r$_9EfMN)4XhStjAH=d!7eS!Izo#L?!&s##D5a1NFOcAq^np4+x2%+08Rr?cP9`axVyUq9o)h|a0%`bG(aFoaG3;mf_rcX?*0zn z@78`rJPyYTMCSWs=clF&^sM z?UaVM$@M>uxJ1fl2Q?3VhpEN|CSDhEay|h=&#(UdQ0)fh7!Z6jYPr^84hRr`5xWVH zo8#+}_!<0CBk{Q5!};+~D2a9)&#bH$<|YMl>sg%_db)|<)#Dvo0~#DZK3c@^aMhlA zRzR*yXH(=cjjk|6rw|YqV%YHQ$2@^2E&%}4T z1ss475C0_^aM~2e;2F+{PIf_ffN8oQEo7ijj!Z`y|L(_~IY4>+c`R~y8suQspGcE2n4rhgrRHu#n&82VdJRi%x-UOqarBceSrA~c zX)5e8_!Z5aaV@@^XO&bSVd>YbqauhFCX%7~%b1%A{!NgDrlwkBT&-5VH&t;isNq-B zruTaUWL{}dr?-Op-gp@A?RFCM_JR^XODGY;MLhsD76%y`>fOel9IA}2TvTglZ*S!{ z&^A`rBxPcWq){wVo`s-{ChvgB#(k|8*e-FVw^&QL{3ON0AdVZ8U2Jf3~V$19sHfUiNu4AZDV%ycU9qR~_uPUA51YKmm+&2e5 zh=0mfH#H{K1>iooA#H5dLRm;r}nOt}*BVVW15 z-utb2Z50QUjEA;b#fdhFMgV~YZ&iKV=KJ8k4RoBg#0P_@yl!MDd&*J!t5|6 zc2o3YY!M}NCil}$yA}7$oP=2hkR@kjXJJvY<*r29bb4DwKW!h(h%k8g3?B&!*J5-_ zT&T}MNz%nrI3e2dkR&Z?vixDd@3@47P7E~BT5>IMEBZMb?8^c%I!cZj!RKxYfEJ4E z#V&M4o(inB*Xxg`SnGN*Gc?pSbYRu_Aw$-B&Zjf;2J3c1qA#8sT!Tsk7jd^=UDC7NS6hA zqoXaBZ-7QoB|bolQud)}%xDEc;45cyvxM*5=%Fr0m4~hJ`px(WBw{0v7_yP+Li~2B zMNN91ip`ugFV_k+=60zzfR5zs>9UaRdrx4bpL{AO&N;h%&GR6KNubL`Pn>OY000U- zg}-SVk{3E&UH6}KUM)Ww@O%U@Bul^sJ#AgH2(bB-?cg!Vt61Chua3MlXBJr)vdm1#9sS*f394p5j=gQQMY+m$nvPxD6tE9a9y-UR(- z^&!>JrN#Pb;c$1~%|_SVnz`n7B=scO0V5Rpmy~7iD5(4lfa=HjZSnKy>&>5w9loC75-;@H&U+(EOCDpQ<7IQS<-4g#=>}sHLnW16973+1#;eys-kE|G23hHg2R(A;o&z(*;q{U} zP&y_vm>Vvs&*R~tMjPnsV`ye&69Pl%ds)KvzXvk%SHG>PtQ@0^^jQlOY35hg(E(=q z8t%z2E+w>Ss(vBEj0d`~C+|3uDk~QsKQuc(OiR^NR1BYZo~-&1vg#?99d438e#D<; zh2|1&X z>Gl}nO@?I7j($6$V`H%vVp^F{9zHx%45M;``=t~0aEfiVS<2>CVoE24M-~qV+ki{( z#4=|zDwDLU8*IwciZhxl=3BSvG>Cz2^>G;;%sJSob4U#-(o@B(CY)>D+Vk}bekV0- z4z_2=?DAxSOJA5CE-3lCiK)cz_)qIA{{7_n`+If~KPGauq8~*lDX=lmud;!$@@>vb z*{3?8h-Q9XUToE7Y(?M0w9^!8D>mF@gI%xA6su?>BUjQMql+d&Ol04^TLPGI__;!W zQu+*u{iw1-rRqs$MwBN3L|szKkt}QTADYuy^-$>7Z^<)WxrFmIc_vf5((8zyA45cU^Mog5jw^t2niSW$@%Gp+t{jvc7(n`z z{}@%RgoqO~ogZZHx@Lx>BbqGoM=NO#@$J1P0aKr>&2cS=o@_?&4c`Cl2Ey_1&T|0w zOS+}B>{PRp!5cQrr?w-g;EAY?qpjj$rwx}Y<^$K7hHrYFavOKg6}Ikq~LtabYQW&Z0Iqfix`FImPg{ zxg}K|85N5nqh$`}v}2$L5@P+X=Tv@)I%Ra?dcX7lReW_}Mdp;%dEvV|zT20EaGnIQ zJC4Vaj{VqyYd!l2#ei-a+&F{r|M&nF1OXej8fm=(^#7WV^Ise^B#_;=jbG3Z!?g>D z62v=FnwZ&Y20EkL*@gd;*0sESmDY9I8qubEODJ*f>G@BIqOmrT!r%W77un5;_A=nj z->b#2B($s!7ygVs0 zvhn1^WFJ9gHE**VA?CVT@>rCDr-!EEbTUSeb|P;3?Ag;~EI4Y}={=0%XER1Uowt5Z z1PljF@K`AUpKN8yAz=2XF#DudY&{)yUWFFx1YigWGs}>pW985=O%TTdyi>n7S#UQc zQ_MM>Yewm4;+nYm;K@_Vnz>Mgk>Q`q@=Fs-Q`3~4&Zbp zD;}LW?6$=SGW z85q4CN_7M{GJ8OhfpIm+e;9~kmWgry@TpiW3r8}MMb?#8jTJUt4agB1!y+G*W*;+} zSc>1JBs#cCtS;=&)=8e7%YF5L%{jf>gxSX+huMk@{t!z*QNEwN_V!Wed^GXt+02}H zi-`|BItN(j7!iB#QH||-Ohsl6Nfb}LS&Ix1nfm#YaQ3#42qB4Lm$axvjzU67D)=oa z5b;d`EkDd@9~h=H^=Qadt14o%2ALDr-ivZ1uL=s~kJBcfBnws+B}QXHLl{u@Am)7< z6;=i+rTF0P=rhl^c|*TaGLvNAW~$>>00LChdKYl-#0}_F@_iNYHr~UKenbyMLp#(~ zDyn?XEO!n$K4x;+NHaVh3jS@0MuoX!I6UPhY5CFF*;w@W`I0jC1N>0VdG^}l-~BSm z;=tu)@aEASA@`6K<~cw^L0&E-UbaJ#pS>Qgt09F@e6Hpwbe&K$-pp}(TZ7I8KGD@c zpKOsvJU2|}@TZuC)6;H%-m2}mEOBZkmyodXlm{Kgj1Xy zT~CeZJ3Ob9Tug?U!x3pDJ072 z&UO=XBg$BsUK#hm0eOT`4ddkKCTdK-LT(rRnInDIb8YokF`y$#qtE8ILn^}-pPhn? z=hw4E7WX)p#~Qscb+x~o;v#Mq`FsvprOf+_gsz10q2p5>*n4KG^|cwMn2ws^N6CwDP=Wg@C-xXsT||7Eo+1xSMk!Q;7Y!z2yK~FM_s(bAkIG zj=M*OJklPnjNgdDTTNQpI@))og)A4VumVjbQ(FWvLGCj7l;V>wAace>HHMeY;ztwr zL$9gE_lOK#MI^6dL_B<4Ld;M!sfecZfA^e^i(k@{aCM&D4V$4EcL2@?K)ZW9VxBPk z?m&}smKAkBpM$BVW<+Yu)d*W6(p!(>O@j8+cj{gc%Wl>*>qJm$? zD$EGC;|d+2`3D{Fh>c|7n1gmDE0AZ!2T?<|@7fM-LOJHaRUE|ChxpFb$H z6O4?FABI>;)`q3g36phlI67}5i(6dfD23cZ00>al?f4(4e0iJ}6U*J+*7jNPN)WLG z0VXIMzInVs-0vHZHdX&}{!U&U@5Mj(t@DtV%JlJ{Loy&;`t==!?|OHr*r1gK6cPjE z>V5$sJDqB;s9)2>22e=*y&RYP4y)m&!-jYSurub_NOaAK7w)3yT8;%NI`%@KzaL*s-6V}7)+y+ z)I08ATG3cNqkD8B=4g6!e$f%^oIg98wy1NMVsO<`fP#;RuO*2s73KsB2V2kJ({=N2 z_eIPnK9a~?l|ULKNZCI;;?s08B9tj&dz^D3sThWW`OJ+Ahw%5ata6%_r5a>|cxSJ5 zY$Db?BfJn0lL@x}x7PIl#S+LD1x8wk;wz;s4}BC}G+yHAi_HXI&0Hi=Is=UjmQqs5 zzuHAF%7QLsjLL#joaelgepjh6q8w18!r`y7gfz)S#)n8D$d|{FnmXH+lZrp0@f?c^ zA8lzpg@n{mbWUNC%}37Wvc3I~qoL_hpZi^A@fupGy(S+x!}5fSLR8FVM81dSCU$II zqG7#la!aGy$-#p%I9}G$614jvLndG%Mi&o3$B&)^k2A&eB4B3wN8WNqh;@L}7b(0rdB^ct`C{`7f@UNG zEfxMI5gsS0AQLGm6B~Iy7jFX4A79@VUi;;xQMS=gvxyDwI#E?MW#d3Vpt(Cetq|AK zz#zVelWu=NVO;sb_}5IiKoilprJcZbqLffR`CYHU(v#0v-7JC97*8Ph?(AainFl*| zJj)0TCNC1__-+vb<=viHf4^~9IZlW{Bv?%uYMn}Xe>>iu_Qhxz71_w6e0@f%9s z&F(kSnloTgOrCiU$6t_l3@J)jobOW22egyBFo=HGd_fYIFg4=jq5dZ69=ON|i{zoN zEvNqm->veaw4%E?F%A(?)reZ$*%I|_92>a)TX|)YJRTj<_XKj0=i{~$mnECL7SE*b z$C7TP<+L`-m-8G;dVh~CYS_bH3Q&3h`F zh)NnF`*k-zH`8`>@8GWfa9Xq)$$z;{@Y^$2LD{pF3_(g;dnVw1pIT05)$hVsWAZ)P zj}o_Aj^Ia4%@zGfsNnAV$OUE@(qUB2k%O!{0&`Yuk*NTCOyqaCevCwR4lYIZS(}2~ zcQ^%kWOek48u*qU7v`m>^X4xii}K#(9ZMN1*5Ji2 zGHY^d55iF)Vi~LhQ(;HR(@rYT;bFd`cKXKkI&A)zXVwG=-mT`R=7F{(B_O_Clf^{-8?pF&iQoJ62VnMpfVq~8!I(2a|OxM>Iz@(1#81v1BorY)CC=-it?sy<}j&&t|q&?|^{V9j+r$xcc{RGLWL> zU}S{bxV!miIHAERNc1tFllQcMev|f{IDBK7N*fa0#mDv-H@|#7IH-(`Rn`);bHsOPMEN4cRsX z;o=~@rhkVYY}1uzF-dih^t%g}P}wPs?C3(>{T@>x`;pylyNb^+F0rBYXiz3lv^0&> zG+lpkj=5UuF)S!F%Y>55I5f)EQxiLQN^g0eyjELU%i};Qjhrx>z&c81u7S44_&>=?`m+A5BMOl4?V7& zv~OcK{`aEM>2MPu(UTEFQu@y;qnCu?WWR56S`ilJtWRWe@GH6{B6Qv&>5@b!?yibY zR9b^JkUJ)VNin_%+gv$6C3_`S^#`_=hPyq&vkFBB#t%oDJOz{@ytqEn?5x8B((B`; zE^}y~syHxBAQbo^Vx>pqC^az&@?yiO(bbgXT}P|7yVU`3NYLgc@;nhsgnCyq=p{?s z?gnzu6%q-TMrODmdN)4TTz&}w>6-Flg@|IM%#30KF@93zV?oVU`f&fUS24(CY$vLbvj-#Kb}1WBCY~8LIuWYdvsIBxa_-i9913 zT8^;S>|jcth|G$y*t&mncq4p{TB5Zn`1wh`FXbnjg4(^9-`3jNhw#*+ z^BSNZX1(*?g>Sf|cw^Bk(3HQLo6Ruc6lvY2Tccz#vogE4tzhQe_=*mW{_gXqJJ zp3S(a9z+Rb8xOUn2CpnGz^!) zD!r?(uxsF=-hBAg16}PLkv077UC%P9*2W zOA=->zd`0@hc}Gj27f->U4+I*e8k?a$1%*3VW5)PS6F>DVlcEZUUXqh@5AKdYP8Uv zPRB%EWFw#qx9aK@_hoI8@)N{pp_90m|Ax@`Muf~V!dcfRjv6fcb$(7Lz^yeF5WWB0 z0t(?0YAc`;@cn}Od#Vqms-pf|9dB-K(uX%B?=)HEPWyIjFiKlYYUjWzOM2c^DJPD& zAgd`}a)_JMWh?pJLgr`2*j{SnehuCu$Q|#fJWZV>6@m-4zBLtOA1N&3jECC>414**FbFwUFv2^!R8U8i-`_xT4 zQM6{|i+3pP42JdByOjPkIt1dpS!E{W0qHY6<%4m@n1T)M&9M#*HH|G-r{l*0Hd2aq z|IRBM0p6Axu4Q9dq$3KKhkC3+_GzCtfA;QW+TuvWisx$UM@`??nsShCZydV|nT=V8 z2p`C*=n`(SOT@19^f}aXt;NY%$}_eo6w(&s_pLkr6aT>ea8PM8;@)HV3uaf@syk}z zt?`t6S)E{Y&nH5NZ^l_~hSNYH$|wNVzA+s3LF_EE-?<;=)YzjXK^5hbcWR#rO)kRP0}B=NV2?IObFl3*WLH8z+do6f@v2L`Ca7Kq|x# zp$*FNH_1{noO+}&Jbm|&x=75oOM`NtgyH=VtE@^Pvc881wRA2ofj)<;iKI%v{+)87 zjE@aObb-nAU17%)PN}dk#YDqo9MPkCdqZzlZq$~33tFwfRkKAE*;TXY`Guv3Hxq(X zhk)|x8>w)Jw8cQZ?fBS-{GY{><>To{`^cDN?dIVvf00rt1iz0POnhIxhEV++OtICw zFYY%dU02N91b-oF#KUVc;0=1*x>@zFS}~An4#AXC{i{ZW*JeE|PZ!z$SX0aQ)xbkx z25aRjvLj}}#W#HqYIH$5U!W>NJ*K+{KN3M<_0<)6=~Z*l70^03t|fD?NNz za=0wXzg(7Y^@nd}4;B)sp_2#1f_R8I!4gyxNLK2i&DEqX##I-EHwAYJn5j)o{Gr&! zA15#d+b{#JGCJu3yXrxS3k%+m!KDq))}+927g)_j-h7|QZ&g#dj|*8TqkLt^yZ3>j zh!@i-qvlC}<>Se#lfNiW-64 zOiS7M>UlnIi~MW0&pg7HRfS&mPRpY^HI)y1i}KmbB23F`r{TR?IC5%t?wfd7^z#e7 zv{br^($c>4Jayf*^_{(*mP~QvT4saoPF2xL!GU}N&8w^a>|S-NfX(wBV4AAe+|%K# zn5zWL70v0>*`aAZPkMZh88+undK|HQhlb*Q%lf6G*a!n&;~9XMUN=n`=Blx2`8=m{L#yr%ME|0OQ zY;if#p>G^!V9^I4K&x>CHUCgYRCSqV!0`3m>}>6u_*Vh#)5d$*O1g5^%@_Gq$_^F| zbX+n&d|L39B1Lnb&I|r~t;+1!6kzulg^^G(pygtSL1?0BqVccmDbi6SS5flaUHgYW zGTDXcGVEbBD(jm@p}DT z2e8^q&4&l3Hk$%|Tm`*f`f!nd zy409IeM%m~-|vQb$?PKCBDh1t-Yz`u92-%9$Y>2xdK%~PuIwSld1)rR)lXT1I3+Ffo#gd#dU&o#ddpj?4v2VtQ5h!L;JI)TqF(?YsO1w zEzT1p5#3n9QoakFzAX7L648~FE(fQzgKu@2*C}M)HDIs}nsB@Fl7OH|2+OC~SC_6j zI&%$9;C{7=m|&m1s;%`&zX3$+F(3vHw$^FWFgHyPbd|)$;M;vc^qRlmS3y!;YAukI z`ZB3t2RtitP2F)c*~?>c>u{ADX)UZ{Xp<=;x~-}C3h6Z=qJkHbzgvt6&SeU$5HvsV zX|79GE$7g^KCaQLSpLgieZ$U8@OAJT*e;94|<9mu3vZabX8{Uc6*X%tn}XMPEYLZkY_PQO)8|#9c|fZ)51;u zlule|X>m9&=-Qc0tUNRU>M=h9wY9Oav5Sia+S>$2 zE3Bj4%B>ZJc{6;WC974a5u0!&0@__hM1pPuQE#?g+b5y9-^I*^zUVJCn;KOG5RH6A z8DYcUUUu9kQ~=~uLN;`kQP+7j5!*|>Qma=8;d>8X#$Hg1v;{r zPg3UEX|x+Ch4vp9K)aY3CjAy4<3xra-TULPZK>)T{GP3m(4YJbljaI|T2wELo_$@+Tyc9lb*a8ZU2hqaD&tf8 zwMaGEtz0o@!6^i2EW^RuTZ%^K zFxpXyeIx{#e4D@DY$}N5&msS?NTjHGs@f1Z)qIS{epmhw7pmqilZx*ZRknyUemC*;J*EEs-juzB zL%+DfYdRf>0t(xkf1tG@+S>)IhhSze|1i8vF31NBM6>1zdxvaJ)&J;#M&jc{KR1`X zJU=5-T7h#)aJn16m3SB3#D!(JyTN`AL}~Io*Cp-(;SdM!awAPsKbdPH{pAMg zTa%Y4+J54qh2IT@y=cIQzV*o+2Is~0nBBvJC69&EXF~!mM%SX`Wk>}&9UvUs|9zUp z(?|KZ?YA`u2{4rTz8Blb+_x}!!~6K^pwhXXU?%4tOYYY{;hu&7SK@p^ZvXk;E1{@s zCs_1iuQHiN0t{Dpi+*?`+KkzS5!vGj^Q>f#PLaYz1S-uBLAC;}yf3l--#6@ct^4x4 zUXAiJb7vu+jB>vyu_dlOn zLE>NsuJ?al0#v%R{(BqU;`$$=z}h1Q&jiQW!w=o+dvCeldOWXp@qfO*1J=Z-lj`xA ztZU5`i5(N5^z|AKmTU?ze%Nxr*dl3cdbYZIT==fqLnM%gJ|&OB{2%xG`qiGe?LPyg z+5wLA`L=&8BQ$6*lcy}`=`d3K8QezP_kVw3#%jpO*qA_vareGwOpzH<=i)bmtD|M3 z;zJUWgS^0NRRud};Ek9kz>a+VYRx(vYP;E|o77%p@ekMxKUY>I3%sUF=f-k`BDT;8 zSc!$)Jy{7VzAYPSXhc`KwJZ;(Re$m;oJvar(n8Hn3sF<~;}eCn1RN&uj{uqlx>C%y zkW~` z0Py6dgZGXzVtv?e5`jV_kCoP4pW|g4NE?h%HU_DQ?@33qd_0-4o**_|Q1CSnNdQj6UAchp~rZ{z^fd3?9P!sFrxS_X`Ewg&LrTM+a+EDjuljXRFM`ge<6>@jO* zktkfRuUw2u=EKZLeYGhtoqFN>WyYB<;7DPDSv)bq5}C0P11%ETRznYvmRoPRG1P5N z?K+JVSwz~vMf8UWAeKTsBD;sQp7xHH&7mv*j$p)UxxXE5cHO)3_R?FAxD@?w^$Foj zjE<>o$8v1=^ zDlrQ$fgYmwJNyG9Bdd*vf!NZ2Dl{3C?a}_85tSe?C>Aljw?LKh-HQBTvrJgwj6ywr zfUlX(Ms#sds;Z9tx)?%c*i|+5K~|$SZmMDlY>4KZ08)78$eD$`B`IhQ9CAYmVa)vg z%4{|4r2I`%Z5=ZtcF--i^xAu`ICHmKQZyp5dbi`);Zv;)6W6)zMfKOi&>{;QI#akv zOl_p_K9|1@4VTNyj}OQGC_;GXw@*Svb~PvrIJ<8rh>0_GCf>W%NwExLy&R8vdpN#+ z_>-IPJR2p2an~J;V1r2raKJK@VgTZ@uRT@upTwWI4)Tr<#+Kmgh7Ftb-VhGj%WAqP zZox;4i2sh_4h|v*doXH2_0Rw%N(0Rj-ZcSpC+oLVYtiZ7fceRZ4EB5~ZCqPP3$Sg` zHOcZ8BDx$q2NoS8ypTyH3*`5&Oi3#Kz@QG?PMpL`2CIMkG&`e!tA;vAILd^4mlc^F zPUabIw7x$SQ>8}ehw&J|rvZy!sB67}>rP#$ZOptq+1B9vfRU{48vMG;n78dK4laQHUK&I2MR+Aq{RvEpGa5;qfzK)c8cDW-d^*O*Bz5->eh&i^k@d;*7;Rzi8z7PA#c~a z;aem#VtMy!&K07(H;eS#%F$qwzfMh*?k)vwhxSKH<05Un3#ptPO=Bj6dEXlsZBh7% zJ%~x>uhvmmuO?GI+5=pumYC}_`>Po;W5)*Ukh~NLcs8~;(Q(?Y z>3vxWDr~#PFdeuUcAZ79F;o3#Hy;K7HWPt%lwc{Y`w~cQ&-(%szAccU^ikeE2VDO7 zM4;Cb`tmHYOC=$iLC@m_ho`5#V%7eA8QY}Av*?QAGWc=5^>O)<&v8vv9?`YU-hD~8 zWIAwcgTAHfWoh=6%jUN)zuL-7KYG~e-ap79m^f-|7O!?iTWfG*jjo417*g;lY!w&L zSOWTbLdMvU;q!XiJ#S^P(mo)!1zo_NmS|8|z!%=OXIihn`;xkIvTW##1l(|`NVg=i z3|B1AI)eK1+{};BC@U=*>Toh7nzEFR!=_Ay=li7x^OE|Yv#>fA+R;Y)Lu!CU`pP}Y z@94e{Vat~aU3WDkJP#+cpvJ)QPSScPCe5ZLH|V<^4{n3Sm;;tYisvt!!c2`;V3a~? z6`N0W7OdrSac~eJqH~QdGhi&iVtr7QfVNQhgz-ZJbMC2vwjo+t>U^!)5K4PE7uByV zM}6`#*?Gtk_e1c=6f9`REI${%Ma+2%7*-lZeJ+m4hKIa8jaW_Puzv8C+F0pu{)djB zan&B!_MdZV!9M-#jzui&iSV<%9WH(|X>HpbkiCem18Cj<5V(VZ=3_Mj1ElScfRPMEMy`p)MPB$$Z$Bvs*f}w&TiPJ`272ribBH3eMf~cIBM-{W6nU65nhna@asZxg#jol^Fhj znd!W^wYxgdnh-(6*!$lX%q7H<0~y&$BLX1Flt7kdYmE1Bm>MlBO<|OS;TyhzAb1L5 z8^lBy50vrJ_5C?Z<%CJJrlWxCwg*E*is9_nX^aQ{##oNtNl<2L|GdiSqQ!+UIck%F zu5LUXyMr`=hT`o&`@7Wm=-}Y5v!x~#%}jpy|FKo{+rdJw)S#7>6-}^IXiHeg2u(~; zNEm-Z11~_g8vw{>Ks*3^H_Y)uJ}B`F_Sc>%^u2Itzg~<0w0RUzoE9%z={_fdft_=N zc`4F01#o^eza?cRa76*>mt*A(z}Nq1XaLcF=XFI^)|}u)pY)y$1MK$`8aQC_Y*3LW zaalbzWgBt)S*CHX1^p3lK#5&P12*t}?(h?Pk!T1uCPD}uZVpGEDa7ir!INiW3P){f$yK14S{+mDm-`@DisH$Uui((yq(?j#ZggWzeaIu zDRHMs5@pR>grqfb!ilChn1;nmuY7MW<3CHK)82rq1|fM+1K5<}{Lob5&zQb9TQ__U zP&*-VT|_2Jk>;=6v7YcGFyYKSfcy_)zW`UNhAsAtLy#l^s-oE(9d1HC`IVDTJ_A7>Nd=lCE= z*0J?dkE)oLwLCBY)}a3d?ed@Aw*o*3yye_$v4q(awkV9u^w3w_n|~4!kOFTTb`$Uu zuI&^z65X(Zhx6Tf6!GLZ%x|-d(eXQX<=MrXLNPa?rVdZ6%Oi+S=l6h|1HXldc``t9 znyZ1Xt+ExB4E$cHUiFWs`@K&>>PaXBr6D>lhv|L&;k2gPn|G=Bz*z^5qm68`R?8yS zW@&%W-EFqbx<*0FQSSurk*9FGiE5YE2L`P7SqB!cz!m0y1qsvI1fxto!t?3;|BUmO z5uBa#S{45Ae>x6Wza#CsqZ94v^#Cg-1$)`{BU6hM!kiW|G#M?Insa6hXZ&x;+rFCrmAv(Xr6i^Suj{%NP?zUsq7$8AQdH-2Rp2Gh z@If^7#g1t>VX`{u1|;2TLs-FjwLdPot^@6`xUuk2eiNEpM2z-U)TCp0#Ze=Vx8?>| zdeEg|Pa>`U@ap@>&3~zPM`0HwSv3!c-Qr3#yQoShG9<9I1bGXAzp-^hX|=F>vCny5 zv6J=t8O4Wr2HC|wM8kHPx72L-QfzvJxL$vWUP?24fu6kNQ$8J%OS}xOblvWYy?C#6 zJzn;&J#^g!9=<%Eng*Rw-aI~*-H4u>zC16jJzn}GJYSx@dwxnXUA~B+3_c{pstMY9 zS$Wv24Z6H_r3iTJqP)L)x!HX8d=U!#TMNElU%`4_YYPf^@p(S!3OZapS@B-Oa_PG9 zXE}N7OLnc%a~tlhP_jwrIy+DYURtc5f7Np2v^z|0xw2<_JtXfB*JistU9#AGAj`|# zu-4y<#dzJ^SpO4P_86Ua7oTfyB4xscF*2P)H*1K0W_X@$H1&&uZvqYj&B2%_f8FJ; z_S1ZM-ti;|tTRyRmq*?@n%8*&A<z4d8FG&%l-jANR1 zO9Wq>Fd%gD`hvH>S&vd%i zXgl7-&o@{<;*rA`-HNpL`BQzGG-|0Y>tF2Da@ zx7vOcDel*2j=bK3@)~=mi?&Hr6H7Qy)%X3}+1N&v>Qo?g-AH1^j;=KlM$JPiY^C(x zPC8xgaN8cz_Yx-i|AKV)>K!)zu_OzPomrj#vm-iOT>Qm2 zpdup&P~i}&^KoU8sOH`6xQF-APva6FA5MZlUYw=Gl{N^#T*+e&^S}@G{J8fV2GRh~ zJv2;+K8nfu*rAr^Vq`Ad8X`bf)!T`BvLZOwq>CkjI!!0u(}UL^e#a`Plnv2BN%l%$ z-EtiOBhPryzm}g+1nh2?+f@OZrl%FWr(|`FoSAEu+G!)PVyO25;~En=fgM!NVQw3_ z|D%w}SPwUyltY&Mo}YVYCY@*41PY|cH}A%;15ZT>P(X_CRDkEoI(8GDn&w${@u4F@ zjfB?IRP_Dj-ggt!i!WAqKf|k-TvYdyD*8j&^yZZ?*#{M#v}%2bwSIgNv3{~wF@JKY zU04YQQ@<2kxe_*lwkDvYtChM-h6nWvJf4K2f%9atfUssH9o@v}m53OjALpP9_85QG z93ZijZ#~>t>+n6J$b5bnWW&sB@!0kRGY8p2O*H*Jf)DPF!Wd=#TgMa#X1e#z?!DPM95Mw;5f^b^QDf~tcBbp_ zfRTY-3`21l{Y8y6JQrJB%K*7I%npO1mN#7IYjpu=(Ty7b{%i+wN0ja(&MCGxtHmIIVpi z-&mEBfEqKj-gin$({+~GGi46(x#ccS4jQP@JGq$YF&=)t>FFD}bkLakspTo0m_9tY za2zj2T>+gmYef(O+=iX(7g;XqNnRPXFVmZ$vBEujS#=H7%+c7YjM1`ttwoGvO4D?F zRBLOgxx-kiVqFQvjLhU5z=K0>YVWZ!GpJ=Ckk|+!{!b+fU@hrRBqh37(>o` zCk5I$M@krc!Uhldc>p~nFON0E$Mib?lbiy0ml2R9XGV~GFi~QM$v8fIK$eRWl@4BN zsr_krw7lAv_j@gOExKA?%51F!joBgQc-nEYMRj(uREn!Tk-bSgjTnG1Mcd9n=A4n( za8F%p&2PETQaebYwSIMVwZH43j<)*6Ia)!TudmQ&uxy$&q=*TrvPg`gnKkMROhbkl zuAG9ejpI2X^Co4fm``P+*Yxscow+h6}N-(-&Fn5^Z=K5jg@BYbv4 z4p?=c(_{oMOyn=ktZ)&Z{C8|XNR}|uvq^wzuL=l+bYWcw)FqUKJ3HcT!b!=)7t8~0 zp+-D#tbzTN4Mb5?*P8mnU0~np^3R0-ntd8?d!3vL6^5-ky0T?uHD|fKMm=1-nK`CzemEu z$HybUB<7}LU_hQK&!Rv>wAQ!KhxicfT17{flvB;>LpB6Ig#M+|pV4AusIUzFb+mPu z-3!3mAL90#ZC%x@@K2`D3t0N3rqR$bXKdr3W#IRwuMKg#2{oes_iHmc;ZKsGm$o{! z8Ldt|8B4)Guah&ZEIA1=DN-It6P`Tn}?d;vSLBK8pzu;Ro|R=e)L z>a8wjWV2yq%dz^fW#`SLwEDmLTh)(W9)~nF!fN!+0KN^lfUHF z(;fWkKm@rKyh}z0i?MVtdw2x*&1n7P-ZWaJMoXRl2+q%&$v+p!ZZ<5f+_hW~unt#n zVgeW!RQitSWP+)l_@@~_wC@{VYvn=i-qYE%Q%Cg#;CEZP2XBs6N6tEPj|CjE$e zOQUCu-qe$3u!rpEF}Kv|X;?*++C@$eisWWhYT_a0XH^R4VkQ?L0Obnr^dXjZNR?`Q zD*R5S14WEOA#^fwtgqc)E!M*}Lt zVeXXvRM}07vbElF$zaHCWAnAoQ+)ltNj77mR=!JUL5gh-W=*wA$13|z#+%3CnY|({ z3UTz78phGX24nsfry{4tng55YxA3d7>!Nm*?h@&CBOqPU9fE`)Agxl;4btJJq`Nj9 z5?eyLTUxqPknZj}i}(3X{LWuM+$-jq;~HaDD7bMxcHW5-A9a?4R!mZGnveOk{vWmG zy2JO+iC)Bz1cJW-rqoz?>;+Z>iD28W)UmbIG#u>@VGG?@v3N-GF=17vF{=VWenDis z+7kr!fYzHXgmG6@VGj(jLgedG*^F+umCRwXBZLav6#aFn%2A9l1Q-FoT_p)*808Zn zA;WUefBaPN2_EEfvydXW7*%Li%u{3mCY`bI4hHi2+S=RLPc3CvemNem-bGTtgskM) zbnY6@y3kjcLz*9`A21yVdDlZEEe%f3Qy5yR%^zZiytLeEl?m5o#sV|=CyXDMDRtrG;F$?cHYGo(G&3L&tOP6yNM< z{9}ju^tee5Ed-^;Ot~)G0wme+<7V6>R_-PL$TOCb9i5`||Wf8sdok!1kP8f7Hzgl9up(@S|jJth5=^J+O9l>=#S- z*_tuUxY=EjP>uOlR+|lXchKb-a)d~{G(4L89GX{XPm3SkMH1-1PXT4@?Rsr8qxIqS zWHboOT~;_L$CBC%WGlyKede#MTA8IiHSJSC~ z-pk=08B^xh??00w6G@X^wP~-3-R6K|!3oy^a663hWNlBxu`erQL~3jzO-{1Zu+^gB zY#!KZBRiDHxud^KE5{DU{7h%fleSTO-!W^}6ba}eBUoeZ&YW#?HcgjQI7?jm@01%J zUCKE2Wf}K31}imKIm}4U3|A=3P`Cd7q`&5Ek^}}hBc_>OHH!2X9OPUY3C|POBy!E) z(ou1;=z`Qf*UBGt^hDtbAa3?Ml)1EdwB zWt65&WI}&uFUv6!;M7#|Fc2I`)8U8y=1*95OV36Ne9dBr2g@tO;0KfAZb@;{$26WB zK9Pyea_Vp~h$FlzrdRGq+r29K>-o7$DY7k}bYJwsduJQ)RV7{~7cVSd``zT0cZF?+ zu~|$fP)(Ug9ef?{9R8It?6))VZu)w}zLpO0n0sGOfRg8L<#_`$Q6#9SYx-X%dVNcz z{{P9Fe>AB&umZoO-xA-yOW%3J!P8+^1d$I^GLg42x4|Gqy&!#AWs_A+ht7FTnEZgyrDfEP3x#{Ypkdu)iNrcH5g=1rn*h$Cz zm=qU}g9IAL$VWp|31pNe2s`L1%0BEJxeGVvs;Ui4S7VWp-ecyJaE49tv6{-BzBZC2 z`T%bH<2u|apJtb7@TXFlO|R5jZ7xLAlaQVJYW>69D5|AM9Hlgoikw5%T&?!VNV6X^ z>TkJm0^loa=wLDOTqXF6mB!al|9g;t_vL^49=Wni&%TWjjAK_IP*QF5%O{oP`H=8jNiEYxX+nKMYvrqeK523?p%R%4 z1MX!59$Cr@oOFqulqKafYu*=ZqS~YzA2(2WmnvxZu#q)EJp`1-s1{8gD_zZ@+G)xO zX0imZE<`Cr$~o}1J=?Bh@46zkP!G~^Gaehk)Vv%_`vl-7P^6a7a`p;#QP*{!WRnXn ze^P~=W!(U0$$9pAue{gfnTga8n~Bd8>dheVzwkm86~+Mnlxtj9Met-x@|FZOw_AFD zpIr=+#2A)N{SPx8hH#}n5T%>ZQLZ~uBhwfk2%TOaAuAk8?mc+&{-gL399% zl&%F!s=nwB{C&ia5;8v587QaeHk7fUDG=Zum?K$%-{o^cgRln!_9@jjsYUrwd0VE0 z;A+^`zAS1CSjz7lznHpZTue};f4CKrxkpy zd&K_(LJYqnN^~4eLy}h!ynScZdveOyr#0$aH&2@E9W++BqeF+U_B@$um&>wDF3dn% z0#6Pa2Vo)#Jz^mamTkjj5{RJW`Q`fi@O}PR+i>nHgEef8z|#!dAgwP2+Qfj7Ax3K9*!;gGqXV zwqHoiYE2&sGwv^B;}+LZo>Y6fI=wR)FnzP*eY}JHOcqyhg4J4r-fH@ICgv)qltQRr zTRL`v{G1ZmX}ak1SjbdCn<=ENk)TyQRk`X%2Gr;jZ%RD4| z9h*^6VQ5Jo2bLvGn^#y4H_K*Ge{mVoh@m}L5LN&vqPReVkRN+ZEQ{P z-33_p+6l{A5s+Y!2GNMle-5aB_#G2hm>Fm67l0N}Qhmj@JQ5p7gO+&C{LeTTPt>c#c zQ@h2KwYt(oa0P>Mx`6%m@Hf9V zxRiz0yK-Iw$+NNfF1CNYR)P&~-;%7;yQ8fMkRS_qF(qqQb9VzI;#}$=uzYH|cK%&d~(FGJAHe_w>w={RqnuknRQFby`Jf{nYn$m^2TM~lX~^Y)vDe9=dO!}?j48yKf=gv z%QNA5h#hz39Gll)FWevbrYu^&c&H-5@}cYq43}c0aJ;(3(hpsiLt8)=3?osE5PVieh@oA+x-+F;LjoDTqA5GKF}fxI2L+aF{BuvQ zqu(tp^*eRW9-#R#$+I`R^@7baRPDefzW#2#*A_D5St_hobGP!WW|99R-t*zfuzfzO ztHVt|lkxGq0SnJ_i@ZA!cQ9Gdz;0-_>?>LvBAd{dBW>r`0u8umWmfmXT%xnS_i516 znd!RS6?K^j=Y^d!cTZ6n4Z4wnY(}2W@8!Fk#vfObL}LuKlnG2!2??My7zoBkrq_{F zB2?JjjLP~>xshs{muMo(D8oOqwrcF(JB!1mnjGNxg1BWw;l;LI+8llwwj@@;5vY6W;}i> ztlG<|=mA$-#EdwP65N4D|67J_dN_(HUkAP+-puYJqwq%r$v@OP4*}C6n_lgB+<6@O zvpiSfbV{LW*fJG3$RjBPu5Tp)^?1;5Kx_91Q6~0Vzg1IH=Q-S~;RCRM&c}~WD=E>5 zS?ig|u%$ehnJ)&x`Lc~*V7+G^<%@}=qskQug=TvJxP{PZ99$O?hV&?6$24LbCVdmp z-&Ohf3!LU_nWGy~$0yUjoo6r15C1IFTAk)J3MLwt>mtuo00M~WFWo;WE-$u&To$iP z-L6Q~@lR2DM!o{@|K%og90^*Gl!ivoOC?ydK?iekvUi+lyys#gxiA$qAwv7@E!{9R zJqjq0#cP493ZM~SFCd|Bvu$3b3DwYw=^O~ebW-~Qm+Dh#T2~l zv~QrM9|cyE-)LHUY*E=g!h;f!Pdxb)kjDq#)O|gfF#GK?4l~A&Hw{9nvUX8aoq4Z* z?To)B5!+iePA0bz*I?{^^=mKU3nK-gl&Uo^AO%ne@2B4-X6r>YS+hZ;2MOuRw!*y-@&;;ZMl56_Je@1{emQdOJN81rxV^?0!&R-Ub|`N~)@DZ`5mo+54GG<1)89tR zI1k%zm`A2Q6-Uh!9DrBlTL3nO<)tYHP3>&e3~u>H&;By-2elZ01ZOIUTQ?F|yR_?p zKQ5|@fAh%o5q2=@#<86}6;zy2W1SVG7zB$`DP0%@tqc*Sp{}L@XKxU7GjU{hX1&JG zW^378l=9mpRNP8^Pb4B1E%)0?d=>OKB#mghzs(C~Y51vAJ1KmnCz?GeFtW_3zP_e6 zkyNi38Bv1&X6$|S$ofGO^ns6OJU(8-mx2%lonPMKA*YEkL}dVRL?3=d=W z^B5aB_BWhT;?HA2uT@15Coq3_)!ra&`uU@cXX7YY=USBC4WKAe=+9GdZ~-?{k)Gg4 zeXnXC&d%G3ptQ+=tM@&FgV|;;34;AQ4C03wW3m}xH0Dq`8EqVycDx;@`sG*y?R1y+ zU9@3!4Wdpn2#?*8FN;sT-wM~*n0{ji;@^K18%~1iN(Qd$A;`fFTH1sqTb!?{>;W@Wq?BDi-uMx zl6TU1SuD?gg^|A@_BQ%*l{TeZ>$P66(~p_(iT8G!Hu;%D-Or$F(}dh1%5-k8%!^rk zx177(qUEb+fySox7BBN}NJY|Kj#8#O4JJ$MXyX|AhU#(99_(o1CW#4K8n}(jN4uSr z_GGxoEIO|ROyLYQe3fp~KpZQf*i3mJBWh~A*od#q7q{Vg*Z1^+t70>utXa1^Z{hv2 zwm@5prygL4+!Di&|1{8zW$YVhcd0-A{v3%2Y>5qxo{B-1X_HVIoe^e6M#;9Xx%oG4 zixOjsaHLiZ&4Do4oP~02toY{J~YqmB-2Snx&dW3B}o8|RDn zYM(w?UdQw|A0|gH2fZ7AkHph=`Xlp4r>8xCv|MJV3OW4ePcSZ_!D0gBD%Mpkgt!Tn zmpd$v?I`(0$i#dFXL2h45gb@oEdfZ5OEC?2^{J8ihdiayj*Yz0PBYS!7k^K27)JELx8t{?I&9)DF-m6b)0 zU3#KlWJn;kTn#kXHeZngpJ42^DQ+e+9|OwR-^&Arn%tYzmWR%P(mUrfKNlYZ0f)st zhDRFcECpA%#%4%?{Cs_bM9fnA@req$)M%>zHy}7~eYeSIto&~^LZ$pdN_`B?C`)H7k3sp8C4!% z_3%08iW6&Yzg2isMe)-{QUWt&5j1G4OE`tiE3YbM0Q!pOf6ADIk@9uM63xlA>Ay=s z{9^%e-?vfmXT#lLa!?&7Z|Yf|nfot@a7&mEprL5|`?1?VJN<>gTQ_h0f?mpVgM4R$ zW)IWX0omelb8GS^S2Xb~y)h&? z=7zWaoLH7xwTE@{qLEW84ws%ldF|^jed5D1{&vh5)Vo4Q;Zpa!B z%XqUFTe2Wizmif5mQKxfk|+3V7RHdROw8U(H$;la*nM&&J->1!7vj0PIr|y2eSYN%FKj?<5!9R?8=_l&G;^E_KHH8pBA2&c48Snmh;WKKV#=GgV4&7=i|9(D) zRkNt>m9m!mv!nbBZ^NPVv~rdzZYqSb4VQ&PsL2WfFs(M5zimLACmB|(&C$^z3&Le@ zxxX$=#@`r;PkH9IWovb}dATR1*8rYi6TAb!*lXS(mZ+H} zBYN6WA9zu4Hdo)Uw>FED({LKQ-3QNgYY>)#j`qD&7yH+Ou8m1jl*w;rDcGUsa$0kE zZ_$q1E&H-$)saJFPQ|g+i%i6j`Z7S1*SdfAsnErT#CTYXl|EtFTSt(6U`LVJAmr9uw)7`PJ2xzfF-V9!xSu8lVIH z_FKuKGDNA$5gU{;GM%EfFh4$`M8q~b7P7?8i!a_nX{3$1N>_Mft~{HIida@CT2{%* zix{K)^TMidz|^LKS6y#;9zQ(lwc+#lm0HiB^w>cb`W?=`c9jkEsHjcwg7_y;V#w zgk}GJh7i^`BB%IhGnT}U!y_hv#e-ljWLUO53q7$H@gZ1(`@L`xSF!8I6QzFqG9d%Rh&R>0WbZlbU{tlqtUAq>G z8WI5qo>#_4|JL%p(>%5ak~s75(eua9adCTWr9Lj!6@Sb&6Rtu*=z422C-N(sF{yd+ zGk9|r7Y~57=+&PPj*7F(%yiX0*KIA}R=y3Q(hmN%%wc78U+KarBOGHA67s;4c0+e~ zpXh@ac+ny4Re%?bwY4Ck-Gb65m+zf)St?6f4k-fLCse*H4(cEF0|w{o&x-&3laTWk z)o%m^%Dt?$)FybYJ<{Tjb^+ik(`iou*7bM=hW!~I4DBbI!-3*8wNVJPoW|(>{{UPs zd^I1GH=YpWbCEaJ%cje*4!jA%55M;S`9a+anu8+i0aIf3FIkOfQb^2%zUJpzOqnQ_ z^0+`{pe#@s0T&GKdr5-naH@lFDExXMU;)8a$FiVW&7?TK&W9tQ#gf5Ppa_S zzhnoN^gW=xO^apQ?vSOQgQw8^mCUoEj$T2%z#|ix5#I1|ba{U=6BQ|?Y{pA8ZO|a35}Bm4;xT%fR5bpx4hOMhBr^4NE_jW9&TmRE04s+;&)ZQsT^ zksx0{2&zRo*UB>3nhx`k8D|6^kW!hHlz^S;?n=C4fCFXBtB89uiu*^?z~e!tVSnq& z5V-^9)<$&FfgnCXr_Jx6;$K}~&k%G*ShcohJ^;Bf^eCW`=f(`KG>d_YQ1Gt%>^9MtqrgvTM?Pq=xX<|7|HB4b5 z-S)Et7L0+)XEvBQOC{93b@~%-XB*you5D7VmrmKb$_iG_; ziXnltkP>1-VqPSeGT)^8?N(T*kh(KJA@+wbD$;NngZ9|O*u>TLG|u*1x+w z`9F&ucteX`wJ)EuFM`lwzFEqn8t*%WZxq>e}5L*aR9 zoqnkA(l~RRF3|!v)b$zUq1jBv|B@7`noJw7{;0rTS;Dg=aIm2i2X;|BKccVWNHx(z zTz}PDOx-sjj*c)g7PyS!$bEzH&mw z_^5teUeb&-yS6m*aM8f$lO$YHZ;d!5+^C25!^8U=1Ean8-;#h+h#Z`eaqkDV$CRz; zlXUp@%UZsVH#^%cw?;y8Dt%N&&&>jbRvel>iUe*@21^h9J+*x^)Mfmqb1CI-ikepP+}Ae%eT^w?35>&)Lhd@ir>t7Lb5w`P8W zpjx8dx;pdr(OnGGM<|a!4J<~x4>LO~kF!93f|pf=80o(VoP$dJs8N&xX7;%YV5c0Z z9j?yFWOG_4kE=FbG-JfLU6wQ4*~mX}o+f9+mE7b(; z=17Dnt{^a49AIfs>y%WCq<Y&huPzhzvP?y=)Xjf&fctr=BYE&5NurArOdsw6v;*GwjRL zh@3F)3rH})OV*6aNIJNpSP0O!;D(JH11DGm*<8=iCC0|>_^qaIRxkhjQLLG(+(g!P z4eDqs4|g_&NMy#yCTht1U>xN*Gq*~Ajb-7x5ikITl-IWEp@GhEctS##Xv(q?8v*cx zLy;AL&)bto4LgEcxI5r;hOOx3Bed7dk9$Pw}#b)L%5YiE8;b=ThAELf#FFi$_ z&<=1)!t`Yt1Y$WuINSYJ6Q=l8w3Oor(jW@sc1nLKG^TixQe@=OnqgGJ=x>_4XalgM+ z+^zgN2So?t$)^VI-Q@Zx=c|`tR7oj&GU)GRBxqUsTUnjPpqw|NLXHa)nsPC>mt&v! z$(WyKp8L!@Qd%Sqt@sL*kVYfDwZZNxCKE#D&F|Pj=9^$YXrWrD0rLG^{EVMyBg8lQ zjjAz-89234?9#&mit~O>7Pz2la0wQBydWuoiL?m2){f0Kv<{xz?H<_mWrB=IINDezNZ;MYRvRN-7@3*a`mv# ze0J5Iz9JtR6`3UP`lfzi?t-Mj&!Y%s{QqQ^WU(dbi`|bm6y$ss^#M9yW5e933%@FKYF-NJ&4IqWUr#O(bP&1;z)s@(?Pr(LIYZ zVCm3Oc^UInAdIg~f*N|cEA5q!Ni1%#+zJ%qPoTp$HLYbkKn3K;82V2w`}LjA7?eTi z1|0r}6%(}fhtKy8XdeQ&4cg<#Z5v79Y|P{n1qKedSyb{oZF{ypg z#?c?hl6o_5-+eLL2ei^=pB6V8iwD%xPqlV4ogbzThSG)Iu9LZWiO)QD)%nDUAM!vX z_x8n&*!{F?a@S*02uRTRpsAU>ESlS3e0+^Bl?KwcKMn_T;f0Z&a{Kj(TIt+4KTeORXU@tv|I$NIUQroKqp zx)&>U{#dZAY=PS6)^|gRq=_9{qfTjgXe1xXF;GVdUCg@oJGuugaupKPBSz$9d`sQZ zX*JR!I-k|&UCuWSZG=eY2xhIVuhq`ugwQ=4sHHtT0Yi*DCY#GWwtu&M`~0WP5nO0b z)G#U?N$;F|0Oww^-5n~H|O>53b?fG~2m1654F%ef3nW}~HVSQfT^a&G0LbMF)3pK5_YOkb>SQO#{ zX6KpJZH&Fsr{beu6Mus;kDaww7Mv+rN_aGdmRJwV$;G&yKHhVz1g~=~h+|TMXNR|J zyoNa@&d4-A_%4e3>;7C2y~Et?xW`(gchN?Oon7mFkudW&h#(b)XK(w%zRMCE zG5QBc(-C4YBiVzxvrI1Asb?v>-Lqy+h8qj*xpuU_f8HxBrMGYd>#)v$^>9_BXgvSV z96jY$s`mEoI)WYLA@En_iX>H*JRO0sZFO3MY2Qg~=AkD_QG$$_g@iIYfx%eEovb&4 z`j4Sy9s|5ndovY|$E&1|8G{2SqBPqQ{7S)~)RBri_;UzCFBLJhjl$ z+B!JBq{Lcq&hEJ9Nbc7}#?HHwx_8tQdo(O${w&%tDDfDRlWe2vdrr&E`8O;i#r*QFTD6dG)*$~s* zx;s*vI2sN0wdHz|c-{=k;v1iqxzm%Ik|5pFrZoNQvY+}5OVzzYM-mO$oMpiI_@8+J zE;#b*d}3j#<~)D;30YqK$6*EI&m7ikIK!|mzc30LeLC-ECJ3qEcuO?`pEX`a>T!} z#LdlB_t47r~BAb zALny-#`jIg2bFIYZP%%OcAp&i>gvvqK#DH{AT17A2|9Bf5(x3oRmo~isjqf^sJP@D znIy$5et2-8cX}K&DKUNp7oQ#F-o=Kb=Dc0U)RIG`Mq!7yZ=6w=ViMm$AQURO*@TRl z(6yp!rt?a`_#1OM5YguLG!A~9NT4xgb!Yxn$(JCkM=!=c$i({nv8Q>VTBt#&>F&ue z#wi&0jZh#65TxsCopFDVQ_HtlOMyOTlYuJW&PpRfd7rQ_`SZuHf2o)C^LYpyjzh-t z+k4{}jIaodnLGET|1(7W1ZV5-{s*gmkgX(q^-%nH)9m$Lw72mxgkvX-h-5!rr<9wC z$>|AeLvrulIX38TnTsam8DLE~i}Yt~In}cI}Uh3SOG_N7fO0mjy^JnShI)P*yr8d_*FBY6ZRY&CIJuU?dNZgSnv*)8CJ@JHB3JT?_ zaoFc|&}ILv7ibc3+@nf}?+V2mvay&@g>#_uVKH*3Pnt?_NCP}sACx%F>#$v*ts zrnbIFCKFzN|G5Zosn-%6ZeXN+uA0gNeIPtWM<$51Gs39KJ~8QuJL=n7>}CQ%&X*i|Cg zsWu)}AeUvtiY0_Z>%F8ghaup~kEV94om(LF3h_tIt=QM=vGCRYvJPZ{SPqh#&kB2BfGR$5`E?VGsp)Nf||Adb)twAzn>41K9_zFsa+Hc4tYo)r5K- zBh}1a zEU*-wG)mE%)%XQT=)S<7JLggA_%%S<(pxB);hiUHzpYL;{?;Lto4bP*l1)|P(*7Hx zG&Gwx;e8Xly#|F|-pFr+zxNoL%?(%Fc{Naeq!qV(>0i)#0i7GT8l7+SJ9DML${DMq zBK}7v|MnF=Mi3>7n3G*F{1tD$Mbx0a!Ooj*+lC8m4@<-r&)b0#>Qhu?(d!Kt+qxa5 zB*MkYVG=Umhs!qSEzu2F)qxn;6t!%N%p(0JQZ$6rpH$-#_xy<3Hb9D-K8qtT{7#bb zT`FyLX1VM@Ez1CK9)gd2@mFAj_=4Siuk_~|FYgkbC^*}V9x-&l&?ZO~bcp(i!X9m_ zo2G$EmMucS4f;jzVg273?IThPJn|-gM8rIP6g%^R<{fL#>MZ9q&mR_s0hLWy!hD?- zi?H9DDJQ#L#0Q?hF8~upvp77=GKI31XP2RC7uqU~^P#4sVj?eCnfv)qf>&lfGZvV?$|C2LjAw`-zp2+_V?dL5R)7gmQ|5BROgNtL=Bm73 z)3^RLHc;-ZK3k!;`VHV8Fv#YyEsTUvOiCI^+JQsLQ{c2cE|4Ru#M7}cGCFz+;`>=Y zHr|5L5e6u!>ofLbe5TrMc(Su|)sS$-`c{5M&k(yLX5SNI7ItdH0G3bQHvpwV?W7ZU z>&t>7USz^c_dJ{N0}$)-_NL2t#r}HM|LJF*{x7Hwz=J5bRDr8BPlLV|SFb#7D0=y# z(oz}k%FF%}9EIb5p+3Mq6dfPW=XP8KBpd+>Wwmj9;R7qPf(FpWPGG5F3M?vuYi;G!@qjKI1H4!dmHRk3Lj^A9a?BOBbt$g(;4mETZ z9shTBEsg;8QxxTM-D`)J4ME{uif*&)S`Gb$HQiyi!$7MFs5wMNS;Y2SLsZkq7U+ zq-GMx1VwY9;Xm}P*uOoIu#5qVCi31%TVLuI=pDpd&;twzt5vSBZL`4KzeE8l7aa!# zKi5|wf9#5AXhP)#J5>DP?FGe_7^X?BQ@k)Gx$RzVXOQR~4O!R#(Zr1-nFic-%^JdU zuU=Pok#vp8WABy8<@omYXzbQfQ%0R7bE^ra`$X<=-H5; zIxH~Xr)k5dySpqA%Q3K1UbEOdQn`H+R*(XAK_b9ndy&ukm}hhzf?=3gop-^Kh}~w_ zzOy`+@C=QNJ;tezA)eRl8+l!Rdd&^}9>UgHJ=Ns|dCmOUIFOod7T2b&_M8_+}E71@Kq919Uo>*_uRE}IlDUv913;J!q_ zmzBW9iOOjW96}JO*P&YC>t8mExakC*-b{mt~{Cbbm_&%eVtYw?k?kaEg0( z{R_zQGa&ZMeQt!y9j!OstfI$uQC#C)k(YO^l_JtPsgn)~77$<>+U)D&sy23SGT+)- zZ%;x`4Qbg?m=Qy*@@WPT)>px*JQwix@Im#F4bcsVZ&`K5yp0oYq#2CDiw(J zu+DeTe6?;1=-Y6mle>GX+Dzeto_=N?8A>4B&t-tLPoMh}TX3Ds?rj9LhlZk7>9Z>b zR4GuB8Sc67ONgbu)6sFavAG9L}EGjDFkBk5)zTYsy0&4RWU={~TDTG}V>x zkYqHL#yA$U;D_i^OdY?nX;ivKE8Y^+(_vzT#lU3!q%}Uvx#W8|Vw~K%2_W@Pq!uSW zht~<%9kv>zt(xbH(WpQN=?Ti`mSaq2Rvdb>CDnL%2HFIW|c>sf&=Iq*A{mn;6bNdQN7MLw(r=P4U%ti>n0`l0=rBK1=i zOI!4BR3~>$Nb9 z2qPd|KLkP=%3!Sh!wg27jNmi5sj3-9@~Q2{3yjlij~4f;VEj&1llX-M6{H2Wk(b&x zjE;d!>q#C~3asFm-ws7(g~|$KCLf-cPDyRTvU`+KjsInR4dJrL)b8RpALba4V9bXj?>$e8hhwks0+42nWmRmW|+vAl{Aw6+KJ8 zwg>mKV1FSu;pr&aE;@AMAj!-E0H5|;N=ZoI6KZMKO@T+QfaCi3*gLT@%c&cX7}*h& z_{ryP>d*HR-@uL^#4=gU_hC$Lm4vCllfAc}{BvMz7`clH$Y^Et^wIXk=?O%1=n*U`xH0Bb?y~FD)dHu(ZkO&q&)E>NOTvKiz`K@lVf> zt7!hk3+ptmVJLaU(%&uz!V_W`9au1np`}Qw1bR3@a5*;AVrGOP&KSm6Lc~7)G#vd2 z8lo;s`IrEt)!1cbDT3!Dtx90!^>tK%1dx$?lgm_)RcUg49@_`oiVZCK$m!hq?+B3J zi(lypRi{WwNK~JYwrPLG6&#q*H$=zBD1^Tb^r)nnn+|Z41TsyfbpzGq{jGgY$UyC4 zo~iTR<*KoF!~vin0`!JeNzK`!G7C~!4$6^@GI41!M7tx&zQb@Imu5doE#Su~oLKl* z->A-g)u<}QyrtRV+5TjccAV%#(xRJQVE*<(VEJ{Dh;vfaX)1;p@oAvOXZh$BW`$9a z9P8K$F1;Sy4m#N4QUGY^6jrkG6!rR9074mlh8~ z8PY&c2oaV{b{Ue)dkPtPh{TuEHjsCY#e8&qw|~kL{zG5X794;bYp3q>AoZrXvNBAu zrDK_pK$3?lk>2P`D&e_&oRfxM{em)T;m)RpZNy4y?-)Gh=VI3viwXV$yg0>s9|IO` z2j=c0pd{M_HuUz!YEXOEx;@;-{j?H3;PA>=v8znf%3L`sGWmUa`bT_Jj%}#sFQmJC zJw!=XHm@p~P=5F5#u0dDd&=GL3|WZm1&1^Y_O|z)t2hE*lFdxH{mx`fNGK}p6=3S7 z4(6{GyQzI>NZ4mwT7kc<`6P`R_7v)i$q@2MPFt1pyeFECGT37OuIjJ;*28kJvGHh7%TqTdu6|26GIGht{F`CR?nSo=Y8^Cwv30d11?G#N{cAKN z?JEH-PY2q{;ID+za5SQ0#n$mDI^JftaudFJM*1-*?>kmUtN5RzR5&9ft20M6vU{M+ zlZPVojp2w2lI->nw$mx^V|D!)O2=P+2}r3{5NZj{_OAM(;HBoeHX2;Bz;h+%jCdJ6 z{||S_%J~q>7|C=-WRpkJMc~6i-2Y;p>?NN1=;x%Bng6~XK%Fe|`fD+D(}0yT`bE!n ztfF3}B<3GWPkhD>qL`e@I50o)t81VFO7;-lJ1X;k&8wLw#5kkmf~%LUv|=IdHVf$> z5vqC{p~d;@CwKvHKYRlDmShMq^?`>#Zj~Z`IMQM0U^6z?%$y)^Ql5Jm`IEx}iLbfc zwJO*2|5Iylh)7MHY0(*I4dpT!AvzLhsPbsUOJ`M8o&8C!FtxChYRhEl?}C;Zn8&K} zvQpr5KeLw^V}u!#&Mw;%VX-n%@e0>eLRk4i*R^Wq)>bc9WsOn692T=AgAc}xAEN2$ zqw$ugVcE1#$Kh~TnN4bC6^lH9F|sKdI%DdHvr%v|O^=o&SCNrZ;NJ`pr%g0tT^jb% zC&Fe`mS7wpxXMA<(2|*n=KnfH%0m&bqfR^&abmzhNfo&a27%vE_Mqh|hl5Ndc*@jcDJE8cU1v<1wsdx#iNuIX>LS~IeLX85o0rqx z-`}0eZ?IbgWkW#c&tS)pk4)0Ai;O5Ls`mx#`pwM7QNXI>f zyVaJJf>-{(8G{IY;w+nC@6Vs?+y^a6UHHuD-c9PZxZUji-E%4=wi(o7;j&%CmiqyG zZTn7SrICK{1Pa1H^5;K-6pYR~z~rIm;eWSpX-WB2aO0%!s})8!*$MStiCB_L{=ehW z{@xqchCWSBvo?K^N2#2zOW4qKzJ2CyL;4BL=tVq5CKCarr^R$;K6?8v`7HBje>}%E zfzh#NrV*?BZsDKh^s~`qCYjO=og{+{bQB^|yMFcm>N;>D%fiR#jLB6V6{IiZsFfnP z#0zzppw^u`DC|Opc?pp(e>6* zS#MF>E+yR!(mXWM4N9ldARW>np|q5A!$U|*3rGsm9Rkwb-5}E4XR-Hw-}8OrjPvhy z>>=`7G1r{;eP7>~H{i#?<7#eC(vyPgFR5=sK`Y2 zJ_=&o5?0d4t5MF%vu-FX{1^SK53B7o#Cr)o=)1aT9onILvc)@;>5N*0WNR#`9c?+vXh>zbM z1^Z&L!jwg>tigsJLA|%#l!*kn%KjhT+*l{WAI6DVyK-ShtaJY!&<~wQyhFnBu~|fU z2~%Y6_NZ44ljRGX4*PSWxoNOJQiJ^o9Y2(}e0sGYGIHJMc6fDVI$p#38+hJOG@iX& zJ@8)=j4g83 z#}Fp9@>#$r#sfJ9Pp%EBB9vMD5B~Rln$9B*u5PoJ5*}nEyA?kfklYu-i*~9MNLu?y zw&J7S8K}>0w3rgVA&|&*_MepVpOQA1)Rf@%q08e@%tro7J?T%jofW=X7FlK5=*rKJ z;Jw5Xo=+9Vh@(mz%QUv`DC9vnm$Tcz{&IYMBPTYCQR?oRBm;dI>#>gLDH=670@m>N z&THcX6Gi8zUZU53u!g_~4ytjUuV21g`@Z!V+&jk&3?@uo_0>^Leg3?2mE&twYOL3# zE(n<{Kv(ZALS>3_W|eebpwLv;kdEqE9~>MkuvKbYIQU@NV_|O26b`qm(TTtqyKwcM zxQ^olx8Vcvm!ih>CgvXa7lSIyRvjFy(s4Yd?(+VQo+AEKzj8QHne%^Jy}8;B$qdTn z#IS2`L;$XF;M*Fv#5=FqO9L@T>QCs5SRHhtZHR_0?d(+D2pQ4yj#idzM?tCd{}=JWi7C6th6?*Gv-%MzLPxcEvUdaXiyF#=$)o-K;WCE{p4Tu( zdiSvQU_%g)JG2uyN~}h@mjpXz(pg#jspxPeIPl}lq~kV?Ih?vGs4AJdN*l7ZVu1eIwnzs0Mnerbrrdde*g@B# zknXCtjJ&$QR$t_`b=>g!0Mn4mwTNX=baACjd}K*cY8gjfS@$yqb#Cr4C#O?0c}Iaz zo?1x)y4rx#n{-sB5WLk#uWG`7;^>Ir!B~ps127MRBt*pwB#DV zq>~;;cOpw-69xQCzS9{)q^F;=K^kb7NM|{BX^wW%MAEA~k3{%I_;cyl(9<}qH?El8 zsj8FoKv&I|s?JIe9b$fU8AB){QCF?V^f`cIhQ?1$dn$CGgpAGl$meW_1=nBOvu0@5 znY4zTQHc5XdyB2eXZ$~2`ARwov}XNiG8te1^qN<1$#L?w9RI#i|MACpG37?gv{+@C z)E2!b-~%;T1QF5J&4QWj4^=vnFI#3z;@_DEe{hII_)BrI4xZ?V+9pCyk5s^&wJU9$ zV?(An_ZsMMT3A!K%-=dWtuHk<(!`Ez^m5zS6s8(KrG3ufs3F*Qy zjXX6(=D~phrBr5N!FL^+D)<_xq+8oW&G#42fzU+I%JRQKC0PWW*5VuNcWWOBO)&_isAH*-n^@`h-?h z@f_-wrDx{-zTK|%(AUg#DJDA*H0!z1^ExZ(33ato=?`*BX*owD_n5MJ2d87^FJeDv zOb7i0f($YK4GRNJQsi#7rOCexV)5)p(Kombub>wh z*S328IO36XxX11ygi&43zBA#Y^hm2temq4)ClhfNJ8nzP3tmH!=Y6l^NLH>MIIz_u6$`THJmvsm6Vae1WS z4lP4*`&1GT6bdZ&ekleKN~DMsmw3P$%q0M{JjP_0+qi94yoWv zs?~*x6j~z zVK7CVXsOLV>|s48&nW_Y*qvxxOncF}3_}Q=FJ^V3OPp&NA;_oz5reBR9WwpI93XY5oEFdL!(qYyOPrqE4WeuE69IGRUW2k)DOhL=Y#Pe1@GwN>{y zL$oG;>9QA0Ler%syD<6R^Pl~L$p5w~yd{jtcVxLGAbp%XJ(ahYhtGwY^4yL6^7~fh zLOCMWinBsk`}2za$fupGg5tj*jfkks`7R~GET1F6s3DRF zb*`o(%wfcq2@EvWl^yHN%SHY=;_`*c#UNxYMNTRn5;w(*_(zi<*p%vpWV}c}2mb1c zRdhpO)Y_A?YRlw@({>FgkYx|R_z^*#CickP%f~mG>T^$gk`^}RbK#)%;~DPZlBcp5 zv;wGIH~Spu(5`UXSOBwXs~@gA6GX`N0G+xAm^>W<63q%HZJY(+lt>d9WTnm2j?4Q> zcG^Mr)?h)5I^2~^ps>@EA!!%?gr8Q_Ru*75+uO@k`fARN{STw#KAQsYbF+SD zL!FpkU7X*2nW=DH6Uof-8DV6eF}aAX&4#ORZngQJP4Fh>X{s1!X`}R22!zZ9PxE?r zYmVnDzP>b{N*D1qe)K_l9Zjs^wRts~l0u;~4TB_~@0lJ4;jgWdU<=OGR7^6T6j+PN zHjDb4l@NNkSkFDUU1#1ky~VEo!)DWtWcQ(Vd5$ImJcGjXZH3HKVbrFr{pmGQX$0f) z5u_u6HDuPM6h}}N#g7Baid5<(LYbN5PRxy)|H&v19T;H$TY-z<#Qvii2Mo7YfL1}~ zLF1Q6tO}zet2H4lHb<>Q!1DUBm>|G6h0El=GMWPjCb5G{OG^t2@xP#ZYUFk7z}k;N z{^?-TD5>B3!Eg)ni=V<*C8tbY<9+)Bnj`dCd-Ln~KGF?vBqT=+ww7gJWP%LWR^X)n zNuNYR-NE$}22&(4B}h>ZOOU*z8j6$=$wP#!iXFGPou8|}Vr`lJZf$36OY9CDF(4uI zE!$UtqLQ{qD&#_P=g;~pvbxk%oOOV-ViVjdSELUjA&_u=>u!HtKg<7v0n>dXB_T6K zk*;)6HgA!NBd^9gJBD4fr_yO}Hy-@!U&p^)BmRpOxC>I(nGofdt>k05hqOmjwFP7D z>qtM?f9(Cj-Qv&pzC`qwLGs6ws^6F1tswosKm9_r4WfQ72!Uop%`ZaRIa>nRX5jSe z0ds>&MwCiOneXPePNa*dQbv}6{-vL$+sheuuSM`FG@wShTpZJxd<{*J%5xoz1N}^_ zzZsC5tG|Dla9(PUhkVBa5wq|StgkN+n}rjd4;`nNySsdF}jhp6hozyFw*npZ`cRlKazX za;687PY2onAO!`MM5#nNGojpyin6Mz5@3?~&7hR-uQsP*WF!o*ICALr$7^~>7(%sS zVe64Dt6=2Lh+V30X?B$a6ne~LMTjU|34V3wQw~c$w{G)g>;-DwMff?uftD`tVIp#e z6!^0qZd>iD-zK8{izfRW16Bjk7XWzz&EEdR4uBa-!7<|b3G=TDd}_sb0yS`Lyqssc zsXK}}n5q(U0i^1c=!gDE-7^y63kwkhF{$ssF{FNl zTeDH9iy1q0p{7lv8FoPL8i5B%$J5=qbLo!klo&=TL{WxRLXg}BIm~k5jQAt~@M;`} zeMRf(7Ps#J=GO-tNR&;tXj_r{ynlaSt@=ycY>AQGt%wilme#QUP#?)RIC_7*g6uWt z%%0~gG=p)NjCyzL+x(E^n=X8s)nk*_z-TuK6Z1`G`taKIGPnzj-vJ0yr*D4ZStj2l z;y-<7B00(zY(Mb_$MLDd_8u;~3IGr9@%l9L;Ut7XVsH>MysuA=!9^Np{T07xr89K8 z_ew;mGcG76ydp5f=>vMfpTPWGgzQnE`5DiX*$t21UiN+L457HWjsc`8<;V4GfT2m^ zv!Ni?P5T8xH`!F_#v6409Z5f!u>ub6o6TJEtyUjuoLl^&C?2}F+=&oq=X@8Nx z$GV@g+O#O*zZpdT0n7tKt~Xm$djVv0L9i+s4ngV^Z?{-ZXYr z%qHQY?{?=ubQIDKH_?u!AqmeSV^!XPNOK=$j_*!5)8I!JBJ4VH>7-=X<|}3Kj2@o8 z`Krc)V6vPZ$M#Q zpwd$JA&Z$554ek5Jms)ZnfZ-Du|GHM+`arg`4(0#05xRTHKGGb5%}VT(G1IUHW&F@ zR3_D^BNWmc#2m(_YItJyeE0hu*)k}B{1jweKy89?y|U|m zvfuxY@446j+}=fv(+?T7u%!h+9m?0_WUoU8a(VwLvDhepSmDh$x^!HgjM??LxlXu@ zDZXNHU}{<>P$|U83CPnAr?LH_!Hgz>#;-dGjy2oY0<922wiHMOD}8|xm$QRF2Z2b_ zN^5H2hb636G5xdyiI#2I0KNj>qQde zfvurPKo^^%len3KqDqHs zphd>oiDNdnYC7pD`kDvfBX^~o4vwzg7vmB6A`1RNK@Dl^#IAhDJU@uJX1q(B2JfIi zhBCqF_!TRbEDKz=wSC5O4QLn3=m~XDUcNd+eV*)o@$tR8uPmK(T$rO+bPYPwiRCA< z28euk&Yvv*A_WBz`ahL_*6Ih&oJSP*zQNxcNBeIX8nN9=J+X0~9w-A^egH`Xh&RBy z3R2M)1l+1X^R{59reiz2Yh4xF?z5PL6o}#lfvEoyXEGT+D_1RDn!iY#ttwVOaT-ct zMl2z0FHm&QuIkSSclBsY?nf*SseNkzYbD^7QMhZ|eBQBVBa4OV1!90#;T9eD8S$%j z4gXKq=BZaMURzKt+9Y!3_XEQ;&!w#;vAtd2>z)fhP$)6ubEzIgJG(jW_~++Mf2FH$ zp&gvZC?6|2ci-Crk7TatQvX#;i8w9gV3VY#@JHxs-8e7rs+fvW=y`!Hlg{x`Q-C=l z;U*So0&f*hc~es$U*CwlW1tdg@Rx6+0ceSa+-#yzuBvhQp-LHwPM*%v$DbBh59RvL zv?9rC4|jI^av8XPRz6SF9nN^wrPhFGuEJB5ZmJVU6Qm9F{|vY&{wj+UM2e|GPj7;M zey_;~C&0`{*Y&WSS$BWgT6cZbE2FM}eTy{-@{sF49P9vVaDZODGcH1Gkp3^g4wCE! zqp_ppoMET?tJ_o6vd6pH=Pj2}DMTg;EmZt=fOO_4`8sl4GuC(O%QmL1qBNjH_5p7n zm^%~j3Sx)n($AlD?>QWX4D({KBXvDNEuo8y-?*vR@i8~WtW^w%oMw-fqD@i6Yd$@U zX0ioPAyXGwlG2Qv@N7uDjF~E7&l8IPs-4VN*2v5w`JQQdrqI7-n%q#hC%8_QffZAY z)`S(BTIbe5b^W&8gBtc8Kc#?s)f4Anp0B>MfvU*u@ZUu>H)hF~#2ZJY`GqHXgqB$T zEf;rF{VWN(Vt?My_4tVl<_pr7>6e0X!H};ayT`}~E;nyZch#f(C4MVJs?e#?(#cbU z@!T4zxB~O$*cyD@k-vOELF9m?*?z!&BkvqRI7@g@-$&yVR|%mDG2K+`)4ycbsAc?@kUG52ydv z}m?YFF1sG&A`L>+4IB2e_^CW~@J8co0d zJ~2SpJOx`jJg&~kPQ5n-3d*NU^aT3r%g0YIu_Kr3KMD!_bE=&m}-BKy1FA-7k+GVLk{sZ1QHMdxmIq*)aJRw$fO-FKr3p`a%1>`WANH| znsdi%;?z-4%$@p~Zr01+ZVMj?Q1ky7T6J)fpG(Zq8YI<)3PDeng%wp6ak}3teu}G$# z&`=$dI~(k#$IW$zx#D-~RN%fZJZhqi4NdVw%eVXo!C;K-{^kJw|K#NuvFVrXcNn*@ z{zuXd0bl^{DyP}q4INXAlnECQIg+>@kp25Oz5uWC?ea_>ZeWgWWj-GM=7|S!qRS_J z{}M(7YS1fJUqSZIW9r`g*sx%q33S^6WFoTh5amDV*e6UcOcB4uJU48^LoJPXCP*S8 z*<*TarLkh&OvUcD@)@>bik>bb3psTHMUjq2aXRwRB{(mg?9f%f%0B^t31?UB(%iBR z@L`l+U9N%`$jT{0Ov!S6E$K!z2DRBH>K%}>pXAaRM2Lzs?t`orDlq%Ye(Yj|M3Dn#BYFn_P8NFAc*@k1d2KW4b+NJM-TeOp6w zaNSiXJ-xGCz$1FZB`(W3YQp*G54vIn`XD#DA(k+fCU zXksuv`k1IhMM@Uf}zrT_#X?*`9C@M-KBj5YV zSfmcOf5;!J;dy4_G28N#>3-UuqJ=pNYU}&$ly(K_c@XOrAwsfy(AT-Wv4RvvLKSL! zwQxP*�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

      !lFEDX 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 +{{ range .Widgets }} + {{ .Render }} +{{ end }} +

      +{{ end }} diff --git a/internal/widget/container.go b/internal/widget/container.go index 9113ea3..db07bb7 100644 --- a/internal/widget/container.go +++ b/internal/widget/container.go @@ -6,11 +6,11 @@ import ( "time" ) -type containerWidget struct { +type containerWidgetBase struct { Widgets Widgets `yaml:"widgets"` } -func (widget *containerWidget) Update(ctx context.Context) { +func (widget *containerWidgetBase) Update(ctx context.Context) { var wg sync.WaitGroup now := time.Now() @@ -31,13 +31,13 @@ func (widget *containerWidget) Update(ctx context.Context) { wg.Wait() } -func (widget *containerWidget) SetProviders(providers *Providers) { +func (widget *containerWidgetBase) SetProviders(providers *Providers) { for i := range widget.Widgets { widget.Widgets[i].SetProviders(providers) } } -func (widget *containerWidget) RequiresUpdate(now *time.Time) bool { +func (widget *containerWidgetBase) RequiresUpdate(now *time.Time) bool { for i := range widget.Widgets { if widget.Widgets[i].RequiresUpdate(now) { return true diff --git a/internal/widget/group.go b/internal/widget/group.go index c4bd101..2725aba 100644 --- a/internal/widget/group.go +++ b/internal/widget/group.go @@ -10,8 +10,8 @@ import ( ) type Group struct { - widgetBase `yaml:",inline"` - containerWidget `yaml:",inline"` + widgetBase `yaml:",inline"` + containerWidgetBase `yaml:",inline"` } func (widget *Group) Initialize() error { @@ -22,7 +22,9 @@ func (widget *Group) Initialize() error { widget.Widgets[i].SetHideHeader(true) if widget.Widgets[i].GetType() == "group" { - return errors.New("nested groups are not allowed") + return errors.New("nested groups are not supported") + } else if widget.Widgets[i].GetType() == "split-column" { + return errors.New("split columns inside of groups are not supported") } if err := widget.Widgets[i].Initialize(); err != nil { @@ -34,15 +36,15 @@ func (widget *Group) Initialize() error { } func (widget *Group) Update(ctx context.Context) { - widget.containerWidget.Update(ctx) + widget.containerWidgetBase.Update(ctx) } func (widget *Group) SetProviders(providers *Providers) { - widget.containerWidget.SetProviders(providers) + widget.containerWidgetBase.SetProviders(providers) } func (widget *Group) RequiresUpdate(now *time.Time) bool { - return widget.containerWidget.RequiresUpdate(now) + return widget.containerWidgetBase.RequiresUpdate(now) } func (widget *Group) Render() template.HTML { diff --git a/internal/widget/split-column.go b/internal/widget/split-column.go new file mode 100644 index 0000000..88b9edb --- /dev/null +++ b/internal/widget/split-column.go @@ -0,0 +1,42 @@ +package widget + +import ( + "context" + "html/template" + "time" + + "github.com/glanceapp/glance/internal/assets" +) + +type SplitColumn struct { + widgetBase `yaml:",inline"` + containerWidgetBase `yaml:",inline"` +} + +func (widget *SplitColumn) Initialize() error { + widget.withError(nil).withTitle("Split Column").SetHideHeader(true) + + for i := range widget.Widgets { + if err := widget.Widgets[i].Initialize(); err != nil { + return err + } + } + + return nil +} + +func (widget *SplitColumn) Update(ctx context.Context) { + widget.containerWidgetBase.Update(ctx) +} + +func (widget *SplitColumn) SetProviders(providers *Providers) { + widget.containerWidgetBase.SetProviders(providers) +} + +func (widget *SplitColumn) RequiresUpdate(now *time.Time) bool { + return widget.containerWidgetBase.RequiresUpdate(now) +} + +func (widget *SplitColumn) Render() template.HTML { + return widget.render(widget, assets.SplitColumnTemplate) +} diff --git a/internal/widget/widget.go b/internal/widget/widget.go index c452427..0837f43 100644 --- a/internal/widget/widget.go +++ b/internal/widget/widget.go @@ -67,6 +67,8 @@ func New(widgetType string) (Widget, error) { widget = &Group{} case "dns-stats": widget = &DNSStats{} + case "split-column": + widget = &SplitColumn{} default: return nil, fmt.Errorf("unknown widget type: %s", widgetType) } From 6f8e576c9b89d24623caf8495d93200c1692c880 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Wed, 16 Oct 2024 10:52:57 +0100 Subject: [PATCH 25/48] Add fallback-content-type property --- docs/configuration.md | 4 ++++ internal/feed/extension.go | 13 +++++++++---- internal/widget/extension.go | 20 +++++++++++--------- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index d5856ca..f133ce2 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1006,12 +1006,16 @@ Display a widget provided by an external source (3rd party). If you want to lear | Name | Type | Required | Default | | ---- | ---- | -------- | ------- | | url | string | yes | | +| fallback-content-type | string | no | | | allow-potentially-dangerous-html | boolean | no | false | | parameters | key & value | no | | ##### `url` 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` Whether to allow the extension to display HTML. diff --git a/internal/feed/extension.go b/internal/feed/extension.go index 3aa499a..916ee78 100644 --- a/internal/feed/extension.go +++ b/internal/feed/extension.go @@ -27,9 +27,10 @@ const ( ) type ExtensionRequestOptions struct { - URL string `yaml:"url"` - Parameters map[string]string `yaml:"parameters"` - AllowHtml bool `yaml:"allow-potentially-dangerous-html"` + URL string `yaml:"url"` + FallbackContentType string `yaml:"fallback-content-type"` + Parameters map[string]string `yaml:"parameters"` + AllowHtml bool `yaml:"allow-potentially-dangerous-html"` } type Extension struct { @@ -88,7 +89,11 @@ func FetchExtension(options ExtensionRequestOptions) (Extension, error) { contentType, ok := ExtensionStringToType[response.Header.Get(ExtensionHeaderContentType)] if !ok { - contentType = ExtensionContentUnknown + contentType, ok = ExtensionStringToType[options.FallbackContentType] + + if !ok { + contentType = ExtensionContentUnknown + } } extension.Content = convertExtensionContent(options, body, contentType) diff --git a/internal/widget/extension.go b/internal/widget/extension.go index 547bbfe..4b443f2 100644 --- a/internal/widget/extension.go +++ b/internal/widget/extension.go @@ -12,12 +12,13 @@ import ( ) type Extension struct { - widgetBase `yaml:",inline"` - URL string `yaml:"url"` - Parameters map[string]string `yaml:"parameters"` - AllowHtml bool `yaml:"allow-potentially-dangerous-html"` - Extension feed.Extension `yaml:"-"` - cachedHTML template.HTML `yaml:"-"` + widgetBase `yaml:",inline"` + URL string `yaml:"url"` + FallbackContentType string `yaml:"fallback-content-type"` + Parameters map[string]string `yaml:"parameters"` + AllowHtml bool `yaml:"allow-potentially-dangerous-html"` + Extension feed.Extension `yaml:"-"` + cachedHTML template.HTML `yaml:"-"` } func (widget *Extension) Initialize() error { @@ -38,9 +39,10 @@ func (widget *Extension) Initialize() error { func (widget *Extension) Update(ctx context.Context) { extension, err := feed.FetchExtension(feed.ExtensionRequestOptions{ - URL: widget.URL, - Parameters: widget.Parameters, - AllowHtml: widget.AllowHtml, + URL: widget.URL, + FallbackContentType: widget.FallbackContentType, + Parameters: widget.Parameters, + AllowHtml: widget.AllowHtml, }) widget.canContinueUpdateAfterHandlingErr(err) From 18bb2d7501dca4f887479c634579df92abd57cbd Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Wed, 16 Oct 2024 10:58:09 +0100 Subject: [PATCH 26/48] Change simple icons provider --- docs/configuration.md | 4 ++-- internal/widget/fields.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index f133ce2..c84b3ef 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1169,7 +1169,7 @@ icon: si:adguard > [!WARNING] > -> Simple Icons are loaded externally and are hosted on `cdnjs.cloudflare.com`, if you do not wish to depend on a 3rd party you are free to download the icons individually and host them locally. +> Simple Icons are loaded externally and are hosted on `cdn.jsdelivr.net`, if you do not wish to depend on a 3rd party you are free to download the icons individually and host them locally. `allow-insecure` @@ -1447,7 +1447,7 @@ icon: si:reddit > [!WARNING] > -> Simple Icons are loaded externally and are hosted on `cdnjs.cloudflare.com`, if you do not wish to depend on a 3rd party you are free to download the icons individually and host them locally. +> Simple Icons are loaded externally and are hosted on `cdn.jsdelivr.net`, if you do not wish to depend on a 3rd party you are free to download the icons individually and host them locally. `same-tab` diff --git a/internal/widget/fields.go b/internal/widget/fields.go index 91e7671..66fa199 100644 --- a/internal/widget/fields.go +++ b/internal/widget/fields.go @@ -183,7 +183,7 @@ func toSimpleIconIfPrefixed(icon string) (string, bool) { } icon = strings.TrimPrefix(icon, "si:") - icon = "https://cdnjs.cloudflare.com/ajax/libs/simple-icons/11.14.0/" + icon + ".svg" + icon = "https://cdn.jsdelivr.net/npm/simple-icons@latest/" + icon + ".svg" return icon, true } From 8a41a9f506750d7222de0b5eb842ba1d09f3f9e1 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Thu, 17 Oct 2024 21:36:22 +0100 Subject: [PATCH 27/48] Improve formatting of request body --- internal/feed/twitch.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/feed/twitch.go b/internal/feed/twitch.go index 739d7d1..d04afc1 100644 --- a/internal/feed/twitch.go +++ b/internal/feed/twitch.go @@ -142,7 +142,10 @@ func FetchTopGamesFromTwitch(exclude []string, limit int) ([]TwitchCategory, err return categories, nil } -const twitchChannelStatusOperationRequestBody = `[{"operationName":"ChannelShell","variables":{"login":"%s"},"extensions":{"persistedQuery":{"version":1,"sha256Hash":"580ab410bcd0c1ad194224957ae2241e5d252b2c5173d8e0cce9d32d5bb14efe"}}},{"operationName":"StreamMetadata","variables":{"channelLogin":"%s"},"extensions":{"persistedQuery":{"version":1,"sha256Hash":"676ee2f834ede42eb4514cdb432b3134fefc12590080c9a2c9bb44a2a4a63266"}}}]` +const twitchChannelStatusOperationRequestBody = `[ +{"operationName":"ChannelShell","variables":{"login":"%s"},"extensions":{"persistedQuery":{"version":1,"sha256Hash":"580ab410bcd0c1ad194224957ae2241e5d252b2c5173d8e0cce9d32d5bb14efe"}}}, +{"operationName":"StreamMetadata","variables":{"channelLogin":"%s"},"extensions":{"persistedQuery":{"version":1,"sha256Hash":"676ee2f834ede42eb4514cdb432b3134fefc12590080c9a2c9bb44a2a4a63266"}}} +]` // TODO: rework // The operations for multiple channels can all be sent in a single request From 1b42312d02c2bccff486984b862390ecbf29b591 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Thu, 17 Oct 2024 21:36:41 +0100 Subject: [PATCH 28/48] Fix edge case in popover --- internal/assets/static/js/popover.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/assets/static/js/popover.js b/internal/assets/static/js/popover.js index d6578ee..42a9b57 100644 --- a/internal/assets/static/js/popover.js +++ b/internal/assets/static/js/popover.js @@ -56,6 +56,8 @@ function clearTogglePopoverTimeout() { } function showPopover() { + if (pendingTarget === null) return; + activeTarget = pendingTarget; pendingTarget = null; From 56f9ec1d10a58eb11f1df4b8fdf3a3b88e924dc1 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Thu, 17 Oct 2024 21:37:32 +0100 Subject: [PATCH 29/48] Include title in twitch channel data --- internal/feed/twitch.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/internal/feed/twitch.go b/internal/feed/twitch.go index d04afc1..7e20a52 100644 --- a/internal/feed/twitch.go +++ b/internal/feed/twitch.go @@ -28,6 +28,7 @@ type TwitchChannel struct { Login string Exists bool Name string + StreamTitle string AvatarUrl string IsLive bool LiveSince time.Time @@ -77,6 +78,9 @@ type twitchStreamMetadataOperationResponse struct { Name string `json:"name"` } `json:"game"` } `json:"stream"` + LastBroadcast *struct { + Title string `json:"title"` + } } `json:"user"` } @@ -208,6 +212,10 @@ func fetchChannelFromTwitchTask(channel string) (TwitchChannel, error) { result.ViewersCount = channelShell.UserOrError.Stream.ViewersCount if streamMetadata.UserOrNull != nil && streamMetadata.UserOrNull.Stream != nil { + if streamMetadata.UserOrNull.LastBroadcast != nil { + result.StreamTitle = streamMetadata.UserOrNull.LastBroadcast.Title + } + if streamMetadata.UserOrNull.Stream.Game != nil { result.Category = streamMetadata.UserOrNull.Stream.Game.Name result.CategorySlug = streamMetadata.UserOrNull.Stream.Game.Slug From 3382cd620836c48b74c9047b0297e9dfa9efdb99 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Thu, 17 Oct 2024 21:53:07 +0100 Subject: [PATCH 30/48] Show twitch stream preview and title on avatar hover --- internal/assets/static/main.css | 7 +++++++ internal/assets/templates/twitch-channels.html | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/internal/assets/static/main.css b/internal/assets/static/main.css index 362e257..d8152c5 100644 --- a/internal/assets/static/main.css +++ b/internal/assets/static/main.css @@ -1504,6 +1504,13 @@ details[open] .summary::after { border: 2px solid var(--color-widget-background); } +.twitch-stream-preview { + width: 100%; + aspect-ratio: 16 / 9; + border-radius: var(--border-radius); + object-fit: cover; +} + .reddit-card-thumbnail { width: 100%; height: 100%; diff --git a/internal/assets/templates/twitch-channels.html b/internal/assets/templates/twitch-channels.html index aba7935..e8785d5 100644 --- a/internal/assets/templates/twitch-channels.html +++ b/internal/assets/templates/twitch-channels.html @@ -5,7 +5,13 @@ {{ range .Channels }}
    • -
      +
      + {{ if .IsLive }} +
      + +

      {{ .StreamTitle }}

      +
      + {{ end }} {{ if .Exists }}
      From ee94d6aa895cd2190fe1dd9ae2a72fd78a40872b Mon Sep 17 00:00:00 2001 From: Cody Meadows Date: Thu, 17 Oct 2024 21:58:18 +0000 Subject: [PATCH 31/48] Add alternative status code prameter --- docs/configuration.md | 10 ++++++++++ internal/widget/monitor.go | 14 ++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 6f9d602..a2c7cbd 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1082,6 +1082,7 @@ Properties for each site: | icon | string | no | | | allow-insecure | boolean | no | false | | same-tab | boolean | no | false | +| alt-status-codes | array | no | | `title` @@ -1117,6 +1118,15 @@ Whether to ignore invalid/self-signed certificates. Whether to open the link in the same or a new tab. +`alt-status-codes` + +Status codes other than 200 that you want to return "OK". + +```yaml +alt-status-codes: + - 403 +``` + ### Releases Display a list of latest releases for specific repositories on Github, GitLab, Codeberg or Docker Hub. diff --git a/internal/widget/monitor.go b/internal/widget/monitor.go index 06d7303..0ece553 100644 --- a/internal/widget/monitor.go +++ b/internal/widget/monitor.go @@ -3,6 +3,7 @@ package widget import ( "context" "html/template" + "slices" "strconv" "time" @@ -10,8 +11,8 @@ import ( "github.com/glanceapp/glance/internal/feed" ) -func statusCodeToText(status int) string { - if status == 200 { +func statusCodeToText(status int, altStatusCodes []int) string { + if status == 200 || slices.Contains(altStatusCodes, status) { return "OK" } if status == 404 { @@ -33,8 +34,8 @@ func statusCodeToText(status int) string { return strconv.Itoa(status) } -func statusCodeToStyle(status int) string { - if status == 200 { +func statusCodeToStyle(status int, altStatusCodes []int) string { + if status == 200 || slices.Contains(altStatusCodes, status) { return "ok" } @@ -52,6 +53,7 @@ type Monitor struct { SameTab bool `yaml:"same-tab"` StatusText string `yaml:"-"` StatusStyle string `yaml:"-"` + AltStatusCodes []int `yaml:"alt-status-codes"` } `yaml:"sites"` ShowFailingOnly bool `yaml:"show-failing-only"` HasFailing bool `yaml:"-"` @@ -92,8 +94,8 @@ func (widget *Monitor) Update(ctx context.Context) { } if !status.TimedOut { - site.StatusText = statusCodeToText(status.Code) - site.StatusStyle = statusCodeToStyle(status.Code) + site.StatusText = statusCodeToText(status.Code, site.AltStatusCodes) + site.StatusStyle = statusCodeToStyle(status.Code, site.AltStatusCodes) } } } From 201b4ca1e87a7fa79fe56ef1bacecc4ff89666ae Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Fri, 18 Oct 2024 10:51:46 +0100 Subject: [PATCH 32/48] Use AltStatusCodes for HasFailing check --- internal/widget/monitor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/widget/monitor.go b/internal/widget/monitor.go index 0ece553..581781c 100644 --- a/internal/widget/monitor.go +++ b/internal/widget/monitor.go @@ -89,7 +89,7 @@ func (widget *Monitor) Update(ctx context.Context) { status := &statuses[i] site.Status = status - if status.Code >= 400 || status.TimedOut || status.Error != nil { + if !slices.Contains(site.AltStatusCodes, status.Code) && (status.Code >= 400 || status.TimedOut || status.Error != nil) { widget.HasFailing = true } From bc8f17393a6a140c74b961336be304c0a0b3ae0e Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Fri, 18 Oct 2024 10:54:34 +0100 Subject: [PATCH 33/48] Fix simple icons URL --- internal/widget/fields.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/widget/fields.go b/internal/widget/fields.go index 66fa199..6dd64a8 100644 --- a/internal/widget/fields.go +++ b/internal/widget/fields.go @@ -183,7 +183,7 @@ func toSimpleIconIfPrefixed(icon string) (string, bool) { } icon = strings.TrimPrefix(icon, "si:") - icon = "https://cdn.jsdelivr.net/npm/simple-icons@latest/" + icon + ".svg" + icon = "https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/" + icon + ".svg" return icon, true } From 2dd5b293038c5c97e8b9cde035ce85755ba121f9 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Fri, 18 Oct 2024 11:10:00 +0100 Subject: [PATCH 34/48] Remove unused class --- internal/assets/templates/twitch-channels.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/assets/templates/twitch-channels.html b/internal/assets/templates/twitch-channels.html index e8785d5..d2903d8 100644 --- a/internal/assets/templates/twitch-channels.html +++ b/internal/assets/templates/twitch-channels.html @@ -13,7 +13,7 @@
      {{ end }} {{ if .Exists }} - + {{ else }} From 84a7f90129b44e4fb613168efd12d40cf6ef6290 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Mon, 21 Oct 2024 23:27:25 +0100 Subject: [PATCH 35/48] Add custom API widget --- docs/configuration.md | 4 + go.mod | 3 + go.sum | 13 +- internal/assets/templates.go | 5 +- internal/assets/templates/custom-api.html | 7 + internal/feed/custom-api.go | 148 ++++++++++++++++++++++ internal/widget/custom-api.go | 70 ++++++++++ internal/widget/widget.go | 2 + 8 files changed, 244 insertions(+), 8 deletions(-) create mode 100644 internal/assets/templates/custom-api.html create mode 100644 internal/feed/custom-api.go create mode 100644 internal/widget/custom-api.go diff --git a/docs/configuration.md b/docs/configuration.md index 000edbb..06e8731 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -16,6 +16,7 @@ - [Search](#search-widget) - [Group](#group) - [Split Column](#split-column) + - [Custom API](#custom-api) - [Extension](#extension) - [Weather](#weather) - [Monitor](#monitor) @@ -991,6 +992,9 @@ Preview: ![](images/split-column-widget-preview.png) +### Custom API + + ### Extension Display a widget provided by an external source (3rd party). If you want to learn more about developing extensions, checkout the [extensions documentation](extensions.md) (WIP). diff --git a/go.mod b/go.mod index 6b39a2e..56b35a5 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.23.1 require ( github.com/mmcdole/gofeed v1.3.0 + github.com/tidwall/gjson v1.18.0 golang.org/x/text v0.18.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -15,5 +16,7 @@ require ( github.com/mmcdole/goxpp v1.1.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.1 // indirect golang.org/x/net v0.29.0 // indirect ) diff --git a/go.sum b/go.sum index ed770ea..be33712 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -github.com/PuerkitoBio/goquery v1.9.2 h1:4/wZksC3KgkQw7SQgkKotmKljk0M6V8TUvA8Wb4yPeE= -github.com/PuerkitoBio/goquery v1.9.2/go.mod h1:GHPCaP0ODyyxqcNoFGYlAprUFH81NuRPd0GX3Zu2Mvk= github.com/PuerkitoBio/goquery v1.10.0 h1:6fiXdLuUvYs2OJSvNRqlNPoBm6YABE226xrbavY5Wv4= github.com/PuerkitoBio/goquery v1.10.0/go.mod h1:TjZZl68Q3eGHNBA8CWaxAN7rOU1EbDz3CWuolcO5Yu4= github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss= @@ -25,6 +23,13 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -35,8 +40,6 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -58,8 +61,6 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/internal/assets/templates.go b/internal/assets/templates.go index 0533b75..324f8ca 100644 --- a/internal/assets/templates.go +++ b/internal/assets/templates.go @@ -40,9 +40,10 @@ var ( GroupTemplate = compileTemplate("group.html", "widget-base.html") DNSStatsTemplate = compileTemplate("dns-stats.html", "widget-base.html") SplitColumnTemplate = compileTemplate("split-column.html", "widget-base.html") + CustomAPITemplate = compileTemplate("custom-api.html", "widget-base.html") ) -var globalTemplateFunctions = template.FuncMap{ +var GlobalTemplateFunctions = template.FuncMap{ "relativeTime": relativeTimeSince, "formatViewerCount": formatViewerCount, "formatNumber": intl.Sprint, @@ -59,7 +60,7 @@ var globalTemplateFunctions = template.FuncMap{ func compileTemplate(primary string, dependencies ...string) *template.Template { t, err := template.New(primary). - Funcs(globalTemplateFunctions). + Funcs(GlobalTemplateFunctions). ParseFS(TemplateFS, append([]string{primary}, dependencies...)...) if err != nil { diff --git a/internal/assets/templates/custom-api.html b/internal/assets/templates/custom-api.html new file mode 100644 index 0000000..e1f1f6f --- /dev/null +++ b/internal/assets/templates/custom-api.html @@ -0,0 +1,7 @@ +{{ template "widget-base.html" . }} + +{{ define "widget-content-classes" }}{{ if .Frameless }}widget-content-frameless{{ end }}{{ end }} + +{{ define "widget-content" }} +{{ .CompiledHTML }} +{{ end }} diff --git a/internal/feed/custom-api.go b/internal/feed/custom-api.go new file mode 100644 index 0000000..9a17785 --- /dev/null +++ b/internal/feed/custom-api.go @@ -0,0 +1,148 @@ +package feed + +import ( + "bytes" + "errors" + "html/template" + "io" + "log/slog" + "net/http" + + "github.com/glanceapp/glance/internal/assets" + "github.com/tidwall/gjson" +) + +func FetchAndParseCustomAPI(req *http.Request, tmpl *template.Template) (template.HTML, error) { + emptyBody := template.HTML("") + + resp, err := defaultClient.Do(req) + if err != nil { + return emptyBody, err + } + defer resp.Body.Close() + + bodyBytes, err := io.ReadAll(resp.Body) + if err != nil { + return emptyBody, err + } + + body := string(bodyBytes) + + if !gjson.Valid(body) { + truncatedBody, isTruncated := limitStringLength(body, 100) + if isTruncated { + truncatedBody += "... " + } + + slog.Error("invalid response JSON in custom API widget", "URL", req.URL.String(), "body", truncatedBody) + return emptyBody, errors.New("invalid response JSON") + } + + var templateBuffer bytes.Buffer + + data := CustomAPITemplateData{ + JSON: DecoratedGJSONResult{gjson.Parse(body)}, + Response: resp, + } + + err = tmpl.Execute(&templateBuffer, &data) + if err != nil { + return emptyBody, err + } + + return template.HTML(templateBuffer.String()), nil +} + +type DecoratedGJSONResult struct { + gjson.Result +} + +type CustomAPITemplateData struct { + JSON DecoratedGJSONResult + Response *http.Response +} + +func GJsonResultArrayToDecoratedResultArray(results []gjson.Result) []DecoratedGJSONResult { + decoratedResults := make([]DecoratedGJSONResult, len(results)) + + for i, result := range results { + decoratedResults[i] = DecoratedGJSONResult{result} + } + + return decoratedResults +} + +func (r *DecoratedGJSONResult) Array(key string) []DecoratedGJSONResult { + if key == "" { + return GJsonResultArrayToDecoratedResultArray(r.Result.Array()) + } + + return GJsonResultArrayToDecoratedResultArray(r.Get(key).Array()) +} + +func (r *DecoratedGJSONResult) String(key string) string { + if key == "" { + return r.Result.String() + } + + return r.Get(key).String() +} + +func (r *DecoratedGJSONResult) Int(key string) int64 { + if key == "" { + return r.Result.Int() + } + + return r.Get(key).Int() +} + +func (r *DecoratedGJSONResult) Float(key string) float64 { + if key == "" { + return r.Result.Float() + } + + return r.Get(key).Float() +} + +func (r *DecoratedGJSONResult) Bool(key string) bool { + if key == "" { + return r.Result.Bool() + } + + return r.Get(key).Bool() +} + +var CustomAPITemplateFuncs = func() template.FuncMap { + funcs := template.FuncMap{ + "toFloat": func(a int64) float64 { + return float64(a) + }, + "toInt": func(a float64) int64 { + return int64(a) + }, + "mathexpr": func(left float64, op string, right float64) float64 { + if right == 0 { + return 0 + } + + switch op { + case "+": + return left + right + case "-": + return left - right + case "*": + return left * right + case "/": + return left / right + default: + return 0 + } + }, + } + + for key, value := range assets.GlobalTemplateFunctions { + funcs[key] = value + } + + return funcs +}() diff --git a/internal/widget/custom-api.go b/internal/widget/custom-api.go new file mode 100644 index 0000000..df45940 --- /dev/null +++ b/internal/widget/custom-api.go @@ -0,0 +1,70 @@ +package widget + +import ( + "context" + "errors" + "fmt" + "html/template" + "net/http" + "time" + + "github.com/glanceapp/glance/internal/assets" + "github.com/glanceapp/glance/internal/feed" +) + +type CustomApi struct { + widgetBase `yaml:",inline"` + URL string `yaml:"url"` + Template string `yaml:"template"` + Frameless bool `yaml:"frameless"` + Headers map[string]OptionalEnvString `yaml:"headers"` + APIRequest *http.Request `yaml:"-"` + compiledTemplate *template.Template `yaml:"-"` + CompiledHTML template.HTML `yaml:"-"` +} + +func (widget *CustomApi) Initialize() error { + widget.withTitle("Custom API").withCacheDuration(1 * time.Hour) + + if widget.URL == "" { + return errors.New("URL is required for the custom API widget") + } + + if widget.Template == "" { + return errors.New("template is required for the custom API widget") + } + + compiledTemplate, err := template.New("").Funcs(feed.CustomAPITemplateFuncs).Parse(widget.Template) + + if err != nil { + return fmt.Errorf("failed parsing custom API widget template: %w", err) + } + + widget.compiledTemplate = compiledTemplate + + req, err := http.NewRequest(http.MethodGet, widget.URL, nil) + if err != nil { + return err + } + + for key, value := range widget.Headers { + req.Header.Add(key, value.String()) + } + + widget.APIRequest = req + + return nil +} + +func (widget *CustomApi) Update(ctx context.Context) { + compiledHTML, err := feed.FetchAndParseCustomAPI(widget.APIRequest, widget.compiledTemplate) + if !widget.canContinueUpdateAfterHandlingErr(err) { + return + } + + widget.CompiledHTML = compiledHTML +} + +func (widget *CustomApi) Render() template.HTML { + return widget.render(widget, assets.CustomAPITemplate) +} diff --git a/internal/widget/widget.go b/internal/widget/widget.go index 0837f43..c6c51a7 100644 --- a/internal/widget/widget.go +++ b/internal/widget/widget.go @@ -69,6 +69,8 @@ func New(widgetType string) (Widget, error) { widget = &DNSStats{} case "split-column": widget = &SplitColumn{} + case "custom-api": + widget = &CustomApi{} default: return nil, fmt.Errorf("unknown widget type: %s", widgetType) } From 6e5140d859bf3a632edcf0f0607f4da8238ea772 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Mon, 21 Oct 2024 23:49:09 +0100 Subject: [PATCH 36/48] Allow specifying headers in RSS feeds --- docs/configuration.md | 12 ++++++++++++ internal/feed/rss.go | 43 +++++++++++++++++++++++++++++++++---------- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 06e8731..c35df8c 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -527,10 +527,22 @@ An array of RSS/atom feeds. The title can optionally be changed. | hide-categories | boolean | no | false | Only applicable for `detailed-list` style | | hide-description | boolean | no | false | Only applicable for `detailed-list` style | | item-link-prefix | string | no | | | +| headers | key (string) & value (string) | no | | | ###### `item-link-prefix` If an RSS feed isn't returning item links with a base domain and Glance has failed to automatically detect the correct domain you can manually add a prefix to each link with this property. +###### `headers` +Optionally specify the headers that will be sent with the request. Example: + +```yaml +- type: rss + feeds: + - url: https://domain.com/rss + headers: + User-Agent: Custom User Agent +``` + ##### `limit` The maximum number of articles to show. diff --git a/internal/feed/rss.go b/internal/feed/rss.go index ec6ab2e..45cbb14 100644 --- a/internal/feed/rss.go +++ b/internal/feed/rss.go @@ -1,10 +1,11 @@ package feed import ( - "context" "fmt" "html" + "io" "log/slog" + "net/http" "net/url" "regexp" "sort" @@ -57,12 +58,13 @@ func shortenFeedDescriptionLen(description string, maxLen int) string { } type RSSFeedRequest struct { - Url string `yaml:"url"` - Title string `yaml:"title"` - HideCategories bool `yaml:"hide-categories"` - HideDescription bool `yaml:"hide-description"` - ItemLinkPrefix string `yaml:"item-link-prefix"` - IsDetailed bool `yaml:"-"` + Url string `yaml:"url"` + Title string `yaml:"title"` + HideCategories bool `yaml:"hide-categories"` + HideDescription bool `yaml:"hide-description"` + ItemLinkPrefix string `yaml:"item-link-prefix"` + Headers map[string]string `yaml:"headers"` + IsDetailed bool `yaml:"-"` } type RSSFeedItems []RSSFeedItem @@ -78,10 +80,31 @@ func (f RSSFeedItems) SortByNewest() RSSFeedItems { var feedParser = gofeed.NewParser() func getItemsFromRSSFeedTask(request RSSFeedRequest) ([]RSSFeedItem, error) { - ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) - defer cancel() + req, err := http.NewRequest("GET", request.Url, nil) + if err != nil { + return nil, err + } - feed, err := feedParser.ParseURLWithContext(request.Url, ctx) + for key, value := range request.Headers { + req.Header.Add(key, value) + } + + resp, err := defaultClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("unexpected status code %d from %s", resp.StatusCode, request.Url) + } + + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + + feed, err := feedParser.ParseString(string(body)) if err != nil { return nil, err From 1e2e66ecf776c0ec9a1b215d2bdb90f1b3d87e65 Mon Sep 17 00:00:00 2001 From: Oliver Mitchell Date: Tue, 29 Oct 2024 00:00:37 +1030 Subject: [PATCH 37/48] fix: non-whole-hour timezones now correctly shown on Clock Timezones that used non-whole-hour definitions (ie. Australia/ACDT) not correctly shown on the Clock widget. This fix changes how the difference is calculated to account for both minutes, and hours. Due to the change, the text shown for relative timezone differences also had to be changed. --- internal/assets/static/js/main.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/internal/assets/static/js/main.js b/internal/assets/static/js/main.js index ffa7eb7..13c9e40 100644 --- a/internal/assets/static/js/main.js +++ b/internal/assets/static/js/main.js @@ -502,9 +502,24 @@ function timeInZone(now, zone) { timeInZone = now } - const diffInHours = Math.round((timeInZone.getTime() - now.getTime()) / 1000 / 60 / 60); + const diffInMinutes = Math.round((timeInZone.getTime() - now.getTime()) / 1000 / 60); - return { time: timeInZone, diffInHours: diffInHours }; + return { time: timeInZone, diffInMinutes: diffInMinutes }; +} + +function zoneDiffText(diffInMinutes) { + if (diffInMinutes == 0) { + return ""; + } + + const sign = diffInMinutes < 0 ? "-" : "+"; + + diffInMinutes = Math.abs(diffInMinutes); + + const hours = `${Math.floor(diffInMinutes / 60)}`.padStart(2, '0'); + const minutes = `${diffInMinutes % 60}`.padStart(2, '0'); + + return `${sign}${hours}:${minutes}`; } function setupClocks() { @@ -547,9 +562,9 @@ function setupClocks() { ); updateCallbacks.push((now) => { - const { time, diffInHours } = timeInZone(now, timeZoneContainer.dataset.timeInZone); + const { time, diffInMinutes } = timeInZone(now, timeZoneContainer.dataset.timeInZone); setZoneTime(time); - diffElement.textContent = (diffInHours <= 0 ? diffInHours : '+' + diffInHours) + 'h'; + diffElement.textContent = zoneDiffText(diffInMinutes); }); } } From 2e3ed896ccf130d905b64ad91cc504c0fc5c163a Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Wed, 30 Oct 2024 15:25:30 +0000 Subject: [PATCH 38/48] Give clock time min width to avoid inconsistent layout for 12 hour format --- internal/assets/static/main.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/assets/static/main.css b/internal/assets/static/main.css index d5ab9bb..ab8a8aa 100644 --- a/internal/assets/static/main.css +++ b/internal/assets/static/main.css @@ -1339,6 +1339,10 @@ details[open] .summary::after { transform: translate(-50%, -50%); } +.clock-time { + min-width: 8ch; +} + .clock-time span { color: var(--color-text-highlight); } From de2db71e54b1b987b1b866a106ea95aef115531e Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Wed, 30 Oct 2024 15:30:34 +0000 Subject: [PATCH 39/48] Simplify clock zone diff text and add title for more details --- internal/assets/static/js/main.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/internal/assets/static/js/main.js b/internal/assets/static/js/main.js index 13c9e40..0c2a4d4 100644 --- a/internal/assets/static/js/main.js +++ b/internal/assets/static/js/main.js @@ -513,13 +513,23 @@ function zoneDiffText(diffInMinutes) { } const sign = diffInMinutes < 0 ? "-" : "+"; + const signText = diffInMinutes < 0 ? "behind" : "ahead"; diffInMinutes = Math.abs(diffInMinutes); - - const hours = `${Math.floor(diffInMinutes / 60)}`.padStart(2, '0'); - const minutes = `${diffInMinutes % 60}`.padStart(2, '0'); - return `${sign}${hours}:${minutes}`; + const hours = Math.floor(diffInMinutes / 60); + const minutes = diffInMinutes % 60; + const hourSuffix = hours == 1 ? "" : "s"; + + if (minutes == 0) { + return { text: `${sign}${hours}h`, title: `${hours} hour${hourSuffix} ${signText}` }; + } + + if (hours == 0) { + return { text: `${sign}${minutes}m`, title: `${minutes} minutes ${signText}` }; + } + + return { text: `${sign}${hours}h~`, title: `${hours} hour${hourSuffix} and ${minutes} minutes ${signText}` }; } function setupClocks() { @@ -564,7 +574,9 @@ function setupClocks() { updateCallbacks.push((now) => { const { time, diffInMinutes } = timeInZone(now, timeZoneContainer.dataset.timeInZone); setZoneTime(time); - diffElement.textContent = zoneDiffText(diffInMinutes); + const { text, title } = zoneDiffText(diffInMinutes); + diffElement.textContent = text; + diffElement.title = title; }); } } From 35038ed56b5dc658dfe38e08b949c724c9d29422 Mon Sep 17 00:00:00 2001 From: Eric Haughee Date: Wed, 30 Oct 2024 15:17:26 -0700 Subject: [PATCH 40/48] Add title prop to Market Name for full text of truncated names on hover --- internal/assets/templates/markets.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/assets/templates/markets.html b/internal/assets/templates/markets.html index a979321..5cb5213 100644 --- a/internal/assets/templates/markets.html +++ b/internal/assets/templates/markets.html @@ -6,7 +6,7 @@
      {{ .Symbol }} -
      {{ .Name }}
      +
      {{ .Name }}
      From c3c7f8b14f50793eae0d0ed5f9df80a2f70f7169 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Thu, 31 Oct 2024 18:23:39 +0000 Subject: [PATCH 41/48] Allow changing max columns on split columns widget --- docs/configuration.md | 1 + internal/assets/templates/split-column.html | 2 +- internal/widget/split-column.go | 5 +++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/configuration.md b/docs/configuration.md index c35df8c..bada197 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -948,6 +948,7 @@ Example: ``` ### Split Column + Splits a full sized column in half, allowing you to place widgets side by side. This is converted to a single column on mobile devices or if not enough width is available. Widgets are defined using a `widgets` property exactly as you would on a page column. Example of a full page with an effective 4 column layout using two split column widgets inside of two full sized columns: diff --git a/internal/assets/templates/split-column.html b/internal/assets/templates/split-column.html index d1d3386..63b4aea 100644 --- a/internal/assets/templates/split-column.html +++ b/internal/assets/templates/split-column.html @@ -3,7 +3,7 @@ {{ define "widget-content-classes" }}widget-content-frameless{{ end }} {{ define "widget-content" }} -
      +
      {{ range .Widgets }} {{ .Render }} {{ end }} diff --git a/internal/widget/split-column.go b/internal/widget/split-column.go index 88b9edb..74cb3d1 100644 --- a/internal/widget/split-column.go +++ b/internal/widget/split-column.go @@ -11,6 +11,7 @@ import ( type SplitColumn struct { widgetBase `yaml:",inline"` containerWidgetBase `yaml:",inline"` + MaxColumns int `yaml:"max-columns"` } func (widget *SplitColumn) Initialize() error { @@ -22,6 +23,10 @@ func (widget *SplitColumn) Initialize() error { } } + if widget.MaxColumns < 2 { + widget.MaxColumns = 2 + } + return nil } From 4582be1da5f8a49d465f44056856100b57cdec91 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Fri, 1 Nov 2024 22:57:06 +0000 Subject: [PATCH 42/48] Allow changing horizontal offset of popover --- internal/assets/static/js/popover.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/assets/static/js/popover.js b/internal/assets/static/js/popover.js index 42a9b57..533feed 100644 --- a/internal/assets/static/js/popover.js +++ b/internal/assets/static/js/popover.js @@ -111,9 +111,10 @@ function repositionContainer() { const containerBounds = containerElement.getBoundingClientRect(); const containerInlinePadding = parseInt(containerComputedStyle.getPropertyValue("padding-inline")); - const targetBoundsWidthOffset = targetBounds.width * (activeTarget.dataset.popoverOffset || 0.5); + const targetBoundsWidthOffset = targetBounds.width * (activeTarget.dataset.popoverTargetOffset || 0.5); const position = activeTarget.dataset.popoverPosition || "below"; - const left = Math.round(targetBounds.left + targetBoundsWidthOffset - (containerBounds.width / 2)); + const popoverOffest = activeTarget.dataset.popoverOffset || 0.5; + const left = Math.round(targetBounds.left + targetBoundsWidthOffset - (containerBounds.width * popoverOffest)); if (left < 0) { containerElement.style.left = 0; @@ -126,7 +127,7 @@ function repositionContainer() { } else { containerElement.style.removeProperty("right"); containerElement.style.left = left + "px"; - containerElement.style.removeProperty("--triangle-offset"); + containerElement.style.setProperty("--triangle-offset", ((targetBounds.left + targetBoundsWidthOffset) - left - containerInlinePadding) + "px"); } const distanceFromTarget = activeTarget.dataset.popoverMargin || defaultDistanceFromTarget; From 3914e24b3dfd9544970d9cff65adc888e64b4bc7 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Fri, 1 Nov 2024 22:57:34 +0000 Subject: [PATCH 43/48] Update twitch channel stream preview popover --- internal/assets/static/main.css | 3 ++- internal/assets/templates/twitch-channels.html | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/assets/static/main.css b/internal/assets/static/main.css index a0d8a68..72efaea 100644 --- a/internal/assets/static/main.css +++ b/internal/assets/static/main.css @@ -1509,7 +1509,8 @@ details[open] .summary::after { } .twitch-stream-preview { - width: 100%; + max-width: 100%; + width: 400px; aspect-ratio: 16 / 9; border-radius: var(--border-radius); object-fit: cover; diff --git a/internal/assets/templates/twitch-channels.html b/internal/assets/templates/twitch-channels.html index d2903d8..30529c5 100644 --- a/internal/assets/templates/twitch-channels.html +++ b/internal/assets/templates/twitch-channels.html @@ -5,7 +5,7 @@ {{ range .Channels }}
    • -
      +
      {{ if .IsLive }}
      From bacb607d902cd125c1e97d56d4b51ad56474cc54 Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sun, 3 Nov 2024 04:46:24 +0000 Subject: [PATCH 44/48] Allow using env variables in custom API URL --- internal/widget/custom-api.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/widget/custom-api.go b/internal/widget/custom-api.go index df45940..a7a69dd 100644 --- a/internal/widget/custom-api.go +++ b/internal/widget/custom-api.go @@ -14,7 +14,7 @@ import ( type CustomApi struct { widgetBase `yaml:",inline"` - URL string `yaml:"url"` + URL OptionalEnvString `yaml:"url"` Template string `yaml:"template"` Frameless bool `yaml:"frameless"` Headers map[string]OptionalEnvString `yaml:"headers"` @@ -42,7 +42,7 @@ func (widget *CustomApi) Initialize() error { widget.compiledTemplate = compiledTemplate - req, err := http.NewRequest(http.MethodGet, widget.URL, nil) + req, err := http.NewRequest(http.MethodGet, widget.URL.String(), nil) if err != nil { return err } From d0c4e9d8466a515a0f08d1b30a896cec0d843d2c Mon Sep 17 00:00:00 2001 From: 2Q2C0DE <2q2code@mxfer.com> Date: Thu, 14 Nov 2024 17:35:14 +1100 Subject: [PATCH 45/48] Add Dashboard Icons prefix support - defined new type IconSource and constants, presently supporting: - LocalFile - SimpleIcon - DashboardIcon - added new field to bookmarks and monitors to hold IconSource - adjusted IsSimpleIcon to get truthiness from IconSource field - generalised `toSimpleIconIfPrefixed` into `toRemoteResourceIconIfPrefixed`, adding support for `walkxcode`'s dashboard icons via CDN (svg) --- internal/widget/bookmarks.go | 16 +++++++++------- internal/widget/fields.go | 31 +++++++++++++++++++++++++------ internal/widget/monitor.go | 4 +++- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/internal/widget/bookmarks.go b/internal/widget/bookmarks.go index 962d540..1ad3390 100644 --- a/internal/widget/bookmarks.go +++ b/internal/widget/bookmarks.go @@ -13,12 +13,13 @@ type Bookmarks struct { Title string `yaml:"title"` Color *HSLColorField `yaml:"color"` Links []struct { - Title string `yaml:"title"` - URL string `yaml:"url"` - Icon string `yaml:"icon"` - IsSimpleIcon bool `yaml:"-"` - SameTab bool `yaml:"same-tab"` - HideArrow bool `yaml:"hide-arrow"` + Title string `yaml:"title"` + URL string `yaml:"url"` + Icon string `yaml:"icon"` + IsSimpleIcon bool `yaml:"-"` + IconSource IconSource `yaml:"-"` + SameTab bool `yaml:"same-tab"` + HideArrow bool `yaml:"hide-arrow"` } `yaml:"links"` } `yaml:"groups"` } @@ -33,7 +34,8 @@ func (widget *Bookmarks) Initialize() error { } link := &widget.Groups[g].Links[l] - link.Icon, link.IsSimpleIcon = toSimpleIconIfPrefixed(link.Icon) + link.Icon, link.IconSource = toRemoteResourceIconIfPrefixed(link.Icon) + link.IsSimpleIcon = link.IconSource == SimpleIcon } } diff --git a/internal/widget/fields.go b/internal/widget/fields.go index 9ae1eda..51f7d92 100644 --- a/internal/widget/fields.go +++ b/internal/widget/fields.go @@ -27,6 +27,14 @@ type HSLColorField struct { Lightness uint8 } +type IconSource uint8 + +const ( + LocalFile IconSource = iota + SimpleIcon + DashboardIcon +) + func (c *HSLColorField) String() string { return fmt.Sprintf("hsl(%d, %d%%, %d%%)", c.Hue, c.Saturation, c.Lightness) } @@ -156,13 +164,24 @@ func (f *OptionalEnvString) String() string { return string(*f) } -func toSimpleIconIfPrefixed(icon string) (string, bool) { - if !strings.HasPrefix(icon, "si:") { - return icon, false +func toRemoteResourceIconIfPrefixed(icon string) (string, IconSource) { + var prefix, iconstr string + + prefix, iconstr, found := strings.Cut(icon, ":") + + if !found { + return icon, LocalFile } - icon = strings.TrimPrefix(icon, "si:") - icon = "https://cdnjs.cloudflare.com/ajax/libs/simple-icons/11.14.0/" + icon + ".svg" + if prefix == "si" { + icon = "https://cdnjs.cloudflare.com/ajax/libs/simple-icons/11.14.0/" + iconstr + ".svg" + return icon, SimpleIcon + } - return icon, true + if prefix == "di" { + icon = "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/svg/" + iconstr + ".svg" + return icon, DashboardIcon + } + + return icon, LocalFile } diff --git a/internal/widget/monitor.go b/internal/widget/monitor.go index 06d7303..5ad4e20 100644 --- a/internal/widget/monitor.go +++ b/internal/widget/monitor.go @@ -49,6 +49,7 @@ type Monitor struct { Title string `yaml:"title"` IconUrl string `yaml:"icon"` IsSimpleIcon bool `yaml:"-"` + IconSource IconSource `yaml:"-"` SameTab bool `yaml:"same-tab"` StatusText string `yaml:"-"` StatusStyle string `yaml:"-"` @@ -61,7 +62,8 @@ func (widget *Monitor) Initialize() error { widget.withTitle("Monitor").withCacheDuration(5 * time.Minute) for i := range widget.Sites { - widget.Sites[i].IconUrl, widget.Sites[i].IsSimpleIcon = toSimpleIconIfPrefixed(widget.Sites[i].IconUrl) + widget.Sites[i].IconUrl, widget.Sites[i].IconSource = toRemoteResourceIconIfPrefixed(widget.Sites[i].IconUrl) + widget.Sites[i].IsSimpleIcon = widget.Sites[i].IconSource == SimpleIcon } return nil From d6569864134c4bec56b6251e399f0fb267995835 Mon Sep 17 00:00:00 2001 From: Doc Em Date: Thu, 14 Nov 2024 20:06:54 +1100 Subject: [PATCH 46/48] Add DashboardIcon (PNG) Support - Refactored to make better naming sense - Added capability to select between the PNG and SVG offerings of DashboardIcons --- internal/widget/bookmarks.go | 2 +- internal/widget/fields.go | 24 +++++++++++++++++++----- internal/widget/monitor.go | 2 +- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/internal/widget/bookmarks.go b/internal/widget/bookmarks.go index 1ad3390..b200610 100644 --- a/internal/widget/bookmarks.go +++ b/internal/widget/bookmarks.go @@ -34,7 +34,7 @@ func (widget *Bookmarks) Initialize() error { } link := &widget.Groups[g].Links[l] - link.Icon, link.IconSource = toRemoteResourceIconIfPrefixed(link.Icon) + link.Icon, link.IconSource = toIconURIIfPrefixed(link.Icon) link.IsSimpleIcon = link.IconSource == SimpleIcon } } diff --git a/internal/widget/fields.go b/internal/widget/fields.go index 51f7d92..ca6659a 100644 --- a/internal/widget/fields.go +++ b/internal/widget/fields.go @@ -30,7 +30,7 @@ type HSLColorField struct { type IconSource uint8 const ( - LocalFile IconSource = iota + IconURI IconSource = iota SimpleIcon DashboardIcon ) @@ -164,24 +164,38 @@ func (f *OptionalEnvString) String() string { return string(*f) } -func toRemoteResourceIconIfPrefixed(icon string) (string, IconSource) { +func toIconURIIfPrefixed(icon string) (string, IconSource) { var prefix, iconstr string prefix, iconstr, found := strings.Cut(icon, ":") if !found { - return icon, LocalFile + return icon, IconURI } + // syntax: si: if prefix == "si" { icon = "https://cdnjs.cloudflare.com/ajax/libs/simple-icons/11.14.0/" + iconstr + ".svg" return icon, SimpleIcon } + // syntax: di:[.svg|.png] if prefix == "di" { - icon = "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/svg/" + iconstr + ".svg" + // if the icon name is specified without extension, it is assumed to be wanting the SVG icon + // otherwise, specify the extension of either .svg or .png to use either of the CDN offerings + // any other extension will be interpreted as .svg + var basename, ext string + + basename, ext, found := strings.Cut(iconstr, ".") + + if !found { + ext = "svg" + basename = iconstr + } + + icon = "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/" + ext + "/" + basename + "." + ext return icon, DashboardIcon } - return icon, LocalFile + return icon, IconURI } diff --git a/internal/widget/monitor.go b/internal/widget/monitor.go index 5ad4e20..96715ec 100644 --- a/internal/widget/monitor.go +++ b/internal/widget/monitor.go @@ -62,7 +62,7 @@ func (widget *Monitor) Initialize() error { widget.withTitle("Monitor").withCacheDuration(5 * time.Minute) for i := range widget.Sites { - widget.Sites[i].IconUrl, widget.Sites[i].IconSource = toRemoteResourceIconIfPrefixed(widget.Sites[i].IconUrl) + widget.Sites[i].IconUrl, widget.Sites[i].IconSource = toIconURIIfPrefixed(widget.Sites[i].IconUrl) widget.Sites[i].IsSimpleIcon = widget.Sites[i].IconSource == SimpleIcon } From f7239137d6428824d2e5fa4cd88bd9cee116604d Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sat, 16 Nov 2024 06:37:05 +0000 Subject: [PATCH 47/48] Update icons implementation to use custom type --- internal/assets/static/main.css | 6 +-- internal/assets/templates/bookmarks.html | 4 +- internal/assets/templates/monitor.html | 4 +- internal/widget/bookmarks.go | 25 ++-------- internal/widget/fields.go | 59 +++++++++++++----------- internal/widget/monitor.go | 9 +--- 6 files changed, 44 insertions(+), 63 deletions(-) diff --git a/internal/assets/static/main.css b/internal/assets/static/main.css index d5ab9bb..4eb9ee6 100644 --- a/internal/assets/static/main.css +++ b/internal/assets/static/main.css @@ -1059,7 +1059,7 @@ details[open] .summary::after { opacity: 0.8; } -:root:not(.light-scheme) .simple-icon { +:root:not(.light-scheme) .flat-icon { filter: invert(1); } @@ -1355,7 +1355,7 @@ details[open] .summary::after { transition: filter 0.3s, opacity 0.3s; } -.monitor-site-icon.simple-icon { +.monitor-site-icon.flat-icon { opacity: 0.7; } @@ -1363,7 +1363,7 @@ details[open] .summary::after { opacity: 1; } -.monitor-site:hover .monitor-site-icon:not(.simple-icon) { +.monitor-site:hover .monitor-site-icon:not(.flat-icon) { filter: grayscale(0); } diff --git a/internal/assets/templates/bookmarks.html b/internal/assets/templates/bookmarks.html index a4e2c97..25afa4d 100644 --- a/internal/assets/templates/bookmarks.html +++ b/internal/assets/templates/bookmarks.html @@ -8,9 +8,9 @@
        {{ range .Links }}
      • - {{ if ne "" .Icon }} + {{ if ne "" .Icon.URL }}
        - +
        {{ end }}
        {{ .Title }} diff --git a/internal/assets/templates/monitor.html b/internal/assets/templates/monitor.html index b19f0e2..a70a426 100644 --- a/internal/assets/templates/monitor.html +++ b/internal/assets/templates/monitor.html @@ -21,8 +21,8 @@ {{ end }} {{ define "site" }} -{{ if .IconUrl }} - +{{ if .Icon.URL }} + {{ end }}
        {{ .Title }} diff --git a/internal/widget/bookmarks.go b/internal/widget/bookmarks.go index b200610..133fb28 100644 --- a/internal/widget/bookmarks.go +++ b/internal/widget/bookmarks.go @@ -13,32 +13,17 @@ type Bookmarks struct { Title string `yaml:"title"` Color *HSLColorField `yaml:"color"` Links []struct { - Title string `yaml:"title"` - URL string `yaml:"url"` - Icon string `yaml:"icon"` - IsSimpleIcon bool `yaml:"-"` - IconSource IconSource `yaml:"-"` - SameTab bool `yaml:"same-tab"` - HideArrow bool `yaml:"hide-arrow"` + Title string `yaml:"title"` + URL string `yaml:"url"` + Icon CustomIcon `yaml:"icon"` + SameTab bool `yaml:"same-tab"` + HideArrow bool `yaml:"hide-arrow"` } `yaml:"links"` } `yaml:"groups"` } func (widget *Bookmarks) Initialize() error { widget.withTitle("Bookmarks").withError(nil) - - for g := range widget.Groups { - for l := range widget.Groups[g].Links { - if widget.Groups[g].Links[l].Icon == "" { - continue - } - - link := &widget.Groups[g].Links[l] - link.Icon, link.IconSource = toIconURIIfPrefixed(link.Icon) - link.IsSimpleIcon = link.IconSource == SimpleIcon - } - } - widget.cachedHTML = widget.render(widget, assets.BookmarksTemplate) return nil diff --git a/internal/widget/fields.go b/internal/widget/fields.go index ca6659a..81d12a1 100644 --- a/internal/widget/fields.go +++ b/internal/widget/fields.go @@ -27,14 +27,6 @@ type HSLColorField struct { Lightness uint8 } -type IconSource uint8 - -const ( - IconURI IconSource = iota - SimpleIcon - DashboardIcon -) - func (c *HSLColorField) String() string { return fmt.Sprintf("hsl(%d, %d%%, %d%%)", c.Hue, c.Saturation, c.Lightness) } @@ -164,38 +156,49 @@ func (f *OptionalEnvString) String() string { return string(*f) } -func toIconURIIfPrefixed(icon string) (string, IconSource) { - var prefix, iconstr string +type CustomIcon struct { + URL string + IsFlatIcon bool + // TODO: along with whether the icon is flat, we also need to know + // whether the icon is black or white by default in order to properly + // invert the color based on the theme being light or dark +} - prefix, iconstr, found := strings.Cut(icon, ":") +func (i *CustomIcon) UnmarshalYAML(node *yaml.Node) error { + var value string + if err := node.Decode(&value); err != nil { + return err + } + prefix, icon, found := strings.Cut(value, ":") if !found { - return icon, IconURI + i.URL = value + return nil } - // syntax: si: - if prefix == "si" { - icon = "https://cdnjs.cloudflare.com/ajax/libs/simple-icons/11.14.0/" + iconstr + ".svg" - return icon, SimpleIcon - } - - // syntax: di:[.svg|.png] - if prefix == "di" { + switch prefix { + case "si": + i.URL = "https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/" + icon + ".svg" + i.IsFlatIcon = true + case "di": + // syntax: di:[.svg|.png] // if the icon name is specified without extension, it is assumed to be wanting the SVG icon // otherwise, specify the extension of either .svg or .png to use either of the CDN offerings // any other extension will be interpreted as .svg - var basename, ext string - - basename, ext, found := strings.Cut(iconstr, ".") - + basename, ext, found := strings.Cut(icon, ".") if !found { ext = "svg" - basename = iconstr + basename = icon } - icon = "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/" + ext + "/" + basename + "." + ext - return icon, DashboardIcon + if ext != "svg" && ext != "png" { + ext = "svg" + } + + i.URL = "https://cdn.jsdelivr.net/gh/walkxcode/dashboard-icons@master/" + ext + "/" + basename + "." + ext + default: + i.URL = value } - return icon, IconURI + return nil } diff --git a/internal/widget/monitor.go b/internal/widget/monitor.go index 96715ec..3376b0a 100644 --- a/internal/widget/monitor.go +++ b/internal/widget/monitor.go @@ -47,9 +47,7 @@ type Monitor struct { *feed.SiteStatusRequest `yaml:",inline"` Status *feed.SiteStatus `yaml:"-"` Title string `yaml:"title"` - IconUrl string `yaml:"icon"` - IsSimpleIcon bool `yaml:"-"` - IconSource IconSource `yaml:"-"` + Icon CustomIcon `yaml:"icon"` SameTab bool `yaml:"same-tab"` StatusText string `yaml:"-"` StatusStyle string `yaml:"-"` @@ -61,11 +59,6 @@ type Monitor struct { func (widget *Monitor) Initialize() error { widget.withTitle("Monitor").withCacheDuration(5 * time.Minute) - for i := range widget.Sites { - widget.Sites[i].IconUrl, widget.Sites[i].IconSource = toIconURIIfPrefixed(widget.Sites[i].IconUrl) - widget.Sites[i].IsSimpleIcon = widget.Sites[i].IconSource == SimpleIcon - } - return nil } From 1bba915aefaad55cd3d002ccca0eeaacfca3b6ea Mon Sep 17 00:00:00 2001 From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com> Date: Sat, 16 Nov 2024 06:37:09 +0000 Subject: [PATCH 48/48] Update docs --- docs/configuration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index 6f9d602..5d7049e 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -1097,7 +1097,7 @@ The URL which will be requested and its response will determine the status of th `icon` -Optional URL to an image which will be used as the icon for the site. Can be an external URL or internal via [server configured assets](#assets-path). You can also directly use [Simple Icons](https://simpleicons.org/) via a `si:` prefix: +Optional URL to an image which will be used as the icon for the site. Can be an external URL or internal via [server configured assets](#assets-path). You can also directly use [Simple Icons](https://simpleicons.org/) via a `si:` prefix or [Dashboard Icons](https://github.com/walkxcode/dashboard-icons) via a `di:` prefix: ```yaml icon: si:jellyfin @@ -1375,7 +1375,7 @@ An array of groups which can optionally have a title and a custom color. `icon` -URL pointing to an image. You can also directly use [Simple Icons](https://simpleicons.org/) via a `si:` prefix: +URL pointing to an image. You can also directly use [Simple Icons](https://simpleicons.org/) via a `si:` prefix or [Dashboard Icons](https://github.com/walkxcode/dashboard-icons) via a `di:` prefix: ```yaml icon: si:gmail