From 7080f85b59c12d8a525aa626cac51e075bf86a8b Mon Sep 17 00:00:00 2001 From: skomerko <168652295+skomerko@users.noreply.github.com> Date: Sun, 8 Dec 2024 09:12:57 +0100 Subject: [PATCH] WebUI: Replace Mootools class list manipulation methods All `addClass()`, `removeClass()` and `hasClass()` instances were changed to use `classList` equivalent: https://developer.mozilla.org/en-US/docs/Web/API/Element/classList PR #21946. --------- Co-authored-by: Chocobo1 --- src/webui/www/private/scripts/client.js | 110 +++++++++--------- src/webui/www/private/scripts/contextmenu.js | 25 ++-- src/webui/www/private/scripts/dynamicTable.js | 69 +++++------ src/webui/www/private/scripts/prop-files.js | 16 +-- src/webui/www/private/scripts/prop-general.js | 4 +- src/webui/www/private/scripts/prop-peers.js | 4 +- .../www/private/scripts/prop-trackers.js | 4 +- .../www/private/scripts/prop-webseeds.js | 4 +- src/webui/www/private/scripts/search.js | 2 +- src/webui/www/private/views/aboutToolbar.html | 24 ++-- src/webui/www/private/views/cookies.html | 2 +- src/webui/www/private/views/log.html | 10 +- .../www/private/views/preferencesToolbar.html | 32 ++--- src/webui/www/private/views/rss.html | 2 +- .../www/private/views/rssDownloader.html | 2 +- 15 files changed, 143 insertions(+), 167 deletions(-) diff --git a/src/webui/www/private/scripts/client.js b/src/webui/www/private/scripts/client.js index 6151b66d4..e36042962 100644 --- a/src/webui/www/private/scripts/client.js +++ b/src/webui/www/private/scripts/client.js @@ -185,7 +185,7 @@ window.addEventListener("DOMContentLoaded", () => { window.addEventListener("resize", window.qBittorrent.Misc.createDebounceHandler(500, (e) => { // only save sizes if the columns are visible - if (!$("mainColumn").hasClass("invisible")) + if (!$("mainColumn").classList.contains("invisible")) saveColumnSizes(); })); @@ -218,7 +218,7 @@ window.addEventListener("DOMContentLoaded", () => { }); // start off hidden - $("searchTabColumn").addClass("invisible"); + $("searchTabColumn").classList.add("invisible"); }; const buildRssTab = () => { @@ -229,7 +229,7 @@ window.addEventListener("DOMContentLoaded", () => { }); // start off hidden - $("rssTabColumn").addClass("invisible"); + $("rssTabColumn").classList.add("invisible"); }; const buildLogTab = () => { @@ -240,7 +240,7 @@ window.addEventListener("DOMContentLoaded", () => { }); // start off hidden - $("logTabColumn").addClass("invisible"); + $("logTabColumn").classList.add("invisible"); }; buildTransfersTab(); @@ -340,22 +340,22 @@ window.addEventListener("DOMContentLoaded", () => { let showTopToolbar = LocalPreferences.get("show_top_toolbar", "true") === "true"; if (!showTopToolbar) { $("showTopToolbarLink").firstElementChild.style.opacity = "0"; - $("mochaToolbar").addClass("invisible"); + $("mochaToolbar").classList.add("invisible"); } // Show Status Bar is enabled by default let showStatusBar = LocalPreferences.get("show_status_bar", "true") === "true"; if (!showStatusBar) { $("showStatusBarLink").firstElementChild.style.opacity = "0"; - $("desktopFooterWrapper").addClass("invisible"); + $("desktopFooterWrapper").classList.add("invisible"); } // Show Filters Sidebar is enabled by default let showFiltersSidebar = LocalPreferences.get("show_filters_sidebar", "true") === "true"; if (!showFiltersSidebar) { $("showFiltersSidebarLink").firstElementChild.style.opacity = "0"; - $("filtersColumn").addClass("invisible"); - $("filtersColumn_handle").addClass("invisible"); + $("filtersColumn").classList.add("invisible"); + $("filtersColumn_handle").classList.add("invisible"); } let speedInTitle = LocalPreferences.get("speed_in_browser_title_bar") === "true"; @@ -1054,20 +1054,20 @@ window.addEventListener("DOMContentLoaded", () => { torrentsTable.columns["priority"].force_hide = !queueing_enabled; torrentsTable.updateColumn("priority"); if (queueing_enabled) { - $("topQueuePosItem").removeClass("invisible"); - $("increaseQueuePosItem").removeClass("invisible"); - $("decreaseQueuePosItem").removeClass("invisible"); - $("bottomQueuePosItem").removeClass("invisible"); - $("queueingButtons").removeClass("invisible"); - $("queueingMenuItems").removeClass("invisible"); + $("topQueuePosItem").classList.remove("invisible"); + $("increaseQueuePosItem").classList.remove("invisible"); + $("decreaseQueuePosItem").classList.remove("invisible"); + $("bottomQueuePosItem").classList.remove("invisible"); + $("queueingButtons").classList.remove("invisible"); + $("queueingMenuItems").classList.remove("invisible"); } else { - $("topQueuePosItem").addClass("invisible"); - $("increaseQueuePosItem").addClass("invisible"); - $("decreaseQueuePosItem").addClass("invisible"); - $("bottomQueuePosItem").addClass("invisible"); - $("queueingButtons").addClass("invisible"); - $("queueingMenuItems").addClass("invisible"); + $("topQueuePosItem").classList.add("invisible"); + $("increaseQueuePosItem").classList.add("invisible"); + $("decreaseQueuePosItem").classList.add("invisible"); + $("bottomQueuePosItem").classList.add("invisible"); + $("queueingButtons").classList.add("invisible"); + $("queueingMenuItems").classList.add("invisible"); } } @@ -1123,11 +1123,11 @@ window.addEventListener("DOMContentLoaded", () => { LocalPreferences.set("show_top_toolbar", showTopToolbar.toString()); if (showTopToolbar) { $("showTopToolbarLink").firstElementChild.style.opacity = "1"; - $("mochaToolbar").removeClass("invisible"); + $("mochaToolbar").classList.remove("invisible"); } else { $("showTopToolbarLink").firstElementChild.style.opacity = "0"; - $("mochaToolbar").addClass("invisible"); + $("mochaToolbar").classList.add("invisible"); } MochaUI.Desktop.setDesktopSize(); }); @@ -1137,11 +1137,11 @@ window.addEventListener("DOMContentLoaded", () => { LocalPreferences.set("show_status_bar", showStatusBar.toString()); if (showStatusBar) { $("showStatusBarLink").firstElementChild.style.opacity = "1"; - $("desktopFooterWrapper").removeClass("invisible"); + $("desktopFooterWrapper").classList.remove("invisible"); } else { $("showStatusBarLink").firstElementChild.style.opacity = "0"; - $("desktopFooterWrapper").addClass("invisible"); + $("desktopFooterWrapper").classList.add("invisible"); } MochaUI.Desktop.setDesktopSize(); }); @@ -1175,13 +1175,13 @@ window.addEventListener("DOMContentLoaded", () => { LocalPreferences.set("show_filters_sidebar", showFiltersSidebar.toString()); if (showFiltersSidebar) { $("showFiltersSidebarLink").firstElementChild.style.opacity = "1"; - $("filtersColumn").removeClass("invisible"); - $("filtersColumn_handle").removeClass("invisible"); + $("filtersColumn").classList.remove("invisible"); + $("filtersColumn_handle").classList.remove("invisible"); } else { $("showFiltersSidebarLink").firstElementChild.style.opacity = "0"; - $("filtersColumn").addClass("invisible"); - $("filtersColumn_handle").addClass("invisible"); + $("filtersColumn").classList.add("invisible"); + $("filtersColumn_handle").classList.add("invisible"); } MochaUI.Desktop.setDesktopSize(); }); @@ -1217,49 +1217,49 @@ window.addEventListener("DOMContentLoaded", () => { const updateTabDisplay = () => { if (window.qBittorrent.Client.isShowRssReader()) { $("showRssReaderLink").firstElementChild.style.opacity = "1"; - $("mainWindowTabs").removeClass("invisible"); - $("rssTabLink").removeClass("invisible"); + $("mainWindowTabs").classList.remove("invisible"); + $("rssTabLink").classList.remove("invisible"); if (!MochaUI.Panels.instances.RssPanel) addRssPanel(); } else { $("showRssReaderLink").firstElementChild.style.opacity = "0"; - $("rssTabLink").addClass("invisible"); - if ($("rssTabLink").hasClass("selected")) + $("rssTabLink").classList.add("invisible"); + if ($("rssTabLink").classList.contains("selected")) $("transfersTabLink").click(); } if (window.qBittorrent.Client.isShowSearchEngine()) { $("showSearchEngineLink").firstElementChild.style.opacity = "1"; - $("mainWindowTabs").removeClass("invisible"); - $("searchTabLink").removeClass("invisible"); + $("mainWindowTabs").classList.remove("invisible"); + $("searchTabLink").classList.remove("invisible"); if (!MochaUI.Panels.instances.SearchPanel) addSearchPanel(); } else { $("showSearchEngineLink").firstElementChild.style.opacity = "0"; - $("searchTabLink").addClass("invisible"); - if ($("searchTabLink").hasClass("selected")) + $("searchTabLink").classList.add("invisible"); + if ($("searchTabLink").classList.contains("selected")) $("transfersTabLink").click(); } if (window.qBittorrent.Client.isShowLogViewer()) { $("showLogViewerLink").firstElementChild.style.opacity = "1"; - $("mainWindowTabs").removeClass("invisible"); - $("logTabLink").removeClass("invisible"); + $("mainWindowTabs").classList.remove("invisible"); + $("logTabLink").classList.remove("invisible"); if (!MochaUI.Panels.instances.LogPanel) addLogPanel(); } else { $("showLogViewerLink").firstElementChild.style.opacity = "0"; - $("logTabLink").addClass("invisible"); - if ($("logTabLink").hasClass("selected")) + $("logTabLink").classList.add("invisible"); + if ($("logTabLink").classList.contains("selected")) $("transfersTabLink").click(); } // display no tabs if (!window.qBittorrent.Client.isShowRssReader() && !window.qBittorrent.Client.isShowSearchEngine() && !window.qBittorrent.Client.isShowLogViewer()) - $("mainWindowTabs").addClass("invisible"); + $("mainWindowTabs").classList.add("invisible"); }; $("StatisticsLink").addEventListener("click", () => { StatisticsLinkFN(); }); @@ -1269,11 +1269,11 @@ window.addEventListener("DOMContentLoaded", () => { const showTransfersTab = () => { const showFiltersSidebar = LocalPreferences.get("show_filters_sidebar", "true") === "true"; if (showFiltersSidebar) { - $("filtersColumn").removeClass("invisible"); - $("filtersColumn_handle").removeClass("invisible"); + $("filtersColumn").classList.remove("invisible"); + $("filtersColumn_handle").classList.remove("invisible"); } - $("mainColumn").removeClass("invisible"); - $("torrentsFilterToolbar").removeClass("invisible"); + $("mainColumn").classList.remove("invisible"); + $("torrentsFilterToolbar").classList.remove("invisible"); customSyncMainDataInterval = null; syncData(100); @@ -1286,10 +1286,10 @@ window.addEventListener("DOMContentLoaded", () => { }; const hideTransfersTab = () => { - $("filtersColumn").addClass("invisible"); - $("filtersColumn_handle").addClass("invisible"); - $("mainColumn").addClass("invisible"); - $("torrentsFilterToolbar").addClass("invisible"); + $("filtersColumn").classList.add("invisible"); + $("filtersColumn_handle").classList.add("invisible"); + $("mainColumn").classList.add("invisible"); + $("torrentsFilterToolbar").classList.add("invisible"); MochaUI.Desktop.resizePanels(); }; @@ -1312,7 +1312,7 @@ window.addEventListener("DOMContentLoaded", () => { searchTabInitialized = true; } - $("searchTabColumn").removeClass("invisible"); + $("searchTabColumn").classList.remove("invisible"); customSyncMainDataInterval = 30000; hideTransfersTab(); hideRssTab(); @@ -1323,7 +1323,7 @@ window.addEventListener("DOMContentLoaded", () => { })(); const hideSearchTab = () => { - $("searchTabColumn").addClass("invisible"); + $("searchTabColumn").classList.add("invisible"); MochaUI.Desktop.resizePanels(); }; @@ -1349,7 +1349,7 @@ window.addEventListener("DOMContentLoaded", () => { window.qBittorrent.Rss.load(); } - $("rssTabColumn").removeClass("invisible"); + $("rssTabColumn").classList.remove("invisible"); customSyncMainDataInterval = 30000; hideTransfersTab(); hideSearchTab(); @@ -1360,7 +1360,7 @@ window.addEventListener("DOMContentLoaded", () => { })(); const hideRssTab = () => { - $("rssTabColumn").addClass("invisible"); + $("rssTabColumn").classList.add("invisible"); window.qBittorrent.Rss && window.qBittorrent.Rss.unload(); MochaUI.Desktop.resizePanels(); }; @@ -1387,7 +1387,7 @@ window.addEventListener("DOMContentLoaded", () => { window.qBittorrent.Log.load(); } - $("logTabColumn").removeClass("invisible"); + $("logTabColumn").classList.remove("invisible"); customSyncMainDataInterval = 30000; hideTransfersTab(); hideSearchTab(); @@ -1398,7 +1398,7 @@ window.addEventListener("DOMContentLoaded", () => { })(); const hideLogTab = () => { - $("logTabColumn").addClass("invisible"); + $("logTabColumn").classList.add("invisible"); MochaUI.Desktop.resizePanels(); window.qBittorrent.Log && window.qBittorrent.Log.unload(); }; diff --git a/src/webui/www/private/scripts/contextmenu.js b/src/webui/www/private/scripts/contextmenu.js index 00ea280a4..919e17680 100644 --- a/src/webui/www/private/scripts/contextmenu.js +++ b/src/webui/www/private/scripts/contextmenu.js @@ -92,7 +92,7 @@ window.qBittorrent.ContextMenu ??= (() => { const scrollableMenuMaxHeight = document.documentElement.clientHeight * 0.75; - if (this.menu.hasClass("scrollableMenu")) + if (this.menu.classList.contains("scrollableMenu")) this.menu.style.maxHeight = `${scrollableMenuMaxHeight}px`; // draw the menu off-screen to know the menu dimensions @@ -119,7 +119,7 @@ window.qBittorrent.ContextMenu ??= (() => { const uls = this.menu.getElementsByTagName("ul"); for (let i = 0; i < uls.length; ++i) { const ul = uls[i]; - if (ul.hasClass("scrollableMenu")) + if (ul.classList.contains("scrollableMenu")) ul.style.maxHeight = `${scrollableMenuMaxHeight}px`; const rectParent = ul.parentNode.getBoundingClientRect(); const xPosOrigin = rectParent.left; @@ -257,13 +257,13 @@ window.qBittorrent.ContextMenu ??= (() => { // hide an item hideItem(item) { - this.menu.getElement("a[href$=" + item + "]").parentNode.addClass("invisible"); + this.menu.getElement("a[href$=" + item + "]").parentNode.classList.add("invisible"); return this; } // show an item showItem(item) { - this.menu.getElement("a[href$=" + item + "]").parentNode.removeClass("invisible"); + this.menu.getElement("a[href$=" + item + "]").parentNode.classList.remove("invisible"); return this; } @@ -405,7 +405,7 @@ window.qBittorrent.ContextMenu ??= (() => { if (all_are_downloaded) { this.hideItem("downloadLimit"); - this.menu.getElement("a[href$=uploadLimit]").parentNode.addClass("separator"); + this.menu.getElement("a[href$=uploadLimit]").parentNode.classList.add("separator"); this.hideItem("sequentialDownload"); this.hideItem("firstLastPiecePrio"); this.showItem("superSeeding"); @@ -415,10 +415,7 @@ window.qBittorrent.ContextMenu ??= (() => { const show_seq_dl = (all_are_seq_dl || !there_are_seq_dl); const show_f_l_piece_prio = (all_are_f_l_piece_prio || !there_are_f_l_piece_prio); - if (!show_seq_dl && show_f_l_piece_prio) - this.menu.getElement("a[href$=firstLastPiecePrio]").parentNode.addClass("separator"); - else - this.menu.getElement("a[href$=firstLastPiecePrio]").parentNode.removeClass("separator"); + this.menu.getElement("a[href$=firstLastPiecePrio]").parentNode.classList.toggle("separator", (!show_seq_dl && show_f_l_piece_prio)); if (show_seq_dl) this.showItem("sequentialDownload"); @@ -434,7 +431,7 @@ window.qBittorrent.ContextMenu ??= (() => { this.setItemChecked("firstLastPiecePrio", all_are_f_l_piece_prio); this.showItem("downloadLimit"); - this.menu.getElement("a[href$=uploadLimit]").parentNode.removeClass("separator"); + this.menu.getElement("a[href$=uploadLimit]").parentNode.classList.remove("separator"); this.hideItem("superSeeding"); } @@ -525,7 +522,7 @@ window.qBittorrent.ContextMenu ??= (() => { const setCategoryItem = document.createElement("li"); setCategoryItem.appendChild(anchor); if (first) { - setCategoryItem.addClass("separator"); + setCategoryItem.classList.add("separator"); first = false; } @@ -583,7 +580,7 @@ window.qBittorrent.ContextMenu ??= (() => { const setTagItem = document.createElement("li"); setTagItem.appendChild(anchor); if (i === 0) - setTagItem.addClass("separator"); + setTagItem.classList.add("separator"); contextTagList.appendChild(setTagItem); } @@ -661,11 +658,11 @@ window.qBittorrent.ContextMenu ??= (() => { class RssFeedContextMenu extends ContextMenu { updateMenuItems() { const selectedRows = window.qBittorrent.Rss.rssFeedTable.selectedRowsIds(); - this.menu.getElement("a[href$=newSubscription]").parentNode.addClass("separator"); + this.menu.getElement("a[href$=newSubscription]").parentNode.classList.add("separator"); switch (selectedRows.length) { case 0: // remove separator on top of newSubscription entry to avoid double line - this.menu.getElement("a[href$=newSubscription]").parentNode.removeClass("separator"); + this.menu.getElement("a[href$=newSubscription]").parentNode.classList.remove("separator"); // menu when nothing selected this.hideItem("update"); this.hideItem("markRead"); diff --git a/src/webui/www/private/scripts/dynamicTable.js b/src/webui/www/private/scripts/dynamicTable.js index 5e6017f02..42eb19c8d 100644 --- a/src/webui/www/private/scripts/dynamicTable.js +++ b/src/webui/www/private/scripts/dynamicTable.js @@ -597,11 +597,8 @@ window.qBittorrent.DynamicTable ??= (() => { th.textContent = this.columns[i].caption; th.setAttribute("style", "width: " + this.columns[i].width + "px;" + this.columns[i].style); th.columnName = this.columns[i].name; - th.addClass("column_" + th.columnName); - if ((this.columns[i].visible === "0") || this.columns[i].force_hide) - th.addClass("invisible"); - else - th.removeClass("invisible"); + th.classList.add("column_" + th.columnName); + th.classList.toggle("invisible", ((this.columns[i].visible === "0") || this.columns[i].force_hide)); } }, @@ -625,16 +622,16 @@ window.qBittorrent.DynamicTable ??= (() => { fths[pos].setAttribute("style", style); if (visible) { - ths[pos].removeClass("invisible"); - fths[pos].removeClass("invisible"); + ths[pos].classList.remove("invisible"); + fths[pos].classList.remove("invisible"); for (let i = 0; i < trs.length; ++i) - trs[i].getElements("td")[pos].removeClass("invisible"); + trs[i].getElements("td")[pos].classList.remove("invisible"); } else { - ths[pos].addClass("invisible"); - fths[pos].addClass("invisible"); + ths[pos].classList.add("invisible"); + fths[pos].classList.add("invisible"); for (let j = 0; j < trs.length; ++j) - trs[j].getElements("td")[pos].addClass("invisible"); + trs[j].getElements("td")[pos].classList.add("invisible"); } if (this.columns[pos].onResize !== null) this.columns[pos].onResize(columnName); @@ -675,16 +672,13 @@ window.qBittorrent.DynamicTable ??= (() => { const colElem = getCol(this.dynamicTableFixedHeaderDivId, newColumn); if (colElem !== null) { - colElem.addClass("sorted"); - if (isReverse) - colElem.addClass("reverse"); - else - colElem.removeClass("reverse"); + colElem.classList.add("sorted"); + colElem.classList.toggle("reverse", isReverse); } const oldColElem = getCol(this.dynamicTableFixedHeaderDivId, oldColumn); if (oldColElem !== null) { - oldColElem.removeClass("sorted"); - oldColElem.removeClass("reverse"); + oldColElem.classList.remove("sorted"); + oldColElem.classList.remove("reverse"); } }, @@ -711,8 +705,7 @@ window.qBittorrent.DynamicTable ??= (() => { for (let i = 0; i < trs.length; ++i) { const tr = trs[i]; this.selectedRows.push(tr.rowId); - if (!tr.hasClass("selected")) - tr.addClass("selected"); + tr.classList.add("selected"); } }, @@ -759,18 +752,13 @@ window.qBittorrent.DynamicTable ??= (() => { this.selectedRows = rowIds.slice(); this.tableBody.getElements("tr").each((tr) => { if (rowIds.includes(tr.rowId)) - tr.addClass("selected"); + tr.classList.add("selected"); }); }, setRowClass: function() { - const that = this; - this.tableBody.getElements("tr").each((tr) => { - if (that.isRowSelected(tr.rowId)) - tr.addClass("selected"); - else - tr.removeClass("selected"); - }); + for (const tr of this.tableBody.querySelectorAll("tr")) + tr.classList.toggle("selected", this.isRowSelected(tr.rowId)); }, onSelectedRowChanged: () => {}, @@ -874,7 +862,7 @@ window.qBittorrent.DynamicTable ??= (() => { for (let k = 0; k < this.columns.length; ++k) { const td = new Element("td"); if ((this.columns[k].visible === "0") || this.columns[k].force_hide) - td.addClass("invisible"); + td.classList.add("invisible"); td.injectInside(tr); } @@ -1959,14 +1947,14 @@ window.qBittorrent.DynamicTable ??= (() => { if (value) { td.textContent = "QBT_TR(Yes)QBT_TR[CONTEXT=SearchPluginsTable]"; td.title = "QBT_TR(Yes)QBT_TR[CONTEXT=SearchPluginsTable]"; - td.getParent("tr").addClass("green"); - td.getParent("tr").removeClass("red"); + td.getParent("tr").classList.add("green"); + td.getParent("tr").classList.remove("red"); } else { td.textContent = "QBT_TR(No)QBT_TR[CONTEXT=SearchPluginsTable]"; td.title = "QBT_TR(No)QBT_TR[CONTEXT=SearchPluginsTable]"; - td.getParent("tr").addClass("red"); - td.getParent("tr").removeClass("green"); + td.getParent("tr").classList.add("red"); + td.getParent("tr").classList.remove("green"); } }; }, @@ -2967,7 +2955,7 @@ window.qBittorrent.DynamicTable ??= (() => { if (row.rowId === rowId) { articleId = row.full_data.dataId; feedUid = row.full_data.feedUid; - this.tableBody.rows[row.rowId].removeClass("unreadArticle"); + this.tableBody.rows[row.rowId].classList.remove("unreadArticle"); break; } } @@ -2987,10 +2975,7 @@ window.qBittorrent.DynamicTable ??= (() => { updateRow: function(tr, fullUpdate) { const row = this.rows.get(tr.rowId); const data = row[fullUpdate ? "full_data" : "data"]; - if (!row.full_data.isRead) - tr.addClass("unreadArticle"); - else - tr.removeClass("unreadArticle"); + tr.classList.toggle("unreadArticle", !row.full_data.isRead); const tds = tr.getElements("td"); for (let i = 0; i < this.columns.length; ++i) { @@ -3260,12 +3245,12 @@ window.qBittorrent.DynamicTable ??= (() => { const data = row[fullUpdate ? "full_data" : "data"]; if (row.full_data.isFeed) { - tr.addClass("articleTableFeed"); - tr.removeClass("articleTableArticle"); + tr.classList.add("articleTableFeed"); + tr.classList.remove("articleTableArticle"); } else { - tr.removeClass("articleTableFeed"); - tr.addClass("articleTableArticle"); + tr.classList.remove("articleTableFeed"); + tr.classList.add("articleTableArticle"); } const tds = tr.getElements("td"); diff --git a/src/webui/www/private/scripts/prop-files.js b/src/webui/www/private/scripts/prop-files.js index 2fbc3a962..0edf84392 100644 --- a/src/webui/www/private/scripts/prop-files.js +++ b/src/webui/www/private/scripts/prop-files.js @@ -179,7 +179,7 @@ window.qBittorrent.PropFiles ??= (() => { select.id = "comboPrio" + id; select.setAttribute("data-id", id); select.setAttribute("data-file-id", fileId); - select.addClass("combo_priority"); + select.classList.add("combo_priority"); select.addEventListener("change", fileComboboxChanged); select.appendChild(createOption(FilePriority.Ignored, (FilePriority.Ignored === selectedPriority), "QBT_TR(Do not download)QBT_TR[CONTEXT=PropListDelegate]")); @@ -335,8 +335,8 @@ window.qBittorrent.PropFiles ??= (() => { let loadTorrentFilesDataTimer = -1; const loadTorrentFilesData = () => { - if ($("propFiles").hasClass("invisible") - || $("propertiesPanel_collapseToggle").hasClass("panel-expand")) { + if ($("propFiles").classList.contains("invisible") + || $("propertiesPanel_collapseToggle").classList.contains("panel-expand")) { // Tab changed, don't do anything return; } @@ -668,10 +668,7 @@ window.qBittorrent.PropFiles ??= (() => { if (span === null) return; const rowElem = span.parentElement.parentElement; - if (shouldHide) - rowElem.addClass("invisible"); - else - rowElem.removeClass("invisible"); + rowElem.classList.toggle("invisible", shouldHide); }; /** @@ -689,10 +686,7 @@ window.qBittorrent.PropFiles ??= (() => { // rotate the collapse icon const collapseIcon = td.getElementsByClassName("filesTableCollapseIcon")[0]; - if (isCollapsed) - collapseIcon.addClass("rotate"); - else - collapseIcon.removeClass("rotate"); + collapseIcon.classList.toggle("rotate", isCollapsed); }; const _isCollapsed = (node) => { diff --git a/src/webui/www/private/scripts/prop-general.js b/src/webui/www/private/scripts/prop-general.js index c0c407e06..2fe7e32c4 100644 --- a/src/webui/www/private/scripts/prop-general.js +++ b/src/webui/www/private/scripts/prop-general.js @@ -76,8 +76,8 @@ window.qBittorrent.PropGeneral ??= (() => { let loadTorrentDataTimer = -1; const loadTorrentData = () => { - if ($("propGeneral").hasClass("invisible") - || $("propertiesPanel_collapseToggle").hasClass("panel-expand")) { + if ($("propGeneral").classList.contains("invisible") + || $("propertiesPanel_collapseToggle").classList.contains("panel-expand")) { // Tab changed, don't do anything return; } diff --git a/src/webui/www/private/scripts/prop-peers.js b/src/webui/www/private/scripts/prop-peers.js index 40dbca28f..bed2f4908 100644 --- a/src/webui/www/private/scripts/prop-peers.js +++ b/src/webui/www/private/scripts/prop-peers.js @@ -43,8 +43,8 @@ window.qBittorrent.PropPeers ??= (() => { let show_flags = true; const loadTorrentPeersData = () => { - if ($("propPeers").hasClass("invisible") - || $("propertiesPanel_collapseToggle").hasClass("panel-expand")) { + if ($("propPeers").classList.contains("invisible") + || $("propertiesPanel_collapseToggle").classList.contains("panel-expand")) { syncTorrentPeersLastResponseId = 0; torrentPeersTable.clear(); return; diff --git a/src/webui/www/private/scripts/prop-trackers.js b/src/webui/www/private/scripts/prop-trackers.js index ab9cec75b..a87c7f830 100644 --- a/src/webui/www/private/scripts/prop-trackers.js +++ b/src/webui/www/private/scripts/prop-trackers.js @@ -43,8 +43,8 @@ window.qBittorrent.PropTrackers ??= (() => { let loadTrackersDataTimer = -1; const loadTrackersData = () => { - if ($("propTrackers").hasClass("invisible") - || $("propertiesPanel_collapseToggle").hasClass("panel-expand")) { + if ($("propTrackers").classList.contains("invisible") + || $("propertiesPanel_collapseToggle").classList.contains("panel-expand")) { // Tab changed, don't do anything return; } diff --git a/src/webui/www/private/scripts/prop-webseeds.js b/src/webui/www/private/scripts/prop-webseeds.js index 8f80e4f88..b538443f2 100644 --- a/src/webui/www/private/scripts/prop-webseeds.js +++ b/src/webui/www/private/scripts/prop-webseeds.js @@ -43,8 +43,8 @@ window.qBittorrent.PropWebseeds ??= (() => { let loadWebSeedsDataTimer = -1; const loadWebSeedsData = () => { - if ($("propWebSeeds").hasClass("invisible") - || $("propertiesPanel_collapseToggle").hasClass("panel-expand")) { + if ($("propWebSeeds").classList.contains("invisible") + || $("propertiesPanel_collapseToggle").classList.contains("panel-expand")) { // Tab changed, don't do anything return; } diff --git a/src/webui/www/private/scripts/search.js b/src/webui/www/private/scripts/search.js index 42466229c..a756a54b7 100644 --- a/src/webui/www/private/scripts/search.js +++ b/src/webui/www/private/scripts/search.js @@ -238,7 +238,7 @@ window.qBittorrent.Search ??= (() => { return; const searchId = getSearchIdFromTab(tab); - const isTabSelected = tab.hasClass("selected"); + const isTabSelected = tab.classList.contains("selected"); const newTabToSelect = isTabSelected ? (tab.nextSibling || tab.previousSibling) : null; const currentSearchId = getSelectedSearchId(); diff --git a/src/webui/www/private/views/aboutToolbar.html b/src/webui/www/private/views/aboutToolbar.html index 21f25080d..da71e9850 100644 --- a/src/webui/www/private/views/aboutToolbar.html +++ b/src/webui/www/private/views/aboutToolbar.html @@ -17,33 +17,33 @@ MochaUI.initializeTabs("aboutTabs"); $("aboutAboutLink").addEventListener("click", () => { - $$(".aboutTabContent").addClass("invisible"); - $("aboutAboutContent").removeClass("invisible"); + $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + $("aboutAboutContent").classList.remove("invisible"); }); $("aboutAuthorLink").addEventListener("click", () => { - $$(".aboutTabContent").addClass("invisible"); - $("aboutAuthorContent").removeClass("invisible"); + $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + $("aboutAuthorContent").classList.remove("invisible"); }); $("aboutSpecialThanksLink").addEventListener("click", () => { - $$(".aboutTabContent").addClass("invisible"); - $("aboutSpecialThanksContent").removeClass("invisible"); + $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + $("aboutSpecialThanksContent").classList.remove("invisible"); }); $("aboutTranslatorsLink").addEventListener("click", () => { - $$(".aboutTabContent").addClass("invisible"); - $("aboutTranslatorsContent").removeClass("invisible"); + $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + $("aboutTranslatorsContent").classList.remove("invisible"); }); $("aboutLicenseLink").addEventListener("click", () => { - $$(".aboutTabContent").addClass("invisible"); - $("aboutLicenseContent").removeClass("invisible"); + $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + $("aboutLicenseContent").classList.remove("invisible"); }); $("aboutSoftwareUsedLink").addEventListener("click", () => { - $$(".aboutTabContent").addClass("invisible"); - $("aboutSoftwareUsedContent").removeClass("invisible"); + $$(".aboutTabContent").forEach(tab => { tab.classList.add("invisible"); }); + $("aboutSoftwareUsedContent").classList.remove("invisible"); }); })(); diff --git a/src/webui/www/private/views/cookies.html b/src/webui/www/private/views/cookies.html index 5767b39d1..0b6c6fa5d 100644 --- a/src/webui/www/private/views/cookies.html +++ b/src/webui/www/private/views/cookies.html @@ -108,7 +108,7 @@ }; const save = () => { - const rows = [...document.querySelectorAll("#manageCookiesTable tbody tr")].filter(e => !e.hasClass("invisible")); + const rows = [...document.querySelectorAll("#manageCookiesTable tbody tr")].filter(e => !e.classList.contains("invisible")); const cookies = rows.map(row => { const expDateValue = row.querySelector("td.expDate input").valueAsNumber; // remove ms from string diff --git a/src/webui/www/private/views/log.html b/src/webui/www/private/views/log.html index eab8c2134..1f54315f5 100644 --- a/src/webui/www/private/views/log.html +++ b/src/webui/www/private/views/log.html @@ -306,14 +306,14 @@ currentSelectedTab = tab; if (currentSelectedTab === "main") { selectBox.enable(); - $("logMessageView").removeClass("invisible"); - $("logPeerView").addClass("invisible"); + $("logMessageView").classList.remove("invisible"); + $("logPeerView").classList.add("invisible"); resetTableTimer("peer"); } else { selectBox.disable(); - $("logMessageView").addClass("invisible"); - $("logPeerView").removeClass("invisible"); + $("logMessageView").classList.add("invisible"); + $("logPeerView").classList.remove("invisible"); resetTableTimer("main"); } @@ -370,7 +370,7 @@ onSuccess: (response) => { $("error_div").textContent = ""; - if ($("logTabColumn").hasClass("invisible")) + if ($("logTabColumn").classList.contains("invisible")) return; if (response.length > 0) { diff --git a/src/webui/www/private/views/preferencesToolbar.html b/src/webui/www/private/views/preferencesToolbar.html index ee7eee500..3ac17c31d 100644 --- a/src/webui/www/private/views/preferencesToolbar.html +++ b/src/webui/www/private/views/preferencesToolbar.html @@ -37,36 +37,36 @@ MochaUI.initializeTabs("preferencesTabs"); $("PrefBehaviorLink").addEventListener("click", (e) => { - $$(".PrefTab").addClass("invisible"); - $("BehaviorTab").removeClass("invisible"); + $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + $("BehaviorTab").classList.remove("invisible"); }); $("PrefDownloadsLink").addEventListener("click", (e) => { - $$(".PrefTab").addClass("invisible"); - $("DownloadsTab").removeClass("invisible"); + $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + $("DownloadsTab").classList.remove("invisible"); }); $("PrefConnectionLink").addEventListener("click", (e) => { - $$(".PrefTab").addClass("invisible"); - $("ConnectionTab").removeClass("invisible"); + $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + $("ConnectionTab").classList.remove("invisible"); }); $("PrefSpeedLink").addEventListener("click", (e) => { - $$(".PrefTab").addClass("invisible"); - $("SpeedTab").removeClass("invisible"); + $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + $("SpeedTab").classList.remove("invisible"); }); $("PrefBittorrentLink").addEventListener("click", (e) => { - $$(".PrefTab").addClass("invisible"); - $("BittorrentTab").removeClass("invisible"); + $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + $("BittorrentTab").classList.remove("invisible"); }); $("PrefRSSLink").addEventListener("click", (e) => { - $$(".PrefTab").addClass("invisible"); - $("RSSTab").removeClass("invisible"); + $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + $("RSSTab").classList.remove("invisible"); }); $("PrefWebUILink").addEventListener("click", (e) => { - $$(".PrefTab").addClass("invisible"); - $("WebUITab").removeClass("invisible"); + $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + $("WebUITab").classList.remove("invisible"); }); $("PrefAdvancedLink").addEventListener("click", (e) => { - $$(".PrefTab").addClass("invisible"); - $("AdvancedTab").removeClass("invisible"); + $$(".PrefTab").forEach(tab => { tab.classList.add("invisible"); }); + $("AdvancedTab").classList.remove("invisible"); }); })(); diff --git a/src/webui/www/private/views/rss.html b/src/webui/www/private/views/rss.html index e46f0f306..c896d2114 100644 --- a/src/webui/www/private/views/rss.html +++ b/src/webui/www/private/views/rss.html @@ -215,7 +215,7 @@ const pref = window.parent.qBittorrent.Cache.preferences.get(); if (!pref.rss_processing_enabled) - $("rssFetchingDisabled").removeClass("invisible"); + $("rssFetchingDisabled").classList.remove("invisible"); const rssFeedContextMenu = new window.qBittorrent.ContextMenu.RssFeedContextMenu({ targets: "#rssFeedTableDiv tr", diff --git a/src/webui/www/private/views/rssDownloader.html b/src/webui/www/private/views/rssDownloader.html index d644fe0dc..33d9a73ca 100644 --- a/src/webui/www/private/views/rssDownloader.html +++ b/src/webui/www/private/views/rssDownloader.html @@ -370,7 +370,7 @@ Supports the formats: S01E01, 1x1, 2017.12.31 and 31.12.2017 (Date formats also const pref = window.parent.qBittorrent.Cache.preferences.get(); if (!pref.rss_auto_downloading_enabled) - $("rssDownloaderDisabled").removeClass("invisible"); + $("rssDownloaderDisabled").classList.remove("invisible"); // recalculate height const warningHeight = $("rssDownloaderDisabled").getBoundingClientRect().height;