From: Alexander Moisseev Date: Thu, 5 Feb 2026 09:06:48 +0000 (+0300) Subject: [Fix] WebUI: Allow computing fuzzy hashes without writable storages X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=50273d34b91fa5367a145f87768b76d7236a9f0f;p=thirdparty%2Frspamd.git [Fix] WebUI: Allow computing fuzzy hashes without writable storages --- diff --git a/interface/js/app/upload.js b/interface/js/app/upload.js index b3b463986e..d8d84e6cc0 100644 --- a/interface/js/app/upload.js +++ b/interface/js/app/upload.js @@ -350,12 +350,18 @@ define(["jquery", "app/common", "app/libft"], { picker: "#fuzzy-flag-picker", input: "#fuzzy-flag", - container: ($picker) => $picker.parent() + container: ($picker) => $picker.parent(), + includeReadOnly: true, + requiresWritable: false, + emptyText: "No fuzzy storages" }, { picker: "#fuzzyFlagText-picker", input: "#fuzzyFlagText", - container: ($picker) => $picker.closest("div.card") + container: ($picker) => $picker.closest("div.card"), + includeReadOnly: false, + requiresWritable: true, + emptyText: "No writable storages" } ]; @@ -366,8 +372,10 @@ define(["jquery", "app/common", "app/libft"], }); } - function setWidgetsDisabled(disable) { - fuzzyWidgets.forEach(({picker, container}) => { + function setWidgetsDisabled(disable, predicate = () => true) { + fuzzyWidgets.forEach((widget) => { + if (!predicate(widget)) return; + const {picker, container} = widget; container($(picker))[disable ? "addClass" : "removeClass"]("disabled"); }); } @@ -384,25 +392,30 @@ define(["jquery", "app/common", "app/libft"], const hasWritableStorages = Object.keys(storages).some((name) => !storages[name].read_only); toggleWidgets(true, false); - setWidgetsDisabled(!hasWritableStorages); + setWidgetsDisabled(!hasWritableStorages, (widget) => widget.requiresWritable); - fuzzyWidgets.forEach(({picker, input}) => { + fuzzyWidgets.forEach((widget) => { + const {picker, input, includeReadOnly, emptyText} = widget; const $sel = $(picker); $sel.empty(); - if (hasWritableStorages) { - Object.entries(storages).forEach(([name, info]) => { - if (!info.read_only) { - Object.entries(info.flags).forEach(([symbol, val]) => { - $sel.append($("