]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - src/panel/GaugeWidget.js
1 Ext
.define('Proxmox.panel.GaugeWidget', {
2 extend
: 'Ext.panel.Panel',
3 alias
: 'widget.proxmoxGauge',
7 'text-align': 'center',
17 tpl
: '<h3>{title}</h3>',
23 // set to '-' to suppress warning in debug mode
24 downloadServerUrl
: '-',
40 textBaseline
: 'bottom',
55 warningThreshold
: 0.6,
56 criticalThreshold
: 0.9,
58 criticalColor
: '#FF6C59',
59 defaultColor
: '#c2ddf2',
60 backgroundColor
: '#f5f5f5',
64 checkThemeColors: function() {
66 let rootStyle
= getComputedStyle(document
.documentElement
);
69 let panelBg
= rootStyle
.getPropertyValue("--pwt-panel-background").trim() || "#ffffff";
70 let textColor
= rootStyle
.getPropertyValue("--pwt-text-color").trim() || "#000000";
71 me
.defaultColor
= rootStyle
.getPropertyValue("--pwt-gauge-default").trim() || '#c2ddf2';
72 me
.criticalColor
= rootStyle
.getPropertyValue("--pwt-gauge-crit").trim() || '#ff6c59';
73 me
.warningColor
= rootStyle
.getPropertyValue("--pwt-gauge-warn").trim() || '#fc0';
74 me
.backgroundColor
= rootStyle
.getPropertyValue("--pwt-gauge-back").trim() || '#f5f5f5';
77 let value
= me
.chart
.series
[0].getValue() / 100;
79 let color
= me
.defaultColor
;
81 if (value
>= me
.criticalThreshold
) {
82 color
= me
.criticalColor
;
83 } else if (value
>= me
.warningThreshold
) {
84 color
= me
.warningColor
;
87 me
.chart
.series
[0].setColors([color
, me
.backgroundColor
]);
89 // set text and background colors
90 me
.chart
.setBackground(panelBg
);
91 me
.valueSprite
.setAttributes({ fillStyle
: textColor
}, true);
95 updateValue: function(value
, text
) {
97 let color
= me
.defaultColor
;
100 if (value
>= me
.criticalThreshold
) {
101 color
= me
.criticalColor
;
102 } else if (value
>= me
.warningThreshold
) {
103 color
= me
.warningColor
;
106 me
.chart
.series
[0].setColors([color
, me
.backgroundColor
]);
107 me
.chart
.series
[0].setValue(value
*100);
109 me
.valueSprite
.setText(' '+(value
*100).toFixed(0) + '%');
110 attr
.x
= me
.chart
.getWidth()/2;
111 attr
.y
= me
.chart
.getHeight()-20;
112 if (me
.spriteFontSize
) {
113 attr
.fontSize
= me
.spriteFontSize
;
115 me
.valueSprite
.setAttributes(attr
, true);
117 if (text
!== undefined) {
118 me
.text
.setHtml(text
);
122 initComponent: function() {
128 me
.getComponent('title').update({ title
: me
.title
});
130 me
.text
= me
.getComponent('text');
131 me
.chart
= me
.getComponent('chart');
132 me
.valueSprite
= me
.chart
.getSurface('chart').get('valueSprite');
134 me
.checkThemeColors();
136 // switch colors on media query changes
137 me
.mediaQueryList
= window
.matchMedia("(prefers-color-scheme: dark)");
138 me
.themeListener
= (e
) => { me
.checkThemeColors(); };
139 me
.mediaQueryList
.addEventListener("change", me
.themeListener
);
142 doDestroy: function() {
145 me
.mediaQueryList
.removeEventListener("change", me
.themeListener
);