#11 - Initial theme support

This commit is contained in:
jamesread 2021-07-11 21:01:00 +01:00
parent 9e21307dfd
commit 2f26aa65a6
3 changed files with 33 additions and 18 deletions

View File

@ -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

View File

@ -12,6 +12,7 @@ import (
type webUISettings struct {
Rest string
ThemeName string
}
func findWebuiDir() string {
@ -33,14 +34,7 @@ func findWebuiDir() string {
return "./webui" // Should not exist
}
func startWebUIServer(cfg *config.Config) {
log.WithFields(log.Fields{
"address": cfg.ListenAddressWebUI,
}).Info("Starting WebUI server")
mux := http.NewServeMux()
mux.Handle("/", http.FileServer(http.Dir(findWebuiDir())))
mux.HandleFunc("/webUiSettings.json", func(w http.ResponseWriter, r *http.Request) {
func generateWebUiSettings(w http.ResponseWriter, r *http.Request) {
restAddress := ""
if !cfg.UseSingleHTTPFrontend {
@ -49,10 +43,20 @@ func startWebUIServer(cfg *config.Config) {
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,
}).Info("Starting WebUI server")
mux := http.NewServeMux()
mux.Handle("/", http.FileServer(http.Dir(findWebuiDir())))
mux.HandleFunc("/webUiSettings.json", generateWebUiSettings)
srv := &http.Server{
Addr: cfg.ListenAddressWebUI,

View File

@ -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)
})