From c0a9c674e7c2a91aa71c6412805aa8f75da72b84 Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Wed, 15 Jan 2025 20:48:42 +0800 Subject: [PATCH] WebUI: use native function for selecting elements --- src/webui/www/private/rename_files.html | 2 +- src/webui/www/private/scripts/contextmenu.js | 7 +++--- src/webui/www/private/scripts/dynamicTable.js | 24 +++++-------------- src/webui/www/private/scripts/mocha-init.js | 4 ++-- src/webui/www/private/scripts/prop-files.js | 20 +++------------- src/webui/www/private/views/aboutToolbar.html | 12 +++++----- .../www/private/views/preferencesToolbar.html | 16 ++++++------- 7 files changed, 30 insertions(+), 55 deletions(-) diff --git a/src/webui/www/private/rename_files.html b/src/webui/www/private/rename_files.html index 8701b545d..27310e0de 100644 --- a/src/webui/www/private/rename_files.html +++ b/src/webui/www/private/rename_files.html @@ -44,7 +44,7 @@ bulkRenameFilesTable.setup("bulkRenameFilesTableDiv", "bulkRenameFilesTableFixedHeaderDiv", bulkRenameFilesContextMenu); // Inject checkbox into the first column of the table header - const tableHeaders = $$("#bulkRenameFilesTableFixedHeaderDiv .dynamicTableHeader th"); + const tableHeaders = document.querySelectorAll("#bulkRenameFilesTableFixedHeaderDiv .dynamicTableHeader th"); if (tableHeaders.length > 0) { const checkboxHeader = document.createElement("input"); checkboxHeader.type = "checkbox"; diff --git a/src/webui/www/private/scripts/contextmenu.js b/src/webui/www/private/scripts/contextmenu.js index 1c9405c2c..ffbfb3d86 100644 --- a/src/webui/www/private/scripts/contextmenu.js +++ b/src/webui/www/private/scripts/contextmenu.js @@ -67,7 +67,9 @@ window.qBittorrent.ContextMenu ??= (() => { // option diffs menu this.menu = $(this.options.menu); - this.targets = $$(this.options.targets); + this.targets = (this.options.targets.length > 0) + ? Array.from(document.querySelectorAll(this.options.targets)) + : []; // fx this.fx = new Fx.Tween(this.menu, { @@ -197,9 +199,8 @@ window.qBittorrent.ContextMenu ??= (() => { // get things started startListener() { /* all elements */ - this.targets.each((el) => { + for (const el of this.targets) this.setupEventListeners(el); - }, this); /* menu items */ this.menu.addEventListener("click", (e) => { diff --git a/src/webui/www/private/scripts/dynamicTable.js b/src/webui/www/private/scripts/dynamicTable.js index dc3ca57db..c11af4986 100644 --- a/src/webui/www/private/scripts/dynamicTable.js +++ b/src/webui/www/private/scripts/dynamicTable.js @@ -666,7 +666,7 @@ window.qBittorrent.DynamicTable ??= (() => { setSortedColumnIcon: function(newColumn, oldColumn, isReverse) { const getCol = (headerDivId, colName) => { - const colElem = $$(`#${headerDivId} .column_${colName}`); + const colElem = document.querySelectorAll(`#${headerDivId} .column_${colName}`); if (colElem.length === 1) return colElem[0]; return null; @@ -2140,7 +2140,7 @@ window.qBittorrent.DynamicTable ??= (() => { */ toggleGlobalCheckbox: function() { const checkbox = $("rootMultiRename_cb"); - const checkboxes = $$("input.RenamingCB"); + const checkboxes = document.querySelectorAll("input.RenamingCB"); for (let i = 0; i < checkboxes.length; ++i) { const node = this.getNode(i); @@ -2180,22 +2180,10 @@ window.qBittorrent.DynamicTable ??= (() => { updateGlobalCheckbox: () => { const checkbox = $("rootMultiRename_cb"); - const checkboxes = $$("input.RenamingCB"); - const isAllChecked = () => { - for (let i = 0; i < checkboxes.length; ++i) { - if (!checkboxes[i].checked) - return false; - } - return true; - }; - const isAllUnchecked = () => { - for (let i = 0; i < checkboxes.length; ++i) { - if (checkboxes[i].checked) - return false; - } - return true; - }; - if (isAllChecked()) { + const checkboxes = document.querySelectorAll("input.RenamingCB"); + const isAllChecked = Array.prototype.every.call(checkboxes, (checkbox => checkbox.checked)); + const isAllUnchecked = (() => Array.prototype.every.call(checkboxes, (checkbox => !checkbox.checked))); + if (isAllChecked) { checkbox.state = "checked"; checkbox.indeterminate = false; checkbox.checked = true; diff --git a/src/webui/www/private/scripts/mocha-init.js b/src/webui/www/private/scripts/mocha-init.js index 288ad9863..f13f9be88 100644 --- a/src/webui/www/private/scripts/mocha-init.js +++ b/src/webui/www/private/scripts/mocha-init.js @@ -1313,10 +1313,10 @@ const initializeWindows = () => { }); // Deactivate menu header links - $$("a.returnFalse").each((el) => { + for (const el of document.querySelectorAll("a.returnFalse")) { el.addEventListener("click", (e) => { e.preventDefault(); e.stopPropagation(); }); - }); + } }; diff --git a/src/webui/www/private/scripts/prop-files.js b/src/webui/www/private/scripts/prop-files.js index 88c97fec4..69875fa92 100644 --- a/src/webui/www/private/scripts/prop-files.js +++ b/src/webui/www/private/scripts/prop-files.js @@ -283,23 +283,9 @@ window.qBittorrent.PropFiles ??= (() => { checkbox.indeterminate = true; }; - const isAllCheckboxesChecked = () => { - const checkboxes = $$("input.DownloadedCB"); - for (let i = 0; i < checkboxes.length; ++i) { - if (!checkboxes[i].checked) - return false; - } - return true; - }; + const isAllCheckboxesChecked = () => Array.prototype.every.call(document.querySelectorAll("input.DownloadedCB"), (checkbox => checkbox.checked)); - const isAllCheckboxesUnchecked = () => { - const checkboxes = $$("input.DownloadedCB"); - for (let i = 0; i < checkboxes.length; ++i) { - if (checkboxes[i].checked) - return false; - } - return true; - }; + const isAllCheckboxesUnchecked = () => Array.prototype.every.call(document.querySelectorAll("input.DownloadedCB"), (checkbox => !checkbox.checked)); const setFilePriority = (ids, fileIds, priority) => { if (current_hash === "") @@ -630,7 +616,7 @@ window.qBittorrent.PropFiles ??= (() => { torrentFilesTable.setup("torrentFilesTableDiv", "torrentFilesTableFixedHeaderDiv", torrentFilesContextMenu); // inject checkbox into table header - const tableHeaders = $$("#torrentFilesTableFixedHeaderDiv .dynamicTableHeader th"); + const tableHeaders = document.querySelectorAll("#torrentFilesTableFixedHeaderDiv .dynamicTableHeader th"); if (tableHeaders.length > 0) { const checkbox = document.createElement("input"); checkbox.type = "checkbox"; diff --git a/src/webui/www/private/views/aboutToolbar.html b/src/webui/www/private/views/aboutToolbar.html index da71e9850..3557a11e5 100644 --- a/src/webui/www/private/views/aboutToolbar.html +++ b/src/webui/www/private/views/aboutToolbar.html @@ -17,32 +17,32 @@ MochaUI.initializeTabs("aboutTabs"); $("aboutAboutLink").addEventListener("click", () => { - $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".aboutTabContent"), (tab => tab.classList.add("invisible"))); $("aboutAboutContent").classList.remove("invisible"); }); $("aboutAuthorLink").addEventListener("click", () => { - $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".aboutTabContent"), (tab => tab.classList.add("invisible"))); $("aboutAuthorContent").classList.remove("invisible"); }); $("aboutSpecialThanksLink").addEventListener("click", () => { - $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".aboutTabContent"), (tab => tab.classList.add("invisible"))); $("aboutSpecialThanksContent").classList.remove("invisible"); }); $("aboutTranslatorsLink").addEventListener("click", () => { - $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".aboutTabContent"), (tab => tab.classList.add("invisible"))); $("aboutTranslatorsContent").classList.remove("invisible"); }); $("aboutLicenseLink").addEventListener("click", () => { - $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".aboutTabContent"), (tab => tab.classList.add("invisible"))); $("aboutLicenseContent").classList.remove("invisible"); }); $("aboutSoftwareUsedLink").addEventListener("click", () => { - $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".aboutTabContent"), (tab => tab.classList.add("invisible"))); $("aboutSoftwareUsedContent").classList.remove("invisible"); }); })(); diff --git a/src/webui/www/private/views/preferencesToolbar.html b/src/webui/www/private/views/preferencesToolbar.html index 3ac17c31d..c2ff79993 100644 --- a/src/webui/www/private/views/preferencesToolbar.html +++ b/src/webui/www/private/views/preferencesToolbar.html @@ -37,35 +37,35 @@ MochaUI.initializeTabs("preferencesTabs"); $("PrefBehaviorLink").addEventListener("click", (e) => { - $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".PrefTab"), (tab => tab.classList.add("invisible"))); $("BehaviorTab").classList.remove("invisible"); }); $("PrefDownloadsLink").addEventListener("click", (e) => { - $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".PrefTab"), (tab => tab.classList.add("invisible"))); $("DownloadsTab").classList.remove("invisible"); }); $("PrefConnectionLink").addEventListener("click", (e) => { - $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".PrefTab"), (tab => tab.classList.add("invisible"))); $("ConnectionTab").classList.remove("invisible"); }); $("PrefSpeedLink").addEventListener("click", (e) => { - $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".PrefTab"), (tab => tab.classList.add("invisible"))); $("SpeedTab").classList.remove("invisible"); }); $("PrefBittorrentLink").addEventListener("click", (e) => { - $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".PrefTab"), (tab => tab.classList.add("invisible"))); $("BittorrentTab").classList.remove("invisible"); }); $("PrefRSSLink").addEventListener("click", (e) => { - $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".PrefTab"), (tab => tab.classList.add("invisible"))); $("RSSTab").classList.remove("invisible"); }); $("PrefWebUILink").addEventListener("click", (e) => { - $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".PrefTab"), (tab => tab.classList.add("invisible"))); $("WebUITab").classList.remove("invisible"); }); $("PrefAdvancedLink").addEventListener("click", (e) => { - $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + Array.prototype.forEach.call(document.querySelectorAll(".PrefTab"), (tab => tab.classList.add("invisible"))); $("AdvancedTab").classList.remove("invisible"); }); })();