Parcourir la source

#11 - Initial theme support

jamesread il y a 5 ans
Parent
commit
2f26aa65a6
3 fichiers modifiés avec 33 ajouts et 18 suppressions
  1. 1 0
      internal/config/config.go
  2. 17 13
      internal/httpservers/webuiServer.go
  3. 15 5
      webui/main.js

+ 1 - 0
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

+ 17 - 13
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,

+ 15 - 5
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)
 })