]> git.proxmox.com Git - pmg-gui.git/blobdiff - js/SpamInfoGrid.js
buildsys: makefiles convert to use simple parenthesis
[pmg-gui.git] / js / SpamInfoGrid.js
index 5939804a874422b24116af561fe5d46cbdeca4f7..00d6f97341e08969daec68d063a007fedd7ce98c 100644 (file)
@@ -1,56 +1,77 @@
-Ext.define('PMG.grid.SpamInfoGrid',{
+Ext.define('PMG.grid.SpamInfoGrid', {
     extend: 'Ext.grid.GridPanel',
     xtype: 'pmgSpamInfoGrid',
 
+    store: {
+       autoDestroy: true,
+       fields: ['desc', 'name', { type: 'number', name: 'score' }],
+       proxy: {
+           type: 'proxmox',
+           root: 'data.spaminfo',
+       },
+       sorters: 'score',
+    },
+
     setID: function(rec) {
-       var me = this;
-       if (!rec || !rec.data || !rec.data.id) {
+       let me = this;
+       let id = rec?.data?.id;
+       if (!id) {
            me.getStore().removeAll();
            return;
        }
-
-       me.setStore({
-           autoLoad: true,
-           autoDestroy: true,
-           fields: [ 'desc', 'name', { type: 'number', name: 'score' } ],
-           proxy: {
-               type: 'proxmox',
-               url: '/api2/json/quarantine/content?id='+rec.data.id,
-               root: 'data.spaminfo'
-           }
-       });
+       me.store.proxy.setUrl(`/api2/json/quarantine/content?id=${id}`);
+       me.store.load();
     },
 
     emptyText: gettext('No Spam Info'),
     hidden: true,
 
     features: [{
-       ftype: 'summary'
+       ftype: 'summary',
     }],
 
     columns: [
        {
            text: gettext('Test Name'),
            dataIndex: 'name',
-           flex: 2,
+           flex: 1,
            summaryType: 'count',
-           summaryRenderer: function(value, summaryData, dataIndex, metaData) {
-               return gettext('Spamscore');
-           }
+           summaryRenderer: _v => gettext('Spamscore'),
+           tdCls: 'txt-monospace',
        },
        {
            text: gettext('Score'),
            dataIndex: 'score',
            align: 'right',
+           tdCls: 'txt-monospace',
+           renderer: function(score, meta) {
+               if (score === 0) {
+                   return score;
+               }
+
+               let absScore = Math.abs(score), fontWeight = '400';
+               let background = score < 0 ? "--pmg-spam-mid-neg" : "--pmg-spam-mid-pos";
+
+               if (absScore >= 3) {
+                   fontWeight = '900';
+                   background = score < 0 ? "--pmg-spam-high-neg" : "--pmg-spam-high-pos";
+               } else if (absScore >= 1.5) {
+                   fontWeight = '600';
+               } else if (absScore <= 0.1) {
+                   fontWeight = '200';
+                   background = score < 0 ? "--pmg-spam-low-neg" : "--pmg-spam-low-pos";
+               }
+
+               meta.tdStyle = `font-weight: ${fontWeight};background-color: var(${background});`;
+               return score;
+           },
            summaryType: 'sum',
-           summaryRenderer: function(value, summaryData, dataIndex, metaData) {
-               return Ext.util.Format.round(value, 5);
-           }
+           summaryRenderer: value => Ext.util.Format.round(value, 5),
        },
        {
            text: gettext('Description'),
            dataIndex: 'desc',
-           flex: 3
-       }
+           flex: 2,
+       },
     ],
 });