From 7f0134108ac2994bee1a3d67f48499b9fd280eef Mon Sep 17 00:00:00 2001 From: skomerko <168652295+skomerko@users.noreply.github.com> Date: Thu, 13 Feb 2025 20:33:28 +0100 Subject: [PATCH 1/6] WebUI: Use classlist property to set cell class in trackers table --- src/webui/www/private/scripts/dynamicTable.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/webui/www/private/scripts/dynamicTable.js b/src/webui/www/private/scripts/dynamicTable.js index 7bc794a2a..1d5c54278 100644 --- a/src/webui/www/private/scripts/dynamicTable.js +++ b/src/webui/www/private/scripts/dynamicTable.js @@ -2058,7 +2058,11 @@ window.qBittorrent.DynamicTable ??= (() => { break; } - td.className = statusClass; + for (const c of [...td.classList]) { + if (c.startsWith("tracker")) + td.classList.remove(c); + } + td.classList.add(statusClass); td.textContent = status; td.title = status; }; From f58d6ae98474bee8aa8dd3360324e810f707d1b1 Mon Sep 17 00:00:00 2001 From: skomerko <168652295+skomerko@users.noreply.github.com> Date: Thu, 13 Feb 2025 20:50:00 +0100 Subject: [PATCH 2/6] WebUI: Make context menu target selectors more precise --- src/webui/www/private/rename_files.html | 2 +- src/webui/www/private/scripts/prop-files.js | 2 +- src/webui/www/private/scripts/search.js | 2 +- src/webui/www/private/views/log.html | 2 +- src/webui/www/private/views/rss.html | 4 ++-- src/webui/www/private/views/searchplugins.html | 2 +- src/webui/www/private/views/transferlist.html | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/webui/www/private/rename_files.html b/src/webui/www/private/rename_files.html index 27310e0de..f8eefa009 100644 --- a/src/webui/www/private/rename_files.html +++ b/src/webui/www/private/rename_files.html @@ -21,7 +21,7 @@ } = window.MUI.Windows.instances["multiRenamePage"]; const bulkRenameFilesContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({ - targets: "#bulkRenameFilesTableDiv tr", + targets: "#bulkRenameFilesTableDiv tbody tr", menu: "multiRenameFilesMenu", actions: { ToggleSelection: (element, ref) => { diff --git a/src/webui/www/private/scripts/prop-files.js b/src/webui/www/private/scripts/prop-files.js index 69875fa92..39c9db083 100644 --- a/src/webui/www/private/scripts/prop-files.js +++ b/src/webui/www/private/scripts/prop-files.js @@ -575,7 +575,7 @@ window.qBittorrent.PropFiles ??= (() => { }; const torrentFilesContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({ - targets: "#torrentFilesTableDiv tr", + targets: "#torrentFilesTableDiv tbody tr", menu: "torrentFilesMenu", actions: { Rename: (element, ref) => { diff --git a/src/webui/www/private/scripts/search.js b/src/webui/www/private/scripts/search.js index cd97bde5d..d2a2d2899 100644 --- a/src/webui/www/private/scripts/search.js +++ b/src/webui/www/private/scripts/search.js @@ -109,7 +109,7 @@ window.qBittorrent.Search ??= (() => { // load "Search in" preference from local storage $("searchInTorrentName").value = (LocalPreferences.get("search_in_filter") === "names") ? "names" : "everywhere"; const searchResultsTableContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({ - targets: "#searchResultsTableDiv tr", + targets: "#searchResultsTableDiv tbody tr", menu: "searchResultsTableMenu", actions: { Download: downloadSearchTorrent, diff --git a/src/webui/www/private/views/log.html b/src/webui/www/private/views/log.html index a988e5ba5..0790bc0bb 100644 --- a/src/webui/www/private/views/log.html +++ b/src/webui/www/private/views/log.html @@ -206,7 +206,7 @@ }); const logTableContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({ - targets: ":is(#logMessageView, #logPeerView) tr", + targets: ":is(#logMessageTableDiv, #logPeerTableDiv) tbody tr", menu: "logTableMenu", actions: { Clear: () => { diff --git a/src/webui/www/private/views/rss.html b/src/webui/www/private/views/rss.html index e1aa96bf0..31d0b2561 100644 --- a/src/webui/www/private/views/rss.html +++ b/src/webui/www/private/views/rss.html @@ -218,7 +218,7 @@ $("rssFetchingDisabled").classList.remove("invisible"); const rssFeedContextMenu = new window.qBittorrent.ContextMenu.RssFeedContextMenu({ - targets: "#rssFeedTableDiv tr", + targets: "#rssFeedTableDiv tbody tr", menu: "rssFeedMenu", actions: { update: (el) => { @@ -288,7 +288,7 @@ rssFeedTable.setup("rssFeedTableDiv", "rssFeedFixedHeaderDiv", rssFeedContextMenu); const rssArticleContextMenu = new window.qBittorrent.ContextMenu.RssArticleContextMenu({ - targets: "#rssArticleTableDiv tr", + targets: "#rssArticleTableDiv tbody tr", menu: "rssArticleMenu", actions: { Download: (el) => { diff --git a/src/webui/www/private/views/searchplugins.html b/src/webui/www/private/views/searchplugins.html index e6a6b5bea..768b605fc 100644 --- a/src/webui/www/private/views/searchplugins.html +++ b/src/webui/www/private/views/searchplugins.html @@ -94,7 +94,7 @@ const setup = () => { searchPluginsTable = new window.qBittorrent.DynamicTable.SearchPluginsTable(); searchPluginsTableContextMenu = new window.qBittorrent.ContextMenu.SearchPluginsTableContextMenu({ - targets: "#searchPluginsTableDiv tr", + targets: "#searchPluginsTableDiv tbody tr", menu: "searchPluginsTableMenu", actions: { Enabled: enablePlugin, diff --git a/src/webui/www/private/views/transferlist.html b/src/webui/www/private/views/transferlist.html index 40dfdac7a..0692a06db 100644 --- a/src/webui/www/private/views/transferlist.html +++ b/src/webui/www/private/views/transferlist.html @@ -29,7 +29,7 @@ // create a context menu const contextMenu = new window.qBittorrent.ContextMenu.TorrentsTableContextMenu({ - targets: "#torrentsTableDiv tr", + targets: "#torrentsTableDiv tbody tr", menu: "torrentsTableMenu", actions: { start: (element, ref) => { From 1a3d0f6fab7e853931a1118034bcbd541dc5bc2f Mon Sep 17 00:00:00 2001 From: skomerko <168652295+skomerko@users.noreply.github.com> Date: Thu, 13 Feb 2025 21:00:45 +0100 Subject: [PATCH 3/6] WebUI: Adjust context menu offsets in Search tab & Status filter list --- src/webui/www/private/scripts/search.js | 4 ++-- src/webui/www/private/views/filters.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/webui/www/private/scripts/search.js b/src/webui/www/private/scripts/search.js index d2a2d2899..cc926baa2 100644 --- a/src/webui/www/private/scripts/search.js +++ b/src/webui/www/private/scripts/search.js @@ -97,8 +97,8 @@ window.qBittorrent.Search ??= (() => { } }, offsets: { - x: -15, - y: -53 + x: 2, + y: -60 }, onShow: function() { setActiveTab(this.options.element); diff --git a/src/webui/www/private/views/filters.html b/src/webui/www/private/views/filters.html index 60eeb5c88..ef7bc88dc 100644 --- a/src/webui/www/private/views/filters.html +++ b/src/webui/www/private/views/filters.html @@ -98,7 +98,7 @@ } }, offsets: { - x: -15, + x: 0, y: 2 }, onShow: function() { From 29201fa016cee4de493e5d24d6218da96f200617 Mon Sep 17 00:00:00 2001 From: skomerko <168652295+skomerko@users.noreply.github.com> Date: Thu, 13 Feb 2025 22:25:48 +0100 Subject: [PATCH 4/6] WebUI: Apply scrollbar style to context menu elements --- src/webui/www/private/css/style.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/webui/www/private/css/style.css b/src/webui/www/private/css/style.css index 665300d91..f28e0a5cf 100644 --- a/src/webui/www/private/css/style.css +++ b/src/webui/www/private/css/style.css @@ -100,6 +100,7 @@ ol { .dynamicTableDiv, .mochaContentWrapper, .panel, + .scrollableMenu, #rssDetailsView { scrollbar-width: thin; } From 7e95375cec0840ea7b469b59e8b0f701b1905277 Mon Sep 17 00:00:00 2001 From: skomerko <168652295+skomerko@users.noreply.github.com> Date: Fri, 14 Feb 2025 16:24:12 +0100 Subject: [PATCH 5/6] WebUI: Fix unknown country flag path --- src/webui/www/private/scripts/dynamicTable.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/webui/www/private/scripts/dynamicTable.js b/src/webui/www/private/scripts/dynamicTable.js index 1d5c54278..4d269c7e4 100644 --- a/src/webui/www/private/scripts/dynamicTable.js +++ b/src/webui/www/private/scripts/dynamicTable.js @@ -1752,7 +1752,7 @@ window.qBittorrent.DynamicTable ??= (() => { td.append(span); } - span.style.backgroundImage = `url('images/flags/${country_code ?? "xx"}.svg')`; + span.style.backgroundImage = `url('images/flags/${country_code || "xx"}.svg')`; span.textContent = country; td.title = country; }; From 8c02bbb4bc00b223443e6ecd820771d838b67ad1 Mon Sep 17 00:00:00 2001 From: skomerko <168652295+skomerko@users.noreply.github.com> Date: Fri, 14 Feb 2025 16:54:23 +0100 Subject: [PATCH 6/6] WebUI: Select next available search tab after closing last active tab with X button --- src/webui/www/private/scripts/search.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/webui/www/private/scripts/search.js b/src/webui/www/private/scripts/search.js index cc926baa2..3dc0b454b 100644 --- a/src/webui/www/private/scripts/search.js +++ b/src/webui/www/private/scripts/search.js @@ -184,7 +184,10 @@ window.qBittorrent.Search ??= (() => { closeTabElem.src = "images/application-exit.svg"; closeTabElem.width = "10"; closeTabElem.height = "10"; - closeTabElem.addEventListener("click", function(e) { qBittorrent.Search.closeSearchTab(this); }); + closeTabElem.addEventListener("click", function(e) { + e.stopPropagation(); + closeSearchTab(this); + }); tabElem.prepend(closeTabElem); tabElem.appendChild(getStatusIconElement("QBT_TR(Searching...)QBT_TR[CONTEXT=SearchJobWidget]", "images/queued.svg"));