mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-07-13 00:33:09 -07:00
WebUI: Add ability to toggle alternating row colors in tables
This commit is contained in:
parent
69a829dfb0
commit
b67495464d
11 changed files with 40 additions and 90 deletions
|
@ -6,9 +6,7 @@
|
||||||
v 0.4
|
v 0.4
|
||||||
|
|
||||||
**************************************************************/
|
**************************************************************/
|
||||||
|
.altRowColors tbody tr:nth-child(odd of :not(.invisible)) {
|
||||||
.dynamicTable tbody tr:nth-child(even),
|
|
||||||
.dynamicTable tbody tr.alt {
|
|
||||||
background-color: var(--color-background-default);
|
background-color: var(--color-background-default);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,12 +14,12 @@
|
||||||
padding: 4px 2px;
|
padding: 4px 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dynamicTable tbody tr.selected {
|
.dynamicTableDiv table.dynamicTable tbody tr.selected {
|
||||||
background-color: var(--color-background-blue);
|
background-color: var(--color-background-blue);
|
||||||
color: var(--color-text-white);
|
color: var(--color-text-white);
|
||||||
}
|
}
|
||||||
|
|
||||||
.dynamicTable tbody tr:hover {
|
.dynamicTableDiv table.dynamicTable tbody tr:hover {
|
||||||
background-color: var(--color-background-hover);
|
background-color: var(--color-background-hover);
|
||||||
color: var(--color-text-white);
|
color: var(--color-text-white);
|
||||||
}
|
}
|
||||||
|
|
|
@ -380,7 +380,6 @@
|
||||||
|
|
||||||
bulkRenameFilesTable.populateTable(rootNode);
|
bulkRenameFilesTable.populateTable(rootNode);
|
||||||
bulkRenameFilesTable.updateTable(false);
|
bulkRenameFilesTable.updateTable(false);
|
||||||
bulkRenameFilesTable.altRow();
|
|
||||||
|
|
||||||
if (selectedRows !== undefined)
|
if (selectedRows !== undefined)
|
||||||
bulkRenameFilesTable.reselectRows(selectedRows);
|
bulkRenameFilesTable.reselectRows(selectedRows);
|
||||||
|
|
|
@ -845,7 +845,6 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
torrentsTable.updateTable(full_update);
|
torrentsTable.updateTable(full_update);
|
||||||
torrentsTable.altRow();
|
|
||||||
if (response["server_state"]) {
|
if (response["server_state"]) {
|
||||||
const tmp = response["server_state"];
|
const tmp = response["server_state"];
|
||||||
for (const k in tmp) {
|
for (const k in tmp) {
|
||||||
|
|
|
@ -88,6 +88,7 @@ window.qBittorrent.DynamicTable ??= (() => {
|
||||||
this.setupHeaderEvents();
|
this.setupHeaderEvents();
|
||||||
this.setupHeaderMenu();
|
this.setupHeaderMenu();
|
||||||
this.setSortedColumnIcon(this.sortedColumn, null, (this.reverseSort === "1"));
|
this.setSortedColumnIcon(this.sortedColumn, null, (this.reverseSort === "1"));
|
||||||
|
this.setupAltRow();
|
||||||
},
|
},
|
||||||
|
|
||||||
setupCommonEvents: function() {
|
setupCommonEvents: function() {
|
||||||
|
@ -566,17 +567,10 @@ window.qBittorrent.DynamicTable ??= (() => {
|
||||||
return this.selectedRows.contains(rowId);
|
return this.selectedRows.contains(rowId);
|
||||||
},
|
},
|
||||||
|
|
||||||
altRow: function() {
|
setupAltRow: function() {
|
||||||
if (!MUI.ieLegacySupport)
|
const useAltRowColors = (LocalPreferences.get("use_alt_row_colors", "true") === "true");
|
||||||
return;
|
if (useAltRowColors)
|
||||||
|
document.getElementById(this.dynamicTableDivId).classList.add("altRowColors");
|
||||||
const trs = this.tableBody.getElements("tr");
|
|
||||||
trs.each((el, i) => {
|
|
||||||
if (i % 2)
|
|
||||||
el.addClass("alt");
|
|
||||||
else
|
|
||||||
el.removeClass("alt");
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
selectAll: function() {
|
selectAll: function() {
|
||||||
|
@ -2147,25 +2141,6 @@ window.qBittorrent.DynamicTable ??= (() => {
|
||||||
this.updateGlobalCheckbox();
|
this.updateGlobalCheckbox();
|
||||||
},
|
},
|
||||||
|
|
||||||
altRow: function() {
|
|
||||||
let addClass = false;
|
|
||||||
const trs = this.tableBody.getElements("tr");
|
|
||||||
trs.each((tr) => {
|
|
||||||
if (tr.hasClass("invisible"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (addClass) {
|
|
||||||
tr.addClass("alt");
|
|
||||||
tr.removeClass("nonAlt");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tr.removeClass("alt");
|
|
||||||
tr.addClass("nonAlt");
|
|
||||||
}
|
|
||||||
addClass = !addClass;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_sortNodesByColumn: function(nodes, column) {
|
_sortNodesByColumn: function(nodes, column) {
|
||||||
nodes.sort((row1, row2) => {
|
nodes.sort((row1, row2) => {
|
||||||
// list folders before files when sorting by name
|
// list folders before files when sorting by name
|
||||||
|
@ -2496,25 +2471,6 @@ window.qBittorrent.DynamicTable ??= (() => {
|
||||||
this.columns["availability"].updateTd = displayPercentage;
|
this.columns["availability"].updateTd = displayPercentage;
|
||||||
},
|
},
|
||||||
|
|
||||||
altRow: function() {
|
|
||||||
let addClass = false;
|
|
||||||
const trs = this.tableBody.getElements("tr");
|
|
||||||
trs.each((tr) => {
|
|
||||||
if (tr.hasClass("invisible"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (addClass) {
|
|
||||||
tr.addClass("alt");
|
|
||||||
tr.removeClass("nonAlt");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tr.removeClass("alt");
|
|
||||||
tr.addClass("nonAlt");
|
|
||||||
}
|
|
||||||
addClass = !addClass;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_sortNodesByColumn: function(nodes, column) {
|
_sortNodesByColumn: function(nodes, column) {
|
||||||
nodes.sort((row1, row2) => {
|
nodes.sort((row1, row2) => {
|
||||||
// list folders before files when sorting by name
|
// list folders before files when sorting by name
|
||||||
|
|
|
@ -474,7 +474,6 @@ window.qBittorrent.PropFiles ??= (() => {
|
||||||
|
|
||||||
torrentFilesTable.populateTable(rootNode);
|
torrentFilesTable.populateTable(rootNode);
|
||||||
torrentFilesTable.updateTable(false);
|
torrentFilesTable.updateTable(false);
|
||||||
torrentFilesTable.altRow();
|
|
||||||
|
|
||||||
if (selectedFiles.length > 0)
|
if (selectedFiles.length > 0)
|
||||||
torrentFilesTable.reselectRows(selectedFiles);
|
torrentFilesTable.reselectRows(selectedFiles);
|
||||||
|
@ -703,12 +702,10 @@ window.qBittorrent.PropFiles ??= (() => {
|
||||||
|
|
||||||
const expandNode = function(node) {
|
const expandNode = function(node) {
|
||||||
_collapseNode(node, false, false, false);
|
_collapseNode(node, false, false, false);
|
||||||
torrentFilesTable.altRow();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const collapseNode = function(node) {
|
const collapseNode = function(node) {
|
||||||
_collapseNode(node, true, false, false);
|
_collapseNode(node, true, false, false);
|
||||||
torrentFilesTable.altRow();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const expandAllNodes = function() {
|
const expandAllNodes = function() {
|
||||||
|
@ -718,7 +715,6 @@ window.qBittorrent.PropFiles ??= (() => {
|
||||||
_collapseNode(child, false, true, false);
|
_collapseNode(child, false, true, false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
torrentFilesTable.altRow();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const collapseAllNodes = function() {
|
const collapseAllNodes = function() {
|
||||||
|
@ -728,7 +724,6 @@ window.qBittorrent.PropFiles ??= (() => {
|
||||||
_collapseNode(child, true, true, false);
|
_collapseNode(child, true, true, false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
torrentFilesTable.altRow();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -90,7 +90,6 @@ window.qBittorrent.PropPeers ??= (() => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
torrentPeersTable.updateTable(full_update);
|
torrentPeersTable.updateTable(full_update);
|
||||||
torrentPeersTable.altRow();
|
|
||||||
|
|
||||||
if (response["show_flags"]) {
|
if (response["show_flags"]) {
|
||||||
if (show_flags !== response["show_flags"]) {
|
if (show_flags !== response["show_flags"]) {
|
||||||
|
|
|
@ -108,7 +108,6 @@ window.qBittorrent.PropTrackers ??= (() => {
|
||||||
});
|
});
|
||||||
|
|
||||||
torrentTrackersTable.updateTable(false);
|
torrentTrackersTable.updateTable(false);
|
||||||
torrentTrackersTable.altRow();
|
|
||||||
|
|
||||||
if (selectedTrackers.length > 0)
|
if (selectedTrackers.length > 0)
|
||||||
torrentTrackersTable.reselectRows(selectedTrackers);
|
torrentTrackersTable.reselectRows(selectedTrackers);
|
||||||
|
|
|
@ -343,7 +343,6 @@ window.qBittorrent.Search ??= (() => {
|
||||||
|
|
||||||
// must restore all filters before calling updateTable
|
// must restore all filters before calling updateTable
|
||||||
searchResultsTable.updateTable();
|
searchResultsTable.updateTable();
|
||||||
searchResultsTable.altRow();
|
|
||||||
|
|
||||||
// must reselect rows after calling updateTable
|
// must reselect rows after calling updateTable
|
||||||
if (rowsToSelect.length > 0)
|
if (rowsToSelect.length > 0)
|
||||||
|
@ -823,7 +822,6 @@ window.qBittorrent.Search ??= (() => {
|
||||||
$("numSearchResultsTotal").textContent = searchResultsTable.getRowIds().length;
|
$("numSearchResultsTotal").textContent = searchResultsTable.getRowIds().length;
|
||||||
|
|
||||||
searchResultsTable.updateTable();
|
searchResultsTable.updateTable();
|
||||||
searchResultsTable.altRow();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setupSearchTableEvents(true);
|
setupSearchTableEvents(true);
|
||||||
|
|
|
@ -405,7 +405,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
tableInfo[curTab].instance.updateTable();
|
tableInfo[curTab].instance.updateTable();
|
||||||
tableInfo[curTab].instance.altRow();
|
|
||||||
updateLabelCount(curTab);
|
updateLabelCount(curTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,12 @@
|
||||||
</select>
|
</select>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
|
<fieldset class="settings">
|
||||||
|
<legend>QBT_TR(Transfer list)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
||||||
|
<div class="formRow" style="margin-bottom: 3px;">
|
||||||
|
<input type="checkbox" id="useAltRowColorsInput">
|
||||||
|
<label for="useAltRowColorsInput">QBT_TR(Use alternating row colors)QBT_TR[CONTEXT=OptionsDialog]</label>
|
||||||
|
</div>
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>QBT_TR(Action on double-click)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
<legend>QBT_TR(Action on double-click)QBT_TR[CONTEXT=OptionsDialog]</legend>
|
||||||
<table>
|
<table>
|
||||||
|
@ -32,6 +38,7 @@
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
<fieldset class="settings">
|
<fieldset class="settings">
|
||||||
<legend>
|
<legend>
|
||||||
|
@ -2070,6 +2077,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
|
||||||
// Behavior tab
|
// Behavior tab
|
||||||
$("dblclickDownloadSelect").value = LocalPreferences.get("dblclick_download", "1");
|
$("dblclickDownloadSelect").value = LocalPreferences.get("dblclick_download", "1");
|
||||||
$("dblclickCompleteSelect").value = LocalPreferences.get("dblclick_complete", "1");
|
$("dblclickCompleteSelect").value = LocalPreferences.get("dblclick_complete", "1");
|
||||||
|
document.getElementById("useAltRowColorsInput").checked = (LocalPreferences.get("use_alt_row_colors", "true") === "true");
|
||||||
$("filelog_checkbox").checked = pref.file_log_enabled;
|
$("filelog_checkbox").checked = pref.file_log_enabled;
|
||||||
$("filelog_save_path_input").value = pref.file_log_path;
|
$("filelog_save_path_input").value = pref.file_log_path;
|
||||||
$("filelog_backup_checkbox").checked = pref.file_log_backup_enabled;
|
$("filelog_backup_checkbox").checked = pref.file_log_backup_enabled;
|
||||||
|
@ -2480,6 +2488,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
|
||||||
// Behavior tab
|
// Behavior tab
|
||||||
LocalPreferences.set("dblclick_download", $("dblclickDownloadSelect").value);
|
LocalPreferences.set("dblclick_download", $("dblclickDownloadSelect").value);
|
||||||
LocalPreferences.set("dblclick_complete", $("dblclickCompleteSelect").value);
|
LocalPreferences.set("dblclick_complete", $("dblclickCompleteSelect").value);
|
||||||
|
LocalPreferences.set("use_alt_row_colors", document.getElementById("useAltRowColorsInput").checked.toString());
|
||||||
settings["file_log_enabled"] = $("filelog_checkbox").checked;
|
settings["file_log_enabled"] = $("filelog_checkbox").checked;
|
||||||
settings["file_log_path"] = $("filelog_save_path_input").value;
|
settings["file_log_path"] = $("filelog_save_path_input").value;
|
||||||
settings["file_log_backup_enabled"] = $("filelog_backup_checkbox").checked;
|
settings["file_log_backup_enabled"] = $("filelog_backup_checkbox").checked;
|
||||||
|
|
|
@ -223,7 +223,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
searchPluginsTable.updateTable();
|
searchPluginsTable.updateTable();
|
||||||
searchPluginsTable.altRow();
|
|
||||||
|
|
||||||
// add event listeners
|
// add event listeners
|
||||||
setupSearchPluginTableEvents(true);
|
setupSearchPluginTableEvents(true);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue