by integrating the theme switching logic into the chart panel itself,
themes can be switched more responsively based on css variables.

Signed-off-by: Stefan Sterz <s.st...@proxmox.com>
---
 src/panel/RRDChart.js | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/src/panel/RRDChart.js b/src/panel/RRDChart.js
index 263070a..dc5940c 100644
--- a/src/panel/RRDChart.js
+++ b/src/panel/RRDChart.js
@@ -183,6 +183,27 @@ Ext.define('Proxmox.widget.RRDChart', {
        me.callParent([config]);
     },
 
+    checkThemeColors: function() {
+       let me = this;
+       let rootStyle = getComputedStyle(document.documentElement);
+
+       // get colors
+       let background = 
rootStyle.getPropertyValue("--pwt-panel-background").trim() || "#ffffff";
+       let text = rootStyle.getPropertyValue("--pwt-text-color").trim() || 
"#000000";
+       let primary = rootStyle.getPropertyValue("--pwt-chart-primary").trim() 
|| "#000000";
+       let gridStroke = 
rootStyle.getPropertyValue("--pwt-chart-grid-stroke").trim() || "#dddddd";
+
+       // set the colors
+       me.setBackground(background);
+       me.axes.forEach((axis) => {
+               axis.setLabel({ color: text });
+               axis.setTitle({ color: text });
+               axis.setStyle({ strokeStyle: primary });
+               axis.setGrid({ stroke: gridStroke });
+       });
+       me.redraw();
+    },
+
     initComponent: function() {
        let me = this;
 
@@ -275,5 +296,21 @@ Ext.define('Proxmox.widget.RRDChart', {
                easing: 'easeIn',
            });
        }, this, { single: true });
+
+
+       me.checkThemeColors();
+
+       // switch colors on media query changes
+       me.mediaQueryList = window.matchMedia("(prefers-color-scheme: dark)");
+       me.themeListener = (e) => { me.checkThemeColors(); };
+       me.mediaQueryList.addEventListener("change", me.themeListener);
+    },
+
+    doDestroy: function() {
+       let me = this;
+
+       me.mediaQueryList.removeEventListener("change", me.themeListener);
+
+       me.callParent();
     },
 });
-- 
2.30.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to