commit 9f5b7b4: [Minor] Combine history table column definitions

moisseev moiseev at mezonplus.ru
Mon Jul 29 17:50:56 UTC 2024


Author: moisseev
Date: 2023-12-29 13:32:37 +0300
URL: https://github.com/rspamd/rspamd/commit/9f5b7b4264eed536c127633b42a30cbe30cc2859

[Minor] Combine history table column definitions

---
 interface/js/app/history.js | 118 +---------------------------------------
 interface/js/app/libft.js   | 130 +++++++++++++++++++++++++++++++++++++++++++-
 interface/js/app/upload.js  |  58 +-------------------
 3 files changed, 132 insertions(+), 174 deletions(-)

diff --git a/interface/js/app/history.js b/interface/js/app/history.js
index 58d835fba..f2b8b8e46 100644
--- a/interface/js/app/history.js
+++ b/interface/js/app/history.js
@@ -58,118 +58,6 @@ define(["jquery", "app/common", "app/libft", "d3", "footable"],
             return {items: items};
         }
 
-        function columns_v2() {
-            return [{
-                name: "id",
-                title: "ID",
-                style: {
-                    minWidth: 130,
-                    overflow: "hidden",
-                    textOverflow: "ellipsis",
-                    wordBreak: "break-all",
-                    whiteSpace: "normal"
-                }
-            }, {
-                name: "ip",
-                title: "IP address",
-                breakpoints: "xs sm md",
-                style: {
-                    "minWidth": "calc(7.6em + 8px)",
-                    "word-break": "break-all"
-                }
-            }, {
-                name: "sender_mime",
-                title: "[Envelope From] From",
-                breakpoints: "xs sm md",
-                style: {
-                    "minWidth": 100,
-                    "maxWidth": 200,
-                    "word-wrap": "break-word"
-                }
-            }, {
-                name: "rcpt_mime_short",
-                title: "[Envelope To] To/Cc/Bcc",
-                breakpoints: "xs sm md",
-                filterable: false,
-                classes: "d-none d-xl-table-cell",
-                style: {
-                    "minWidth": 100,
-                    "maxWidth": 200,
-                    "word-wrap": "break-word"
-                }
-            }, {
-                name: "rcpt_mime",
-                title: "[Envelope To] To/Cc/Bcc",
-                breakpoints: "all",
-                style: {"word-wrap": "break-word"}
-            }, {
-                name: "subject",
-                title: "Subject",
-                breakpoints: "xs sm md",
-                style: {
-                    "word-break": "break-all",
-                    "minWidth": 150
-                }
-            }, {
-                name: "action",
-                title: "Action",
-                style: {minwidth: 82}
-            }, {
-                name: "score",
-                title: "Score",
-                style: {
-                    "maxWidth": 110,
-                    "text-align": "right",
-                    "white-space": "nowrap"
-                },
-                sortValue: function (val) { return Number(val.options.sortValue); }
-            }, {
-                name: "symbols",
-                title: "Symbols" +
-                        '<div class="sym-order-toggle">' +
-                            '<br><span style="font-weight:normal;">Sort by:</span><br>' +
-                            '<div class="btn-group btn-group-xs btn-sym-order-history">' +
-                                '<label type="button" class="btn btn-outline-secondary btn-sym-history-magnitude">' +
-                                    '<input type="radio" class="btn-check" value="magnitude">Magnitude</label>' +
-                                '<label type="button" class="btn btn-outline-secondary btn-sym-history-score">' +
-                                    '<input type="radio" class="btn-check" value="score">Value</label>' +
-                                '<label type="button" class="btn btn-outline-secondary btn-sym-history-name">' +
-                                    '<input type="radio" class="btn-check" value="name">Name</label>' +
-                            "</div>" +
-                        "</div>",
-                breakpoints: "all",
-                style: {width: 550, maxWidth: 550}
-            }, {
-                name: "size",
-                title: "Msg size",
-                breakpoints: "xs sm md",
-                style: {minwidth: 50},
-                formatter: d3.format(".3~s")
-            }, {
-                name: "time_real",
-                title: "Scan time",
-                breakpoints: "xs sm md",
-                style: {maxWidth: 72},
-                sortValue: function (val) { return Number(val); }
-            }, {
-                classes: "history-col-time",
-                sorted: true,
-                direction: "DESC",
-                name: "time",
-                title: "Time",
-                sortValue: function (val) { return Number(val.options.sortValue); }
-            }, {
-                name: "user",
-                title: "Authenticated user",
-                breakpoints: "xs sm md",
-                style: {
-                    "minWidth": 100,
-                    "maxWidth": 130,
-                    "word-wrap": "break-word"
-                }
-            }];
-        }
-
         function columns_legacy() {
             return [{
                 name: "id",
@@ -228,8 +116,8 @@ define(["jquery", "app/common", "app/libft", "d3", "footable"],
         }
 
         const columns = {
-            2: columns_v2,
-            legacy: columns_legacy
+            2: libft.columns_v2("history"),
+            legacy: columns_legacy()
         };
 
         function process_history_data(data) {
@@ -259,7 +147,7 @@ define(["jquery", "app/common", "app/libft", "d3", "footable"],
                 }
             }
 
-            return func();
+            return func;
         }
 
         ui.getHistory = function () {
diff --git a/interface/js/app/libft.js b/interface/js/app/libft.js
index 58262d22f..eab3b6d3a 100644
--- a/interface/js/app/libft.js
+++ b/interface/js/app/libft.js
@@ -1,7 +1,7 @@
 /* global FooTable */
 
-define(["jquery", "app/common", "footable"],
-    ($, common) => {
+define(["jquery", "app/common", "d3", "footable"],
+    ($, common, d3) => {
         "use strict";
         const ui = {};
 
@@ -35,6 +35,132 @@ define(["jquery", "app/common", "footable"],
 
         // Public functions
 
+        ui.columns_v2 = function (table) {
+            return [{
+                name: "id",
+                title: "ID",
+                style: {
+                    minWidth: 130,
+                    overflow: "hidden",
+                    textOverflow: "ellipsis",
+                    wordBreak: "break-all",
+                    whiteSpace: "normal"
+                }
+            }, {
+                name: "ip",
+                title: "IP address",
+                breakpoints: "xs sm md",
+                style: {
+                    "minWidth": "calc(7.6em + 8px)",
+                    "word-break": "break-all"
+                }
+            }, {
+                name: "sender_mime",
+                title: "[Envelope From] From",
+                breakpoints: "xs sm md",
+                style: {
+                    "minWidth": 100,
+                    "maxWidth": 200,
+                    "word-wrap": "break-word"
+                }
+            }, {
+                name: "rcpt_mime_short",
+                title: "[Envelope To] To/Cc/Bcc",
+                breakpoints: "xs sm md",
+                filterable: false,
+                classes: "d-none d-xl-table-cell",
+                style: {
+                    "minWidth": 100,
+                    "maxWidth": 200,
+                    "word-wrap": "break-word"
+                }
+            }, {
+                name: "rcpt_mime",
+                title: "[Envelope To] To/Cc/Bcc",
+                breakpoints: "all",
+                style: {"word-wrap": "break-word"}
+            }, {
+                name: "subject",
+                title: "Subject",
+                breakpoints: "xs sm md",
+                style: {
+                    "word-break": "break-all",
+                    "minWidth": 150
+                }
+            }, {
+                name: "action",
+                title: "Action",
+                style: {minwidth: 82}
+            }, {
+                name: "passthrough_module",
+                title: '<div title="The module that has set the pre-result">Pass-through module</div>',
+                breakpoints: "xs sm md"
+            }, {
+                name: "score",
+                title: "Score",
+                style: {
+                    "maxWidth": 110,
+                    "text-align": "right",
+                    "white-space": "nowrap"
+                },
+                sortValue: function (val) { return Number(val.options.sortValue); }
+            }, {
+                name: "symbols",
+                title: "Symbols" +
+                        '<div class="sym-order-toggle">' +
+                            '<br><span style="font-weight:normal;">Sort by:</span><br>' +
+                            '<div class="btn-group btn-group-xs btn-sym-order-' + table + '">' +
+                                '<label type="button" class="btn btn-outline-secondary btn-sym-' + table + '-magnitude">' +
+                                    '<input type="radio" class="btn-check" value="magnitude">Magnitude</label>' +
+                                '<label type="button" class="btn btn-outline-secondary btn-sym-' + table + '-score">' +
+                                    '<input type="radio" class="btn-check" value="score">Value</label>' +
+                                '<label type="button" class="btn btn-outline-secondary btn-sym-' + table + '-name">' +
+                                    '<input type="radio" class="btn-check" value="name">Name</label>' +
+                            "</div>" +
+                        "</div>",
+                breakpoints: "all",
+                style: {width: 550, maxWidth: 550}
+            }, {
+                name: "size",
+                title: "Msg size",
+                breakpoints: "xs sm md",
+                style: {minwidth: 50},
+                formatter: d3.format(".3~s")
+            }, {
+                name: "time_real",
+                title: "Scan time",
+                breakpoints: "xs sm md",
+                style: {maxWidth: 72},
+                sortValue: function (val) { return Number(val); }
+            }, {
+                classes: "history-col-time",
+                sorted: true,
+                direction: "DESC",
+                name: "time",
+                title: "Time",
+                sortValue: function (val) { return Number(val.options.sortValue); }
+            }, {
+                name: "user",
+                title: "Authenticated user",
+                breakpoints: "xs sm md",
+                style: {
+                    "minWidth": 100,
+                    "maxWidth": 130,
+                    "word-wrap": "break-word"
+                }
+            }].filter((col) => {
+                switch (table) {
+                    case "history":
+                        return (col.name !== "passthrough_module");
+                    case "scan":
+                        return ["ip", "sender_mime", "rcpt_mime_short", "rcpt_mime", "subject", "size", "user"]
+                            .every((name) => col.name !== name);
+                    default:
+                        return null;
+                }
+            });
+        };
+
         ui.set_page_size = function (table, page_size, changeTablePageSize) {
             const n = parseInt(page_size, 10); // HTML Input elements return string representing a number
             if (n > 0) {
diff --git a/interface/js/app/upload.js b/interface/js/app/upload.js
index e5ddb1c84..546f5cc84 100644
--- a/interface/js/app/upload.js
+++ b/interface/js/app/upload.js
@@ -73,62 +73,6 @@ define(["jquery", "app/common", "app/libft"],
             });
         }
 
-        function columns_v2() {
-            return [{
-                name: "id",
-                title: "ID",
-                style: {
-                    minWidth: 130,
-                    overflow: "hidden",
-                    textOverflow: "ellipsis",
-                    wordBreak: "break-all",
-                    whiteSpace: "normal"
-                }
-            }, {
-                name: "action",
-                title: "Action",
-                style: {minwidth: 82}
-            }, {
-                name: "passthrough_module",
-                title: '<div title="The module that has set the pre-result">Pass-through module</div>',
-                breakpoints: "xs sm md"
-            }, {
-                name: "score",
-                title: "Score",
-                style: {maxWidth: 110},
-                sortValue: function (val) { return Number(val.options.sortValue); }
-            }, {
-                name: "symbols",
-                title: "Symbols" +
-                        '<div class="sym-order-toggle">' +
-                            '<br><span style="font-weight:normal;">Sort by:</span><br>' +
-                            '<div class="btn-group btn-group-xs btn-sym-order-scan">' +
-                                '<label type="button" class="btn btn-outline-secondary btn-sym-scan-magnitude">' +
-                                    '<input type="radio" class="btn-check" value="magnitude">Magnitude</label>' +
-                                '<label type="button" class="btn btn-outline-secondary btn-sym-scan-score">' +
-                                    '<input type="radio" class="btn-check" value="score">Value</label>' +
-                                '<label type="button" class="btn btn-outline-secondary btn-sym-scan-name">' +
-                                    '<input type="radio" class="btn-check" value="name">Name</label>' +
-                            "</div>" +
-                        "</div>",
-                breakpoints: "all",
-                style: {width: 550, maxWidth: 550}
-            }, {
-                name: "time_real",
-                title: "Scan time",
-                breakpoints: "xs sm md",
-                style: {maxWidth: 72},
-                sortValue: function (val) { return Number(val); }
-            }, {
-                classes: "history-col-time",
-                sorted: true,
-                direction: "DESC",
-                name: "time",
-                title: "Time",
-                sortValue: function (val) { return Number(val.options.sortValue); }
-            }];
-        }
-
         function get_server() {
             const checked_server = common.getSelector("selSrv");
             return (checked_server === "All SERVERS") ? "local" : checked_server;
@@ -171,7 +115,7 @@ define(["jquery", "app/common", "app/libft"],
                             require(["footable"], () => {
                                 // Is there a way to get an event when the table is destroyed?
                                 setTimeout(() => {
-                                    libft.initHistoryTable(data, items, "scan", columns_v2(), true);
+                                    libft.initHistoryTable(data, items, "scan", libft.columns_v2("scan"), true);
                                     scrollTop(rows_total);
                                 }, 200);
                             });


More information about the Commits mailing list