From 2f26aa65a64088e0999af0d52231b5570cd337e4 Mon Sep 17 00:00:00 2001 From: jamesread Date: Sun, 11 Jul 2021 21:01:00 +0100 Subject: [PATCH] #11 - Initial theme support --- internal/config/config.go | 1 + internal/httpservers/webuiServer.go | 30 ++++++++++++++++------------- webui/main.js | 20 ++++++++++++++----- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/internal/config/config.go b/internal/config/config.go index 787c7fb..7d3bd6b 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -24,6 +24,7 @@ type Entity struct { // Config is the global config used through the whole app. type Config struct { UseSingleHTTPFrontend bool + ThemeName string ListenAddressSingleHTTPFrontend string ListenAddressWebUI string ListenAddressRestActions string diff --git a/internal/httpservers/webuiServer.go b/internal/httpservers/webuiServer.go index a591cc4..5206410 100644 --- a/internal/httpservers/webuiServer.go +++ b/internal/httpservers/webuiServer.go @@ -12,6 +12,7 @@ import ( type webUISettings struct { Rest string + ThemeName string } func findWebuiDir() string { @@ -33,6 +34,21 @@ func findWebuiDir() string { return "./webui" // Should not exist } +func generateWebUiSettings(w http.ResponseWriter, r *http.Request) { + restAddress := "" + + if !cfg.UseSingleHTTPFrontend { + restAddress = cfg.ExternalRestAddress + } + + jsonRet, _ := json.Marshal(webUISettings{ + Rest: restAddress + "/api/", + ThemeName: cfg.ThemeName, + }) + + w.Write([]byte(jsonRet)) +} + func startWebUIServer(cfg *config.Config) { log.WithFields(log.Fields{ "address": cfg.ListenAddressWebUI, @@ -40,19 +56,7 @@ func startWebUIServer(cfg *config.Config) { mux := http.NewServeMux() mux.Handle("/", http.FileServer(http.Dir(findWebuiDir()))) - mux.HandleFunc("/webUiSettings.json", func(w http.ResponseWriter, r *http.Request) { - restAddress := "" - - if !cfg.UseSingleHTTPFrontend { - restAddress = cfg.ExternalRestAddress - } - - jsonRet, _ := json.Marshal(webUISettings{ - Rest: restAddress + "/api/", - }) - - w.Write([]byte(jsonRet)) - }) + mux.HandleFunc("/webUiSettings.json", generateWebUiSettings) srv := &http.Server{ Addr: cfg.ListenAddressWebUI, diff --git a/webui/main.js b/webui/main.js index d2a095d..f89f8c8 100644 --- a/webui/main.js +++ b/webui/main.js @@ -27,17 +27,27 @@ function fetchGetButtons() { }) } -function onInitialLoad (res) { - window.restBaseUrl = res.Rest +function processWebuiSettingsJson (settings) { + window.restBaseUrl = settings.Rest - window.buttonInterval = setInterval(fetchGetButtons, 3000); - fetchGetButtons() + if (settings.ThemeName) { + var themeCss = document.createElement('link') + themeCss.setAttribute('rel', 'stylesheet'); + themeCss.setAttribute('type', 'text/css') + themeCss.setAttribute('href', '/themes/' + settings.ThemeName + '/theme.css'); + + document.head.appendChild(themeCss); + } } window.fetch('webUiSettings.json').then(res => { return res.json() }).then(res => { - onInitialLoad(res) + processWebuiSettingsJson(res) + + fetchGetButtons() + + window.buttonInterval = setInterval(fetchGetButtons, 3000); }).catch(err => { showBigError('fetch-webui-settings', 'getting webui settings', err) })