mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2026-01-07 16:12:30 -06:00
WebUI improvements
WebUI improvements
This commit is contained in:
@@ -339,28 +339,28 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||
// Show Top Toolbar is enabled by default
|
||||
let showTopToolbar = LocalPreferences.get("show_top_toolbar", "true") === "true";
|
||||
if (!showTopToolbar) {
|
||||
$("showTopToolbarLink").firstChild.style.opacity = "0";
|
||||
$("showTopToolbarLink").firstElementChild.style.opacity = "0";
|
||||
$("mochaToolbar").addClass("invisible");
|
||||
}
|
||||
|
||||
// Show Status Bar is enabled by default
|
||||
let showStatusBar = LocalPreferences.get("show_status_bar", "true") === "true";
|
||||
if (!showStatusBar) {
|
||||
$("showStatusBarLink").firstChild.style.opacity = "0";
|
||||
$("showStatusBarLink").firstElementChild.style.opacity = "0";
|
||||
$("desktopFooterWrapper").addClass("invisible");
|
||||
}
|
||||
|
||||
// Show Filters Sidebar is enabled by default
|
||||
let showFiltersSidebar = LocalPreferences.get("show_filters_sidebar", "true") === "true";
|
||||
if (!showFiltersSidebar) {
|
||||
$("showFiltersSidebarLink").firstChild.style.opacity = "0";
|
||||
$("showFiltersSidebarLink").firstElementChild.style.opacity = "0";
|
||||
$("filtersColumn").addClass("invisible");
|
||||
$("filtersColumn_handle").addClass("invisible");
|
||||
}
|
||||
|
||||
let speedInTitle = LocalPreferences.get("speed_in_browser_title_bar") === "true";
|
||||
if (!speedInTitle)
|
||||
$("speedInBrowserTitleBarLink").firstChild.style.opacity = "0";
|
||||
$("speedInBrowserTitleBarLink").firstElementChild.style.opacity = "0";
|
||||
|
||||
// After showing/hiding the toolbar + status bar
|
||||
window.qBittorrent.Client.showSearchEngine(LocalPreferences.get("show_search_engine") !== "false");
|
||||
@@ -465,7 +465,7 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||
if (filterEl.classList.toggle("invisible", hideFilter))
|
||||
return;
|
||||
}
|
||||
filterEl.firstElementChild.lastChild.nodeValue = filterTitle.replace("%1", filterTorrentCount);
|
||||
filterEl.firstElementChild.lastChild.textContent = filterTitle.replace("%1", filterTorrentCount);
|
||||
};
|
||||
|
||||
const updateFiltersList = () => {
|
||||
@@ -1122,11 +1122,11 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||
showTopToolbar = !showTopToolbar;
|
||||
LocalPreferences.set("show_top_toolbar", showTopToolbar.toString());
|
||||
if (showTopToolbar) {
|
||||
$("showTopToolbarLink").firstChild.style.opacity = "1";
|
||||
$("showTopToolbarLink").firstElementChild.style.opacity = "1";
|
||||
$("mochaToolbar").removeClass("invisible");
|
||||
}
|
||||
else {
|
||||
$("showTopToolbarLink").firstChild.style.opacity = "0";
|
||||
$("showTopToolbarLink").firstElementChild.style.opacity = "0";
|
||||
$("mochaToolbar").addClass("invisible");
|
||||
}
|
||||
MochaUI.Desktop.setDesktopSize();
|
||||
@@ -1136,11 +1136,11 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||
showStatusBar = !showStatusBar;
|
||||
LocalPreferences.set("show_status_bar", showStatusBar.toString());
|
||||
if (showStatusBar) {
|
||||
$("showStatusBarLink").firstChild.style.opacity = "1";
|
||||
$("showStatusBarLink").firstElementChild.style.opacity = "1";
|
||||
$("desktopFooterWrapper").removeClass("invisible");
|
||||
}
|
||||
else {
|
||||
$("showStatusBarLink").firstChild.style.opacity = "0";
|
||||
$("showStatusBarLink").firstElementChild.style.opacity = "0";
|
||||
$("desktopFooterWrapper").addClass("invisible");
|
||||
}
|
||||
MochaUI.Desktop.setDesktopSize();
|
||||
@@ -1174,12 +1174,12 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||
showFiltersSidebar = !showFiltersSidebar;
|
||||
LocalPreferences.set("show_filters_sidebar", showFiltersSidebar.toString());
|
||||
if (showFiltersSidebar) {
|
||||
$("showFiltersSidebarLink").firstChild.style.opacity = "1";
|
||||
$("showFiltersSidebarLink").firstElementChild.style.opacity = "1";
|
||||
$("filtersColumn").removeClass("invisible");
|
||||
$("filtersColumn_handle").removeClass("invisible");
|
||||
}
|
||||
else {
|
||||
$("showFiltersSidebarLink").firstChild.style.opacity = "0";
|
||||
$("showFiltersSidebarLink").firstElementChild.style.opacity = "0";
|
||||
$("filtersColumn").addClass("invisible");
|
||||
$("filtersColumn_handle").addClass("invisible");
|
||||
}
|
||||
@@ -1190,9 +1190,9 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||
speedInTitle = !speedInTitle;
|
||||
LocalPreferences.set("speed_in_browser_title_bar", speedInTitle.toString());
|
||||
if (speedInTitle)
|
||||
$("speedInBrowserTitleBarLink").firstChild.style.opacity = "1";
|
||||
$("speedInBrowserTitleBarLink").firstElementChild.style.opacity = "1";
|
||||
else
|
||||
$("speedInBrowserTitleBarLink").firstChild.style.opacity = "0";
|
||||
$("speedInBrowserTitleBarLink").firstElementChild.style.opacity = "0";
|
||||
processServerState();
|
||||
});
|
||||
|
||||
@@ -1216,42 +1216,42 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||
|
||||
const updateTabDisplay = () => {
|
||||
if (window.qBittorrent.Client.isShowRssReader()) {
|
||||
$("showRssReaderLink").firstChild.style.opacity = "1";
|
||||
$("showRssReaderLink").firstElementChild.style.opacity = "1";
|
||||
$("mainWindowTabs").removeClass("invisible");
|
||||
$("rssTabLink").removeClass("invisible");
|
||||
if (!MochaUI.Panels.instances.RssPanel)
|
||||
addRssPanel();
|
||||
}
|
||||
else {
|
||||
$("showRssReaderLink").firstChild.style.opacity = "0";
|
||||
$("showRssReaderLink").firstElementChild.style.opacity = "0";
|
||||
$("rssTabLink").addClass("invisible");
|
||||
if ($("rssTabLink").hasClass("selected"))
|
||||
$("transfersTabLink").click();
|
||||
}
|
||||
|
||||
if (window.qBittorrent.Client.isShowSearchEngine()) {
|
||||
$("showSearchEngineLink").firstChild.style.opacity = "1";
|
||||
$("showSearchEngineLink").firstElementChild.style.opacity = "1";
|
||||
$("mainWindowTabs").removeClass("invisible");
|
||||
$("searchTabLink").removeClass("invisible");
|
||||
if (!MochaUI.Panels.instances.SearchPanel)
|
||||
addSearchPanel();
|
||||
}
|
||||
else {
|
||||
$("showSearchEngineLink").firstChild.style.opacity = "0";
|
||||
$("showSearchEngineLink").firstElementChild.style.opacity = "0";
|
||||
$("searchTabLink").addClass("invisible");
|
||||
if ($("searchTabLink").hasClass("selected"))
|
||||
$("transfersTabLink").click();
|
||||
}
|
||||
|
||||
if (window.qBittorrent.Client.isShowLogViewer()) {
|
||||
$("showLogViewerLink").firstChild.style.opacity = "1";
|
||||
$("showLogViewerLink").firstElementChild.style.opacity = "1";
|
||||
$("mainWindowTabs").removeClass("invisible");
|
||||
$("logTabLink").removeClass("invisible");
|
||||
if (!MochaUI.Panels.instances.LogPanel)
|
||||
addLogPanel();
|
||||
}
|
||||
else {
|
||||
$("showLogViewerLink").firstChild.style.opacity = "0";
|
||||
$("showLogViewerLink").firstElementChild.style.opacity = "0";
|
||||
$("logTabLink").addClass("invisible");
|
||||
if ($("logTabLink").hasClass("selected"))
|
||||
$("transfersTabLink").click();
|
||||
@@ -1492,7 +1492,7 @@ window.addEventListener("DOMContentLoaded", () => {
|
||||
const handleDownloadParam = () => {
|
||||
// Extract torrent URL from download param in WebUI URL hash
|
||||
const downloadHash = "#download=";
|
||||
if (location.hash.indexOf(downloadHash) !== 0)
|
||||
if (!location.hash.startsWith(downloadHash))
|
||||
return;
|
||||
|
||||
const url = decodeURIComponent(location.hash.substring(downloadHash.length));
|
||||
|
||||
@@ -160,7 +160,7 @@ window.qBittorrent.ContextMenu ??= (() => {
|
||||
this.touchStartAt = null;
|
||||
this.touchStartEvent = null;
|
||||
|
||||
const isTargetUnchanged = (Math.abs(e.event.pageX - touchStartEvent.event.pageX) <= 10) && (Math.abs(e.event.pageY - touchStartEvent.event.pageY) <= 10);
|
||||
const isTargetUnchanged = (Math.abs(e.changedTouches[0].pageX - touchStartEvent.changedTouches[0].pageX) <= 10) && (Math.abs(e.changedTouches[0].pageY - touchStartEvent.changedTouches[0].pageY) <= 10);
|
||||
if (((now - touchStartAt) >= this.options.touchTimer) && isTargetUnchanged)
|
||||
this.triggerMenu(touchStartEvent, elem);
|
||||
}, { passive: true });
|
||||
@@ -246,13 +246,13 @@ window.qBittorrent.ContextMenu ??= (() => {
|
||||
}
|
||||
|
||||
setItemChecked(item, checked) {
|
||||
this.menu.getElement("a[href$=" + item + "]").firstChild.style.opacity =
|
||||
this.menu.getElement("a[href$=" + item + "]").firstElementChild.style.opacity =
|
||||
checked ? "1" : "0";
|
||||
return this;
|
||||
}
|
||||
|
||||
getItemChecked(item) {
|
||||
return this.menu.getElement("a[href$=" + item + "]").firstChild.style.opacity !== "0";
|
||||
return this.menu.getElement("a[href$=" + item + "]").firstElementChild.style.opacity !== "0";
|
||||
}
|
||||
|
||||
// hide an item
|
||||
@@ -535,8 +535,7 @@ window.qBittorrent.ContextMenu ??= (() => {
|
||||
|
||||
updateTagsSubMenu(tagList) {
|
||||
const contextTagList = $("contextTagList");
|
||||
while (contextTagList.firstChild !== null)
|
||||
contextTagList.removeChild(contextTagList.firstChild);
|
||||
contextTagList.replaceChildren();
|
||||
|
||||
const createMenuItem = (text, imgURL, clickFn) => {
|
||||
const anchor = document.createElement("a");
|
||||
|
||||
@@ -224,11 +224,15 @@ window.qBittorrent.DynamicTable ??= (() => {
|
||||
changeBorderSide = "left";
|
||||
}
|
||||
|
||||
const borderStyle = "initial solid #e60";
|
||||
if (changeBorderSide === "left")
|
||||
const borderStyle = "solid #e60";
|
||||
if (changeBorderSide === "left") {
|
||||
borderChangeElement.style.borderLeft = borderStyle;
|
||||
else
|
||||
borderChangeElement.style.borderLeftWidth = "initial";
|
||||
}
|
||||
else {
|
||||
borderChangeElement.style.borderRight = borderStyle;
|
||||
borderChangeElement.style.borderRightWidth = "initial";
|
||||
}
|
||||
|
||||
resetElementBorderStyle(borderChangeElement, ((changeBorderSide === "right") ? "left" : "right"));
|
||||
|
||||
@@ -288,8 +292,7 @@ window.qBittorrent.DynamicTable ??= (() => {
|
||||
LocalPreferences.set("columns_order_" + this.dynamicTableDivId, val.join(","));
|
||||
this.loadColumnsOrder();
|
||||
this.updateTableHeaders();
|
||||
while (this.tableBody.firstChild)
|
||||
this.tableBody.removeChild(this.tableBody.firstChild);
|
||||
this.tableBody.replaceChildren();
|
||||
this.updateTable(true);
|
||||
}
|
||||
if (this.currentHeaderAction === "drag") {
|
||||
@@ -465,11 +468,8 @@ window.qBittorrent.DynamicTable ??= (() => {
|
||||
this.showColumn(action, this.columns[action].visible === "0");
|
||||
}.bind(this);
|
||||
|
||||
// recreate child nodes when reusing (enables the context menu to work correctly)
|
||||
if (ul.hasChildNodes()) {
|
||||
while (ul.firstChild)
|
||||
ul.removeChild(ul.lastChild);
|
||||
}
|
||||
// recreate child elements when reusing (enables the context menu to work correctly)
|
||||
ul.replaceChildren();
|
||||
|
||||
for (let i = 0; i < this.columns.length; ++i) {
|
||||
const text = this.columns[i].caption;
|
||||
@@ -496,9 +496,9 @@ window.qBittorrent.DynamicTable ??= (() => {
|
||||
const autoResizeAllElement = createResizeElement("Resize All", "#autoResizeAllAction");
|
||||
const autoResizeElement = createResizeElement("Resize", "#autoResizeAction");
|
||||
|
||||
ul.firstChild.classList.add("separator");
|
||||
ul.insertBefore(autoResizeAllElement, ul.firstChild);
|
||||
ul.insertBefore(autoResizeElement, ul.firstChild);
|
||||
ul.firstElementChild.classList.add("separator");
|
||||
ul.insertBefore(autoResizeAllElement, ul.firstElementChild);
|
||||
ul.insertBefore(autoResizeElement, ul.firstElementChild);
|
||||
ul.inject(document.body);
|
||||
|
||||
this.headerContextMenu = new DynamicTableHeaderContextMenuClass({
|
||||
|
||||
@@ -255,8 +255,8 @@ window.qBittorrent.Misc ??= (() => {
|
||||
const containsAllTerms = (text, terms) => {
|
||||
const textToSearch = text.toLowerCase();
|
||||
return terms.every((term) => {
|
||||
const isTermRequired = (term[0] === "+");
|
||||
const isTermExcluded = (term[0] === "-");
|
||||
const isTermRequired = term.startsWith("+");
|
||||
const isTermExcluded = term.startsWith("-");
|
||||
if (isTermRequired || isTermExcluded) {
|
||||
// ignore lonely +/-
|
||||
if (term.length === 1)
|
||||
@@ -265,7 +265,7 @@ window.qBittorrent.Misc ??= (() => {
|
||||
term = term.substring(1);
|
||||
}
|
||||
|
||||
const textContainsTerm = (textToSearch.indexOf(term) !== -1);
|
||||
const textContainsTerm = textToSearch.includes(term);
|
||||
return isTermExcluded ? !textContainsTerm : textContainsTerm;
|
||||
});
|
||||
};
|
||||
|
||||
@@ -132,7 +132,7 @@ window.qBittorrent.PropTrackers ??= (() => {
|
||||
},
|
||||
EditTracker: (element, ref) => {
|
||||
// only allow editing of one row
|
||||
element.firstChild.click();
|
||||
element.firstElementChild.click();
|
||||
editTrackerFN(element);
|
||||
},
|
||||
RemoveTracker: (element, ref) => {
|
||||
@@ -146,7 +146,7 @@ window.qBittorrent.PropTrackers ??= (() => {
|
||||
onShow: function() {
|
||||
const selectedTrackers = torrentTrackersTable.selectedRowsIds();
|
||||
const containsStaticTracker = selectedTrackers.some((tracker) => {
|
||||
return (tracker.indexOf("** [") === 0);
|
||||
return tracker.startsWith("** [");
|
||||
});
|
||||
|
||||
if (containsStaticTracker || (selectedTrackers.length === 0)) {
|
||||
|
||||
@@ -103,7 +103,7 @@ window.qBittorrent.PropWebseeds ??= (() => {
|
||||
},
|
||||
EditWebSeed: (element, ref) => {
|
||||
// only allow editing of one row
|
||||
element.firstChild.click();
|
||||
element.firstElementChild.click();
|
||||
editWebSeedFN(element);
|
||||
},
|
||||
RemoveWebSeed: (element, ref) => {
|
||||
|
||||
Reference in New Issue
Block a user