@@ -152,6 +152,80 @@ if (check_all) {
152152 } ) ;
153153}
154154
155+ /**
156+ * Ajax panels
157+ */
158+ document . addEventListener ( 'DOMContentLoaded' , function ( ) {
159+ function updateProgressBar ( progress_element , percentage ) {
160+ const type = progress_element . dataset . type ;
161+ let color_class ;
162+
163+ if ( type === 'higher' ) {
164+ if ( percentage >= 80 ) {
165+ color_class = 'bg-green-600' ;
166+ } else if ( percentage >= 50 ) {
167+ color_class = 'bg-orange-600' ;
168+ } else {
169+ color_class = 'bg-red-600' ;
170+ }
171+ } else {
172+ if ( percentage <= 50 ) {
173+ color_class = 'bg-green-600' ;
174+ } else if ( percentage <= 80 ) {
175+ color_class = 'bg-orange-600' ;
176+ } else {
177+ color_class = 'bg-red-600' ;
178+ }
179+ }
180+
181+ progress_element . classList . remove ( 'bg-red-600' , 'bg-orange-600' , 'bg-green-600' ) ;
182+ progress_element . classList . add ( color_class ) ;
183+ progress_element . style . width = percentage + '%' ;
184+ }
185+
186+ function updateElement ( panel_element , key , value ) {
187+ const element = panel_element . querySelector ( `[data-value="${ key } "]` ) ;
188+
189+ if ( ! element ) return ;
190+
191+ if ( Array . isArray ( value ) ) {
192+ element . textContent = value [ 0 ] ;
193+ const progress_element = document . getElementById ( key + '_progress' ) ;
194+ if ( progress_element ) {
195+ updateProgressBar ( progress_element , value [ 1 ] ) ;
196+ }
197+ } else {
198+ element . textContent = value ;
199+ }
200+ }
201+
202+ function refreshPanels ( ) {
203+ ajax ( 'panels' , function ( request ) {
204+ if ( request . currentTarget . status >= 200 && request . currentTarget . status < 400 ) {
205+ const data = JSON . parse ( request . currentTarget . response ) ;
206+
207+ for ( const section_key in data ) {
208+ const panel_element = document . getElementById ( section_key + '_panel' ) ;
209+
210+ if ( panel_element ) {
211+ const section_data = data [ section_key ] ;
212+ for ( const item_key in section_data ) {
213+ updateElement ( panel_element , item_key , section_data [ item_key ] ) ;
214+ }
215+ }
216+ }
217+ } else {
218+ console . error ( 'Error fetching panel data.' ) ;
219+ }
220+ } ) ;
221+ }
222+
223+ if ( ajax_panels ) {
224+ refreshPanels ( ) ;
225+ setInterval ( refreshPanels , panels_refresh_interval ) ;
226+ }
227+ } ) ;
228+
155229/**
156230 * JSON syntax highlighter
157231 */
0 commit comments