WebUI: Reset filter selection when double clicking filter

When double clicking on a filter, all other filters will be reset. For example, double clicking on a status filter will reset the categories, tags, and trackers filters to "All". This behavior can be disabled in WebUI options.

Closes #22449.
PR #22818.
This commit is contained in:
Thomas Piccirello 2025-06-09 06:24:58 -07:00 committed by GitHub
parent 78fae0ae76
commit 7ed026ef78
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 63 additions and 7 deletions

View file

@ -490,7 +490,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
updateFilter("moving", "QBT_TR(Moving (%1))QBT_TR[CONTEXT=StatusFilterWidget]");
updateFilter("errored", "QBT_TR(Errored (%1))QBT_TR[CONTEXT=StatusFilterWidget]");
if (useAutoHideZeroStatusFilters && document.getElementById(`${selectedStatus}_filter`).classList.contains("invisible"))
setStatusFilter("all");
window.qBittorrent.Filters.clearStatusFilter();
};
const highlightSelectedStatus = () => {

View file

@ -970,7 +970,7 @@ const initializeWindows = () => {
if (!response.ok)
return;
setCategoryFilter(CATEGORIES_ALL);
window.qBittorrent.Filters.clearCategoryFilter();
updateMainData();
});
};
@ -991,7 +991,7 @@ const initializeWindows = () => {
if (!response.ok)
return;
setCategoryFilter(CATEGORIES_ALL);
window.qBittorrent.Filters.clearCategoryFilter();
updateMainData();
});
};
@ -1077,7 +1077,7 @@ const initializeWindows = () => {
tags: tag
})
});
setTagFilter(TAGS_ALL);
window.qBittorrent.Filters.clearTagFilter();
};
deleteUnusedTagsFN = () => {
@ -1092,7 +1092,7 @@ const initializeWindows = () => {
tags: tags.join(",")
})
});
setTagFilter(TAGS_ALL);
window.qBittorrent.Filters.clearTagFilter();
};
deleteTrackerFN = (trackerHost) => {
@ -1121,7 +1121,7 @@ const initializeWindows = () => {
height: 100,
onCloseComplete: () => {
updateMainData();
setTrackerFilter(TRACKERS_ALL);
window.qBittorrent.Filters.clearTrackerFilter();
}
});
};

View file

@ -74,7 +74,11 @@
return {
categoriesFilterContextMenu: categoriesFilterContextMenu,
tagsFilterContextMenu: tagsFilterContextMenu,
trackersFilterContextMenu: trackersFilterContextMenu
trackersFilterContextMenu: trackersFilterContextMenu,
clearStatusFilter: clearStatusFilter,
clearCategoryFilter: clearCategoryFilter,
clearTagFilter: clearTagFilter,
clearTrackerFilter: clearTrackerFilter
};
};
@ -256,6 +260,42 @@
}
});
document.getElementById("Filters_pad").addEventListener("dblclick", (event) => {
if (LocalPreferences.get("dblclick_filter", "1") !== "1")
return;
const filterItem = event.target.closest("li");
if (filterItem === null)
return;
const { id: filterListID } = filterItem.closest("ul[id]");
switch (filterListID) {
case "statusFilterList":
clearCategoryFilter();
clearTagFilter();
clearTrackerFilter();
break;
case "categoryFilterList":
clearStatusFilter();
clearTagFilter();
clearTrackerFilter();
break;
case "tagFilterList":
clearStatusFilter();
clearCategoryFilter();
clearTrackerFilter();
break;
case "trackerFilterList":
clearStatusFilter();
clearCategoryFilter();
clearTagFilter();
break;
default:
console.error(`Unexpected filterListID: ${filterListID}`);
break;
}
});
document.getElementById("Filters_pad").addEventListener("click", (event) => {
const filterTitle = event.target.closest(".filterTitle");
if (!filterTitle)
@ -281,6 +321,11 @@
toggleCategoryDisplay(filterItem.id);
});
const clearStatusFilter = () => { setStatusFilter("all"); };
const clearCategoryFilter = () => { setCategoryFilter(CATEGORIES_ALL); };
const clearTagFilter = () => { setTagFilter(TAGS_ALL); };
const clearTrackerFilter = () => { setTrackerFilter(TRACKERS_ALL); };
return exports();
})();
Object.freeze(window.qBittorrent.Filters);

View file

@ -49,6 +49,15 @@
</select>
</td>
</tr>
<tr>
<td><label for="dblclickFiltersSelect">QBT_TR(Filters:)QBT_TR[CONTEXT=OptionsDialog]</label></td>
<td>
<select id="dblclickFiltersSelect">
<option value="1" selected>QBT_TR(Reset filter selection)QBT_TR[CONTEXT=OptionsDialog]</option>
<option value="0">QBT_TR(No action)QBT_TR[CONTEXT=OptionsDialog]</option>
</select>
</td>
</tr>
</tbody>
</table>
</fieldset>
@ -2230,6 +2239,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
document.getElementById("hideZeroFiltersCheckbox").checked = (LocalPreferences.get("hide_zero_status_filters", "false") === "true");
document.getElementById("dblclickDownloadSelect").value = LocalPreferences.get("dblclick_download", "1");
document.getElementById("dblclickCompleteSelect").value = LocalPreferences.get("dblclick_complete", "1");
document.getElementById("dblclickFiltersSelect").value = LocalPreferences.get("dblclick_filter", "1");
document.getElementById("confirmTorrentDeletion").checked = pref.confirm_torrent_deletion;
document.getElementById("useAltRowColorsInput").checked = (LocalPreferences.get("use_alt_row_colors", "true") === "true");
document.getElementById("filelog_checkbox").checked = pref.file_log_enabled;
@ -2663,6 +2673,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
LocalPreferences.set("hide_zero_status_filters", document.getElementById("hideZeroFiltersCheckbox").checked.toString());
LocalPreferences.set("dblclick_download", document.getElementById("dblclickDownloadSelect").value);
LocalPreferences.set("dblclick_complete", document.getElementById("dblclickCompleteSelect").value);
LocalPreferences.set("dblclick_filter", document.getElementById("dblclickFiltersSelect").value);
settings["confirm_torrent_deletion"] = document.getElementById("confirmTorrentDeletion").checked;
LocalPreferences.set("use_alt_row_colors", document.getElementById("useAltRowColorsInput").checked.toString());
settings["file_log_enabled"] = document.getElementById("filelog_checkbox").checked;