diff --git a/src/webui/www/private/newcategory.html b/src/webui/www/private/newcategory.html index 7d9cfd27d46..aad167a22d2 100644 --- a/src/webui/www/private/newcategory.html +++ b/src/webui/www/private/newcategory.html @@ -159,7 +159,7 @@
- +
diff --git a/src/webui/www/private/scripts/client.js b/src/webui/www/private/scripts/client.js index 6f0f973fc91..70381f5477c 100644 --- a/src/webui/www/private/scripts/client.js +++ b/src/webui/www/private/scripts/client.js @@ -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)); diff --git a/src/webui/www/private/scripts/contextmenu.js b/src/webui/www/private/scripts/contextmenu.js index 876a3792a28..00ea280a428 100644 --- a/src/webui/www/private/scripts/contextmenu.js +++ b/src/webui/www/private/scripts/contextmenu.js @@ -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"); diff --git a/src/webui/www/private/scripts/dynamicTable.js b/src/webui/www/private/scripts/dynamicTable.js index 47f4899c188..a1442407ddd 100644 --- a/src/webui/www/private/scripts/dynamicTable.js +++ b/src/webui/www/private/scripts/dynamicTable.js @@ -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({ diff --git a/src/webui/www/private/scripts/misc.js b/src/webui/www/private/scripts/misc.js index 94f0eebcfbe..6313adfe2c7 100644 --- a/src/webui/www/private/scripts/misc.js +++ b/src/webui/www/private/scripts/misc.js @@ -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; }); }; diff --git a/src/webui/www/private/scripts/prop-trackers.js b/src/webui/www/private/scripts/prop-trackers.js index 06449dcef77..ab9cec75b26 100644 --- a/src/webui/www/private/scripts/prop-trackers.js +++ b/src/webui/www/private/scripts/prop-trackers.js @@ -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)) { diff --git a/src/webui/www/private/scripts/prop-webseeds.js b/src/webui/www/private/scripts/prop-webseeds.js index 7cebc49c83b..8f80e4f88aa 100644 --- a/src/webui/www/private/scripts/prop-webseeds.js +++ b/src/webui/www/private/scripts/prop-webseeds.js @@ -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) => { diff --git a/src/webui/www/private/views/cookies.html b/src/webui/www/private/views/cookies.html index 677e4534b73..5767b39d1b4 100644 --- a/src/webui/www/private/views/cookies.html +++ b/src/webui/www/private/views/cookies.html @@ -178,7 +178,7 @@ addCookie(); }); - document.querySelector("#saveButton").addEventListener("click", (event) => { + document.getElementById("saveButton").addEventListener("click", (event) => { save(); }); }; diff --git a/src/webui/www/private/views/log.html b/src/webui/www/private/views/log.html index c88da6ac862..eab8c2134c9 100644 --- a/src/webui/www/private/views/log.html +++ b/src/webui/www/private/views/log.html @@ -96,8 +96,8 @@ - - + +
@@ -189,7 +189,7 @@ const init = () => { for (const option of $("logLevelSelect").options) - option.setAttribute("selected", selectedLogLevels.includes(option.value)); + option.toggleAttribute("selected", selectedLogLevels.includes(option.value)); selectBox = new vanillaSelectBox("#logLevelSelect", { maxHeight: 200, @@ -343,10 +343,10 @@ if (curTab === "main") { url = new URI("api/v2/log/main"); url.setData({ - normal: selectedLogLevels.indexOf("1") !== -1, - info: selectedLogLevels.indexOf("2") !== -1, - warning: selectedLogLevels.indexOf("4") !== -1, - critical: selectedLogLevels.indexOf("8") !== -1 + normal: selectedLogLevels.includes("1"), + info: selectedLogLevels.includes("2"), + warning: selectedLogLevels.includes("4"), + critical: selectedLogLevels.includes("8") }); } else { diff --git a/src/webui/www/private/views/preferences.html b/src/webui/www/private/views/preferences.html index b1fee4bf775..7c21a767569 100644 --- a/src/webui/www/private/views/preferences.html +++ b/src/webui/www/private/views/preferences.html @@ -2138,7 +2138,7 @@ languages.push($("locale_select").options[i].value); if (!languages.includes(selected)) { - const lang = selected.slice(0, selected.indexOf("_")); + const lang = selected.split("_", 1)[0]; selected = languages.includes(lang) ? lang : "en"; } $("locale_select").value = selected; diff --git a/src/webui/www/private/views/rssDownloader.html b/src/webui/www/private/views/rssDownloader.html index 243915902cb..d644fe0dc8d 100644 --- a/src/webui/www/private/views/rssDownloader.html +++ b/src/webui/www/private/views/rssDownloader.html @@ -388,7 +388,7 @@ $("rssDownloaderFeeds").style.height = "calc(100% - " + centerRowNotTableHeight + "px)"; // firefox calculates the height of the table inside fieldset differently and thus doesn't need the offset - if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) { + if (navigator.userAgent.toLowerCase().includes("firefox")) { $("rssDownloaderFeedsTable").style.height = "100%"; } else {