WebUI: prefer arrow functions whenever applicable

Compared to plain function, arrow function is simpler to understand (without bindings to `this`, `arguments`, `super`) and to read.
Now, plain function will only be used when this object is required.

PR #21691.
This commit is contained in:
Chocobo1 2024-11-01 04:17:41 +08:00 committed by GitHub
parent 7af6ac18aa
commit 72cbc83569
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
49 changed files with 574 additions and 570 deletions

View file

@ -1,6 +1,7 @@
import Globals from "globals";
import Html from "eslint-plugin-html";
import Js from "@eslint/js";
import PreferArrowFunctions from "eslint-plugin-prefer-arrow-functions";
import Stylistic from "@stylistic/eslint-plugin";
import * as RegexpPlugin from "eslint-plugin-regexp";
@ -22,6 +23,7 @@ export default [
},
plugins: {
Html,
PreferArrowFunctions,
RegexpPlugin,
Stylistic
},
@ -36,6 +38,7 @@ export default [
"prefer-arrow-callback": "error",
"prefer-const": "error",
"radix": "error",
"PreferArrowFunctions/prefer-arrow-functions": "error",
"Stylistic/no-mixed-operators": [
"error",
{

View file

@ -13,6 +13,7 @@
"@stylistic/eslint-plugin": "*",
"eslint": "*",
"eslint-plugin-html": "*",
"eslint-plugin-prefer-arrow-functions": "*",
"eslint-plugin-regexp": "*",
"html-validate": "*",
"js-beautify": "*",

View file

@ -46,10 +46,10 @@
hashes: hash,
peers: peers.join("|")
},
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Unable to add peers. Please ensure you are adhering to the IP:port format.)QBT_TR[CONTEXT=HttpServer]");
},
onSuccess: function() {
onSuccess: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();

View file

@ -38,7 +38,7 @@
hash: hash,
urls: $("trackersUrls").value
},
onComplete: function() {
onComplete: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();

View file

@ -36,7 +36,7 @@
hash: hash,
urls: $("urls").value.split("\n").map(w => encodeURIComponent(w.trim())).filter(w => (w.length > 0)).join("|")
},
onComplete: function() {
onComplete: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();

View file

@ -30,7 +30,7 @@
hash: "*",
urls: urls,
},
onComplete: function() {
onComplete: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();

View file

@ -32,7 +32,7 @@
"use strict";
const hashes = new URI().getData("hashes").split("|");
const setDlLimit = function() {
const setDlLimit = () => {
const limit = $("dllimitUpdatevalue").value.toInt() * 1024;
if (hashes[0] === "global") {
new Request({
@ -41,7 +41,7 @@
data: {
"limit": limit
},
onComplete: function() {
onComplete: () => {
window.parent.updateMainData();
window.parent.qBittorrent.Client.closeWindows();
}
@ -55,7 +55,7 @@
"hashes": hashes.join("|"),
"limit": limit
},
onComplete: function() {
onComplete: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();

View file

@ -49,7 +49,7 @@
origUrl: currentUrl,
newUrl: $("trackerUrl").value
},
onComplete: function() {
onComplete: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();

View file

@ -44,7 +44,7 @@
origUrl: origUrl,
newUrl: encodeURIComponent($("url").value.trim()),
},
onComplete: function() {
onComplete: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();

View file

@ -60,7 +60,7 @@
const savePath = $("savePath").value.trim();
const categoryName = $("categoryName").value.trim();
const verifyCategoryName = function(name) {
const verifyCategoryName = (name) => {
if ((name === null) || (name === ""))
return false;
if (name.match("^([^\\\\\\/]|[^\\\\\\/]([^\\\\\\/]|\\/(?=[^\\/]))*[^\\\\\\/])$") === null) {
@ -82,7 +82,7 @@
category: categoryName,
savePath: savePath
},
onSuccess: function() {
onSuccess: () => {
new Request({
url: "api/v2/torrents/setCategory",
method: "post",
@ -90,16 +90,16 @@
hashes: uriHashes,
category: categoryName
},
onSuccess: function() {
onSuccess: () => {
window.parent.updateMainData();
window.parent.qBittorrent.Client.closeWindows();
},
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Unable to set category)QBT_TR[CONTEXT=Category]");
}
}).send();
},
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Unable to create category)QBT_TR[CONTEXT=Category] " + window.qBittorrent.Misc.escapeHtml(categoryName));
}
}).send();
@ -116,11 +116,11 @@
category: categoryName,
savePath: savePath
},
onSuccess: function() {
onSuccess: () => {
window.parent.updateMainData();
window.parent.qBittorrent.Client.closeWindows();
},
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Unable to create category)QBT_TR[CONTEXT=Category]");
}
}).send();
@ -133,11 +133,11 @@
category: uriCategoryName, // category name can't be changed
savePath: savePath
},
onSuccess: function() {
onSuccess: () => {
window.parent.updateMainData();
window.parent.qBittorrent.Client.closeWindows();
},
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Unable to edit category)QBT_TR[CONTEXT=Category]");
}
}).send();

View file

@ -44,7 +44,7 @@
const tagName = $("tagName").value.trim();
const verifyTagName = function(name) {
const verifyTagName = (name) => {
if ((name === null) || (name === ""))
return false;
if (name.includes(",")) {
@ -66,7 +66,7 @@
hashes: uriHashes,
tags: tagName,
},
onComplete: function() {
onComplete: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();
@ -82,7 +82,7 @@
data: {
tags: tagName,
},
onComplete: function() {
onComplete: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();

View file

@ -54,7 +54,7 @@
hash: hash,
name: name
},
onComplete: function() {
onComplete: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();

View file

@ -71,10 +71,10 @@
oldPath: oldPath,
newPath: newPath
},
onSuccess: function() {
onSuccess: () => {
window.parent.qBittorrent.Client.closeWindows();
},
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Failed to update name)QBT_TR[CONTEXT=HttpServer]");
$("renameButton").disabled = false;
}

View file

@ -24,7 +24,7 @@
targets: "#bulkRenameFilesTableDiv tr",
menu: "multiRenameFilesMenu",
actions: {
ToggleSelection: function(element, ref) {
ToggleSelection: (element, ref) => {
const rowId = parseInt(element.getAttribute("data-row-id"), 10);
const row = bulkRenameFilesTable.getNode(rowId);
const checkState = (row.checked === 1) ? 0 : 1;
@ -128,7 +128,7 @@
}
// Fires every time a row's selection changes
bulkRenameFilesTable.onRowSelectionChange = function(row) {
bulkRenameFilesTable.onRowSelectionChange = (row) => {
fileRenamer.selectedFiles = bulkRenameFilesTable.getSelectedRows();
fileRenamer.update();
};
@ -162,7 +162,7 @@
/**
* Fires every time the filerenamer gets changed, it will update all the rows in the table
*/
fileRenamer.onChanged = function(matchedRows) {
fileRenamer.onChanged = (matchedRows) => {
// Clear renamed column
document
.querySelectorAll("span[id^='filesTablefileRenamed']")
@ -176,7 +176,7 @@
$("filesTablefileRenamed" + row.rowId).textContent = row.renamed;
}
};
fileRenamer.onInvalidRegex = function(err) {
fileRenamer.onInvalidRegex = (err) => {
$("multiRenameSearch").style["border-color"] = "#CC0033";
};
@ -239,7 +239,7 @@
$("rename_error").textContent = "";
fileRenamer.rename();
});
fileRenamer.onRenamed = function(rows) {
fileRenamer.onRenamed = (rows) => {
// Disable Search Options
$("multiRenameSearch").disabled = false;
$("use_regex_search").disabled = false;
@ -268,7 +268,7 @@
}
setupTable(selectedRows);
};
fileRenamer.onRenameError = function(err, row) {
fileRenamer.onRenameError = (err, row) => {
if (err.xhr.status === 409)
$("rename_error").textContent = `QBT_TR(Rename failed: file or folder already exists)QBT_TR[CONTEXT=PropertiesWidget] \`${row.renamed}\``;
};
@ -294,7 +294,7 @@
$("bulkRenameFilesTableFixedHeaderDiv").scrollLeft = length;
};
const handleTorrentFiles = function(files, selectedRows) {
const handleTorrentFiles = (files, selectedRows) => {
const rows = files.map((file, index) => {
const row = {
@ -312,7 +312,7 @@
addRowsToTable(rows, selectedRows);
};
const addRowsToTable = function(rows, selectedRows) {
const addRowsToTable = (rows, selectedRows) => {
let rowId = 0;
const rootNode = new window.qBittorrent.FileTree.FolderNode();
rootNode.autoCheckFolders = false;
@ -379,12 +379,12 @@
fileRenamer.update();
};
const setupTable = function(selectedRows) {
const setupTable = (selectedRows) => {
new Request.JSON({
url: new URI("api/v2/torrents/files?hash=" + data.hash),
noCache: true,
method: "get",
onSuccess: function(files) {
onSuccess: (files) => {
if (files.length === 0)
bulkRenameFilesTable.clear();
else

View file

@ -44,18 +44,18 @@ window.qBittorrent.Client ??= (() => {
};
};
const closeWindow = function(windowID) {
const closeWindow = (windowID) => {
const window = document.getElementById(windowID);
if (!window)
return;
MochaUI.closeWindow(window);
};
const closeWindows = function() {
const closeWindows = () => {
MochaUI.closeAll();
};
const getSyncMainDataInterval = function() {
const getSyncMainDataInterval = () => {
return customSyncMainDataInterval ? customSyncMainDataInterval : serverSyncMainDataInterval;
};
@ -81,22 +81,22 @@ window.qBittorrent.Client ??= (() => {
let showingRssReader = false;
let showingLogViewer = false;
const showSearchEngine = function(bool) {
const showSearchEngine = (bool) => {
showingSearchEngine = bool;
};
const showRssReader = function(bool) {
const showRssReader = (bool) => {
showingRssReader = bool;
};
const showLogViewer = function(bool) {
const showLogViewer = (bool) => {
showingLogViewer = bool;
};
const isShowSearchEngine = function() {
const isShowSearchEngine = () => {
return showingSearchEngine;
};
const isShowRssReader = function() {
const isShowRssReader = () => {
return showingRssReader;
};
const isShowLogViewer = function() {
const isShowLogViewer = () => {
return showingLogViewer;
};
@ -108,9 +108,9 @@ Object.freeze(window.qBittorrent.Client);
this.torrentsTable = new window.qBittorrent.DynamicTable.TorrentsTable();
let updatePropertiesPanel = function() {};
let updatePropertiesPanel = () => {};
this.updateMainData = function() {};
this.updateMainData = () => {};
let alternativeSpeedLimits = false;
let queueing_enabled = true;
let serverSyncMainDataInterval = 1500;
@ -126,7 +126,7 @@ const CATEGORIES_UNCATEGORIZED = 2;
const category_list = new Map();
let selectedCategory = Number(LocalPreferences.get("selected_category", CATEGORIES_ALL));
let setCategoryFilter = function() {};
let setCategoryFilter = () => {};
/* Tags filter */
const TAGS_ALL = 1;
@ -135,7 +135,7 @@ const TAGS_UNTAGGED = 2;
const tagList = new Map();
let selectedTag = Number(LocalPreferences.get("selected_tag", TAGS_ALL));
let setTagFilter = function() {};
let setTagFilter = () => {};
/* Trackers filter */
const TRACKERS_ALL = 1;
@ -145,19 +145,19 @@ const TRACKERS_TRACKERLESS = 2;
const trackerList = new Map();
let selectedTracker = Number(LocalPreferences.get("selected_tracker", TRACKERS_ALL));
let setTrackerFilter = function() {};
let setTrackerFilter = () => {};
/* All filters */
let selectedStatus = LocalPreferences.get("selected_filter", "all");
let setStatusFilter = function() {};
let toggleFilterDisplay = function() {};
let setStatusFilter = () => {};
let toggleFilterDisplay = () => {};
window.addEventListener("DOMContentLoaded", () => {
let isSearchPanelLoaded = false;
let isLogPanelLoaded = false;
let isRssPanelLoaded = false;
const saveColumnSizes = function() {
const saveColumnSizes = () => {
const filters_width = $("Filters").getSize().x;
LocalPreferences.set("filters_width", filters_width);
const properties_height_rel = $("propertiesPanel").getSize().y / Window.getSize().y;
@ -175,7 +175,7 @@ window.addEventListener("DOMContentLoaded", () => {
MochaUI.Desktop.desktop.style.visibility = "visible"; */
MochaUI.Desktop.initialize();
const buildTransfersTab = function() {
const buildTransfersTab = () => {
new MochaUI.Column({
id: "filtersColumn",
placement: "left",
@ -191,7 +191,7 @@ window.addEventListener("DOMContentLoaded", () => {
});
};
const buildSearchTab = function() {
const buildSearchTab = () => {
new MochaUI.Column({
id: "searchTabColumn",
placement: "main",
@ -202,7 +202,7 @@ window.addEventListener("DOMContentLoaded", () => {
$("searchTabColumn").addClass("invisible");
};
const buildRssTab = function() {
const buildRssTab = () => {
new MochaUI.Column({
id: "rssTabColumn",
placement: "main",
@ -213,7 +213,7 @@ window.addEventListener("DOMContentLoaded", () => {
$("rssTabColumn").addClass("invisible");
};
const buildLogTab = function() {
const buildLogTab = () => {
new MochaUI.Column({
id: "logTabColumn",
placement: "main",
@ -230,7 +230,7 @@ window.addEventListener("DOMContentLoaded", () => {
buildLogTab();
MochaUI.initializeTabs("mainWindowTabsList");
const handleFilterSelectionChange = function(prevSelectedTorrent, currSelectedTorrent) {
const handleFilterSelectionChange = (prevSelectedTorrent, currSelectedTorrent) => {
// clear properties panels when filter changes (e.g. selected torrent is no longer visible)
if (prevSelectedTorrent !== currSelectedTorrent) {
window.qBittorrent.PropGeneral.clear();
@ -241,7 +241,7 @@ window.addEventListener("DOMContentLoaded", () => {
}
};
setStatusFilter = function(name) {
setStatusFilter = (name) => {
const currentHash = torrentsTable.getCurrentTorrentID();
LocalPreferences.set("selected_filter", name);
@ -253,7 +253,7 @@ window.addEventListener("DOMContentLoaded", () => {
handleFilterSelectionChange(currentHash, newHash);
};
setCategoryFilter = function(hash) {
setCategoryFilter = (hash) => {
const currentHash = torrentsTable.getCurrentTorrentID();
LocalPreferences.set("selected_category", hash);
@ -265,7 +265,7 @@ window.addEventListener("DOMContentLoaded", () => {
handleFilterSelectionChange(currentHash, newHash);
};
setTagFilter = function(hash) {
setTagFilter = (hash) => {
const currentHash = torrentsTable.getCurrentTorrentID();
LocalPreferences.set("selected_tag", hash);
@ -277,7 +277,7 @@ window.addEventListener("DOMContentLoaded", () => {
handleFilterSelectionChange(currentHash, newHash);
};
setTrackerFilter = function(hash) {
setTrackerFilter = (hash) => {
const currentHash = torrentsTable.getCurrentTorrentID();
LocalPreferences.set("selected_tracker", hash);
@ -289,7 +289,7 @@ window.addEventListener("DOMContentLoaded", () => {
handleFilterSelectionChange(currentHash, newHash);
};
toggleFilterDisplay = function(filterListID) {
toggleFilterDisplay = (filterListID) => {
const filterList = document.getElementById(filterListID);
const filterTitle = filterList.previousElementSibling;
const toggleIcon = filterTitle.firstElementChild;
@ -309,7 +309,7 @@ window.addEventListener("DOMContentLoaded", () => {
},
loadMethod: "xhr",
contentURL: "views/filters.html",
onContentLoaded: function() {
onContentLoaded: () => {
highlightSelectedStatus();
},
column: "filtersColumn",
@ -354,7 +354,7 @@ window.addEventListener("DOMContentLoaded", () => {
let syncMainDataLastResponseId = 0;
const serverState = {};
const removeTorrentFromCategoryList = function(hash) {
const removeTorrentFromCategoryList = (hash) => {
if (!hash)
return false;
@ -367,7 +367,7 @@ window.addEventListener("DOMContentLoaded", () => {
return removed;
};
const addTorrentToCategoryList = function(torrent) {
const addTorrentToCategoryList = (torrent) => {
const category = torrent["category"];
if (typeof category === "undefined")
return false;
@ -395,7 +395,7 @@ window.addEventListener("DOMContentLoaded", () => {
return false;
};
const removeTorrentFromTagList = function(hash) {
const removeTorrentFromTagList = (hash) => {
if (!hash)
return false;
@ -408,7 +408,7 @@ window.addEventListener("DOMContentLoaded", () => {
return removed;
};
const addTorrentToTagList = function(torrent) {
const addTorrentToTagList = (torrent) => {
if (torrent["tags"] === undefined) // Tags haven't changed
return false;
@ -438,7 +438,7 @@ window.addEventListener("DOMContentLoaded", () => {
return added;
};
const updateFilter = function(filter, filterTitle) {
const updateFilter = (filter, filterTitle) => {
const filterEl = document.getElementById(`${filter}_filter`);
const filterTorrentCount = torrentsTable.getFilteredTorrentsNumber(filter, CATEGORIES_ALL, TAGS_ALL, TRACKERS_ALL);
if (useAutoHideZeroStatusFilters) {
@ -449,7 +449,7 @@ window.addEventListener("DOMContentLoaded", () => {
filterEl.firstElementChild.lastChild.nodeValue = filterTitle.replace("%1", filterTorrentCount);
};
const updateFiltersList = function() {
const updateFiltersList = () => {
updateFilter("all", "QBT_TR(All (%1))QBT_TR[CONTEXT=StatusFilterWidget]");
updateFilter("downloading", "QBT_TR(Downloading (%1))QBT_TR[CONTEXT=StatusFilterWidget]");
updateFilter("seeding", "QBT_TR(Seeding (%1))QBT_TR[CONTEXT=StatusFilterWidget]");
@ -466,14 +466,14 @@ window.addEventListener("DOMContentLoaded", () => {
updateFilter("errored", "QBT_TR(Errored (%1))QBT_TR[CONTEXT=StatusFilterWidget]");
};
const highlightSelectedStatus = function() {
const highlightSelectedStatus = () => {
const statusFilter = document.getElementById("statusFilterList");
const filterID = `${selectedStatus}_filter`;
for (const status of statusFilter.children)
status.classList.toggle("selectedFilter", (status.id === filterID));
};
const updateCategoryList = function() {
const updateCategoryList = () => {
const categoryList = document.getElementById("categoryFilterList");
if (!categoryList)
return;
@ -583,7 +583,7 @@ window.addEventListener("DOMContentLoaded", () => {
window.qBittorrent.Filters.categoriesFilterContextMenu.searchAndAddTargets();
};
const highlightSelectedCategory = function() {
const highlightSelectedCategory = () => {
const categoryList = document.getElementById("categoryFilterList");
if (!categoryList)
return;
@ -592,7 +592,7 @@ window.addEventListener("DOMContentLoaded", () => {
category.classList.toggle("selectedFilter", (Number(category.id) === selectedCategory));
};
const updateTagList = function() {
const updateTagList = () => {
const tagFilterList = $("tagFilterList");
if (tagFilterList === null)
return;
@ -601,7 +601,7 @@ window.addEventListener("DOMContentLoaded", () => {
const tagItemTemplate = document.getElementById("tagFilterItem");
const createLink = function(hash, text, count) {
const createLink = (hash, text, count) => {
const tagFilterItem = tagItemTemplate.content.cloneNode(true).firstElementChild;
tagFilterItem.id = hash;
tagFilterItem.classList.toggle("selectedFilter", hash === selectedTag);
@ -635,7 +635,7 @@ window.addEventListener("DOMContentLoaded", () => {
window.qBittorrent.Filters.tagsFilterContextMenu.searchAndAddTargets();
};
const highlightSelectedTag = function() {
const highlightSelectedTag = () => {
const tagFilterList = document.getElementById("tagFilterList");
if (!tagFilterList)
return;
@ -644,7 +644,7 @@ window.addEventListener("DOMContentLoaded", () => {
tag.classList.toggle("selectedFilter", (Number(tag.id) === selectedTag));
};
const updateTrackerList = function() {
const updateTrackerList = () => {
const trackerFilterList = $("trackerFilterList");
if (trackerFilterList === null)
return;
@ -653,7 +653,7 @@ window.addEventListener("DOMContentLoaded", () => {
const trackerItemTemplate = document.getElementById("trackerFilterItem");
const createLink = function(hash, text, count) {
const createLink = (hash, text, count) => {
const trackerFilterItem = trackerItemTemplate.content.cloneNode(true).firstElementChild;
trackerFilterItem.id = hash;
trackerFilterItem.classList.toggle("selectedFilter", hash === selectedTracker);
@ -695,7 +695,7 @@ window.addEventListener("DOMContentLoaded", () => {
window.qBittorrent.Filters.trackersFilterContextMenu.searchAndAddTargets();
};
const highlightSelectedTracker = function() {
const highlightSelectedTracker = () => {
const trackerFilterList = document.getElementById("trackerFilterList");
if (!trackerFilterList)
return;
@ -728,21 +728,21 @@ window.addEventListener("DOMContentLoaded", () => {
let syncMainDataTimeoutID = -1;
let syncRequestInProgress = false;
const syncMainData = function() {
const syncMainData = () => {
const url = new URI("api/v2/sync/maindata");
url.setData("rid", syncMainDataLastResponseId);
const request = new Request.JSON({
url: url,
noCache: true,
method: "get",
onFailure: function() {
onFailure: () => {
const errorDiv = $("error_div");
if (errorDiv)
errorDiv.textContent = "QBT_TR(qBittorrent client is not reachable)QBT_TR[CONTEXT=HttpServer]";
syncRequestInProgress = false;
syncData(2000);
},
onSuccess: function(response) {
onSuccess: (response) => {
$("error_div").textContent = "";
if (response) {
clearTimeout(torrentsFilterInputTimer);
@ -909,12 +909,12 @@ window.addEventListener("DOMContentLoaded", () => {
request.send();
};
updateMainData = function() {
updateMainData = () => {
torrentsTable.updateTable();
syncData(100);
};
const syncData = function(delay) {
const syncData = (delay) => {
if (syncRequestInProgress)
return;
@ -927,7 +927,7 @@ window.addEventListener("DOMContentLoaded", () => {
syncMainDataTimeoutID = syncMainData.delay(delay);
};
const processServerState = function() {
const processServerState = () => {
let transfer_info = window.qBittorrent.Misc.friendlyUnit(serverState.dl_info_speed, true);
if (serverState.dl_rate_limit > 0)
transfer_info += " [" + window.qBittorrent.Misc.friendlyUnit(serverState.dl_rate_limit, true) + "]";
@ -1028,7 +1028,7 @@ window.addEventListener("DOMContentLoaded", () => {
serverSyncMainDataInterval = Math.max(serverState.refresh_interval, 500);
};
const updateAltSpeedIcon = function(enabled) {
const updateAltSpeedIcon = (enabled) => {
if (enabled) {
$("alternativeSpeedLimits").src = "images/slow.svg";
$("alternativeSpeedLimits").alt = "QBT_TR(Alternative speed limits: On)QBT_TR[CONTEXT=MainWindow]";
@ -1048,11 +1048,11 @@ window.addEventListener("DOMContentLoaded", () => {
new Request({
url: "api/v2/transfer/toggleSpeedLimitsMode",
method: "post",
onComplete: function() {
onComplete: () => {
alternativeSpeedLimits = !alternativeSpeedLimits;
updateMainData();
},
onFailure: function() {
onFailure: () => {
// Restore icon in case of failure
updateAltSpeedIcon(alternativeSpeedLimits);
}
@ -1090,7 +1090,7 @@ window.addEventListener("DOMContentLoaded", () => {
MochaUI.Desktop.setDesktopSize();
});
const registerMagnetHandler = function() {
const registerMagnetHandler = () => {
if (typeof navigator.registerProtocolHandler !== "function") {
if (window.location.protocol !== "https:")
alert("QBT_TR(To use this feature, the WebUI needs to be accessed over HTTPS)QBT_TR[CONTEXT=MainWindow]");
@ -1158,7 +1158,7 @@ window.addEventListener("DOMContentLoaded", () => {
updateTabDisplay();
});
const updateTabDisplay = function() {
const updateTabDisplay = () => {
if (window.qBittorrent.Client.isShowRssReader()) {
$("showRssReaderLink").firstChild.style.opacity = "1";
$("mainWindowTabs").removeClass("invisible");
@ -1210,7 +1210,7 @@ window.addEventListener("DOMContentLoaded", () => {
// main window tabs
const showTransfersTab = function() {
const showTransfersTab = () => {
const showFiltersSidebar = LocalPreferences.get("show_filters_sidebar", "true") === "true";
if (showFiltersSidebar) {
$("filtersColumn").removeClass("invisible");
@ -1229,7 +1229,7 @@ window.addEventListener("DOMContentLoaded", () => {
LocalPreferences.set("selected_window_tab", "transfers");
};
const hideTransfersTab = function() {
const hideTransfersTab = () => {
$("filtersColumn").addClass("invisible");
$("filtersColumn_handle").addClass("invisible");
$("mainColumn").addClass("invisible");
@ -1237,7 +1237,7 @@ window.addEventListener("DOMContentLoaded", () => {
MochaUI.Desktop.resizePanels();
};
const showSearchTab = (function() {
const showSearchTab = (() => {
let searchTabInitialized = false;
return () => {
@ -1266,12 +1266,12 @@ window.addEventListener("DOMContentLoaded", () => {
};
})();
const hideSearchTab = function() {
const hideSearchTab = () => {
$("searchTabColumn").addClass("invisible");
MochaUI.Desktop.resizePanels();
};
const showRssTab = (function() {
const showRssTab = (() => {
let rssTabInitialized = false;
return () => {
@ -1303,13 +1303,13 @@ window.addEventListener("DOMContentLoaded", () => {
};
})();
const hideRssTab = function() {
const hideRssTab = () => {
$("rssTabColumn").addClass("invisible");
window.qBittorrent.Rss && window.qBittorrent.Rss.unload();
MochaUI.Desktop.resizePanels();
};
const showLogTab = (function() {
const showLogTab = (() => {
let logTabInitialized = false;
return () => {
@ -1341,13 +1341,13 @@ window.addEventListener("DOMContentLoaded", () => {
};
})();
const hideLogTab = function() {
const hideLogTab = () => {
$("logTabColumn").addClass("invisible");
MochaUI.Desktop.resizePanels();
window.qBittorrent.Log && window.qBittorrent.Log.unload();
};
const addSearchPanel = function() {
const addSearchPanel = () => {
new MochaUI.Panel({
id: "SearchPanel",
title: "Search",
@ -1372,7 +1372,7 @@ window.addEventListener("DOMContentLoaded", () => {
});
};
const addRssPanel = function() {
const addRssPanel = () => {
new MochaUI.Panel({
id: "RssPanel",
title: "Rss",
@ -1394,7 +1394,7 @@ window.addEventListener("DOMContentLoaded", () => {
});
};
const addLogPanel = function() {
const addLogPanel = () => {
new MochaUI.Panel({
id: "LogPanel",
title: "Log",
@ -1415,7 +1415,7 @@ window.addEventListener("DOMContentLoaded", () => {
},
},
tabsURL: "views/logTabs.html",
tabsOnload: function() {
tabsOnload: () => {
MochaUI.initializeTabs("panelTabs");
$("logMessageLink").addEventListener("click", (e) => {
@ -1433,7 +1433,7 @@ window.addEventListener("DOMContentLoaded", () => {
});
};
const handleDownloadParam = function() {
const handleDownloadParam = () => {
// Extract torrent URL from download param in WebUI URL hash
const downloadHash = "#download=";
if (location.hash.indexOf(downloadHash) !== 0)
@ -1457,7 +1457,7 @@ window.addEventListener("DOMContentLoaded", () => {
},
loadMethod: "xhr",
contentURL: "views/transferlist.html",
onContentLoaded: function() {
onContentLoaded: () => {
handleDownloadParam();
updateMainData();
},
@ -1484,8 +1484,8 @@ window.addEventListener("DOMContentLoaded", () => {
contentURL: "views/properties.html",
require: {
js: ["scripts/prop-general.js", "scripts/prop-trackers.js", "scripts/prop-peers.js", "scripts/prop-webseeds.js", "scripts/prop-files.js"],
onload: function() {
updatePropertiesPanel = function() {
onload: () => {
updatePropertiesPanel = () => {
switch (LocalPreferences.get("selected_properties_tab")) {
case "propGeneralLink":
window.qBittorrent.PropGeneral.updateData();
@ -1507,7 +1507,7 @@ window.addEventListener("DOMContentLoaded", () => {
}
},
tabsURL: "views/propertiesToolbar.html",
tabsOnload: function() {}, // must be included, otherwise panel won't load properly
tabsOnload: () => {}, // must be included, otherwise panel won't load properly
onContentLoaded: function() {
this.panelHeaderCollapseBoxEl.classList.add("invisible");
@ -1703,7 +1703,7 @@ window.addEventListener("DOMContentLoaded", () => {
}).activate();
new ClipboardJS(".copyToClipboard", {
text: function(trigger) {
text: (trigger) => {
switch (trigger.id) {
case "copyName":
return copyNameFN();

View file

@ -642,7 +642,7 @@ window.qBittorrent.ContextMenu ??= (() => {
class SearchPluginsTableContextMenu extends ContextMenu {
updateMenuItems() {
const enabledColumnIndex = function(text) {
const enabledColumnIndex = (text) => {
const columns = $("searchPluginsTableFixedHeaderRow").getChildren("th");
for (let i = 0; i < columns.length; ++i) {
if (columns[i].textContent === "Enabled")

View file

@ -35,12 +35,12 @@ window.qBittorrent.Download ??= (() => {
let categories = {};
let defaultSavePath = "";
const getCategories = function() {
const getCategories = () => {
new Request.JSON({
url: "api/v2/torrents/categories",
method: "get",
noCache: true,
onSuccess: function(data) {
onSuccess: (data) => {
if (data) {
categories = data;
for (const i in data) {
@ -58,7 +58,7 @@ window.qBittorrent.Download ??= (() => {
}).send();
};
const getPreferences = function() {
const getPreferences = () => {
const pref = window.parent.qBittorrent.Cache.preferences.get();
defaultSavePath = pref.save_path;
@ -89,7 +89,7 @@ window.qBittorrent.Download ??= (() => {
$("contentLayout").selectedIndex = 0;
};
const changeCategorySelect = function(item) {
const changeCategorySelect = (item) => {
if (item.value === "\\other") {
item.nextElementSibling.hidden = false;
item.nextElementSibling.value = "";
@ -114,7 +114,7 @@ window.qBittorrent.Download ??= (() => {
}
};
const changeTMM = function(item) {
const changeTMM = (item) => {
if (item.selectedIndex === 1) {
$("savepath").disabled = true;

View file

@ -68,7 +68,7 @@ window.qBittorrent.DynamicTable ??= (() => {
const DynamicTable = new Class({
initialize: function() {},
initialize: () => {},
setup: function(dynamicTableDivId, dynamicTableFixedHeaderDivId, contextMenu) {
this.dynamicTableDivId = dynamicTableDivId;
@ -133,7 +133,7 @@ window.qBittorrent.DynamicTable ??= (() => {
this.currentHeaderAction = "";
this.canResize = false;
const resetElementBorderStyle = function(el, side) {
const resetElementBorderStyle = (el, side) => {
if ((side === "left") || (side !== "right"))
el.style.borderLeft = "";
if ((side === "right") || (side !== "left"))
@ -197,9 +197,9 @@ window.qBittorrent.DynamicTable ??= (() => {
this.lastClientX = e.clientX;
}.bind(this);
const mouseOutFn = function(e) {
const mouseOutFn = (e) => {
resetElementBorderStyle(e.target);
}.bind(this);
};
const onBeforeStart = function(el) {
this.clickedTh = el;
@ -392,7 +392,7 @@ window.qBittorrent.DynamicTable ??= (() => {
class: "contextMenu scrollableMenu"
});
const createLi = function(columnName, text) {
const createLi = (columnName, text) => {
const anchor = document.createElement("a");
anchor.href = `#${columnName}`;
anchor.textContent = text;
@ -436,7 +436,7 @@ window.qBittorrent.DynamicTable ??= (() => {
actions[this.columns[i].name] = onMenuItemClicked;
}
const createResizeElement = function(text, href) {
const createResizeElement = (text, href) => {
const anchor = document.createElement("a");
anchor.href = href;
anchor.textContent = text;
@ -471,7 +471,7 @@ window.qBittorrent.DynamicTable ??= (() => {
this.headerContextMenu.dynamicTable = this;
},
initColumns: function() {},
initColumns: () => {},
newColumn: function(name, style, caption, defaultWidth, defaultVisible) {
const column = {};
@ -623,7 +623,7 @@ window.qBittorrent.DynamicTable ??= (() => {
},
setSortedColumnIcon: function(newColumn, oldColumn, isReverse) {
const getCol = function(headerDivId, colName) {
const getCol = (headerDivId, colName) => {
const colElem = $$("#" + headerDivId + " .column_" + colName);
if (colElem.length === 1)
return colElem[0];
@ -730,7 +730,7 @@ window.qBittorrent.DynamicTable ??= (() => {
});
},
onSelectedRowChanged: function() {},
onSelectedRowChanged: () => {},
updateRowData: function(data) {
// ensure rowId is a string
@ -908,7 +908,7 @@ window.qBittorrent.DynamicTable ??= (() => {
trs.pop().destroy();
},
setupTr: function(tr) {},
setupTr: (tr) => {},
updateRow: function(tr, fullUpdate) {
const row = this.rows.get(tr.rowId);
@ -1200,7 +1200,7 @@ window.qBittorrent.DynamicTable ??= (() => {
td.title = status;
};
this.columns["status"].compareRows = function(row1, row2) {
this.columns["status"].compareRows = (row1, row2) => {
return compareNumbers(row1.full_data._statusOrder, row2.full_data._statusOrder);
};
@ -1470,7 +1470,7 @@ window.qBittorrent.DynamicTable ??= (() => {
};
},
applyFilter: function(row, filterName, categoryHash, tagHash, trackerHash, filterTerms) {
applyFilter: (row, filterName, categoryHash, tagHash, trackerHash, filterTerms) => {
const state = row["full_data"].state;
let inactive = false;
@ -1716,7 +1716,7 @@ window.qBittorrent.DynamicTable ??= (() => {
return this.getSelectedRowId();
},
onSelectedRowChanged: function() {
onSelectedRowChanged: () => {
updatePropertiesPanel();
}
});
@ -1875,7 +1875,7 @@ window.qBittorrent.DynamicTable ??= (() => {
},
getFilteredAndSortedRows: function() {
const getSizeFilters = function() {
const getSizeFilters = () => {
let minSize = (window.qBittorrent.Search.searchSizeFilter.min > 0.00) ? (window.qBittorrent.Search.searchSizeFilter.min * Math.pow(1024, window.qBittorrent.Search.searchSizeFilter.minUnit)) : 0.00;
let maxSize = (window.qBittorrent.Search.searchSizeFilter.max > 0.00) ? (window.qBittorrent.Search.searchSizeFilter.max * Math.pow(1024, window.qBittorrent.Search.searchSizeFilter.maxUnit)) : 0.00;
@ -1891,7 +1891,7 @@ window.qBittorrent.DynamicTable ??= (() => {
};
};
const getSeedsFilters = function() {
const getSeedsFilters = () => {
let minSeeds = (window.qBittorrent.Search.searchSeedsFilter.min > 0) ? window.qBittorrent.Search.searchSeedsFilter.min : 0;
let maxSeeds = (window.qBittorrent.Search.searchSeedsFilter.max > 0) ? window.qBittorrent.Search.searchSeedsFilter.max : 0;
@ -1949,7 +1949,7 @@ window.qBittorrent.DynamicTable ??= (() => {
return filteredRows;
},
setupTr: function(tr) {
setupTr: (tr) => {
tr.addClass("searchTableRow");
}
});
@ -1984,7 +1984,7 @@ window.qBittorrent.DynamicTable ??= (() => {
};
},
setupTr: function(tr) {
setupTr: (tr) => {
tr.addClass("searchPluginsTableRow");
}
});
@ -2174,17 +2174,17 @@ window.qBittorrent.DynamicTable ??= (() => {
this.toggleNodeTreeCheckbox(node.children[i].rowId, checkState);
},
updateGlobalCheckbox: function() {
updateGlobalCheckbox: () => {
const checkbox = $("rootMultiRename_cb");
const checkboxes = $$("input.RenamingCB");
const isAllChecked = function() {
const isAllChecked = () => {
for (let i = 0; i < checkboxes.length; ++i) {
if (!checkboxes[i].checked)
return false;
}
return true;
};
const isAllUnchecked = function() {
const isAllUnchecked = () => {
for (let i = 0; i < checkboxes.length; ++i) {
if (checkboxes[i].checked)
return false;
@ -2300,9 +2300,9 @@ window.qBittorrent.DynamicTable ??= (() => {
};
},
onRowSelectionChange: function(row) {},
onRowSelectionChange: (row) => {},
selectRow: function() {
selectRow: () => {
return;
},
@ -2618,7 +2618,7 @@ window.qBittorrent.DynamicTable ??= (() => {
td.replaceChildren(span);
}
};
this.columns["name"].calculateBuffer = function(rowId) {
this.columns["name"].calculateBuffer = (rowId) => {
const node = that.getNode(rowId);
// folders add 20px for folder icon and 15px for collapse icon
const folderBuffer = node.isFolder ? 35 : 0;
@ -2814,8 +2814,8 @@ window.qBittorrent.DynamicTable ??= (() => {
td.title = value;
};
},
setupHeaderMenu: function() {},
setupHeaderEvents: function() {},
setupHeaderMenu: () => {},
setupHeaderEvents: () => {},
getFilteredAndSortedRows: function() {
return [...this.getRowValues()];
},
@ -2944,8 +2944,8 @@ window.qBittorrent.DynamicTable ??= (() => {
initColumns: function() {
this.newColumn("name", "", "QBT_TR(Torrents: (double-click to download))QBT_TR[CONTEXT=RSSWidget]", -1, true);
},
setupHeaderMenu: function() {},
setupHeaderEvents: function() {},
setupHeaderMenu: () => {},
setupHeaderEvents: () => {},
getFilteredAndSortedRows: function() {
return [...this.getRowValues()];
},
@ -3056,8 +3056,8 @@ window.qBittorrent.DynamicTable ??= (() => {
};
this.columns["checked"].staticWidth = 50;
},
setupHeaderMenu: function() {},
setupHeaderEvents: function() {},
setupHeaderMenu: () => {},
setupHeaderEvents: () => {},
getFilteredAndSortedRows: function() {
return [...this.getRowValues()];
},
@ -3148,8 +3148,8 @@ window.qBittorrent.DynamicTable ??= (() => {
};
this.columns["checked"].staticWidth = 50;
},
setupHeaderMenu: function() {},
setupHeaderEvents: function() {},
setupHeaderMenu: () => {},
setupHeaderEvents: () => {},
getFilteredAndSortedRows: function() {
return [...this.getRowValues()];
},
@ -3189,7 +3189,7 @@ window.qBittorrent.DynamicTable ??= (() => {
this.hiddenTableHeader.appendChild(new Element("th"));
this.fixedTableHeader.appendChild(new Element("th"));
},
selectRow: function() {}
selectRow: () => {}
});
const RssDownloaderArticlesTable = new Class({
@ -3197,8 +3197,8 @@ window.qBittorrent.DynamicTable ??= (() => {
initColumns: function() {
this.newColumn("name", "", "", -1, true);
},
setupHeaderMenu: function() {},
setupHeaderEvents: function() {},
setupHeaderMenu: () => {},
setupHeaderEvents: () => {},
getFilteredAndSortedRows: function() {
return [...this.getRowValues()];
},
@ -3238,7 +3238,7 @@ window.qBittorrent.DynamicTable ??= (() => {
this.hiddenTableHeader.appendChild(new Element("th"));
this.fixedTableHeader.appendChild(new Element("th"));
},
selectRow: function() {},
selectRow: () => {},
updateRow: function(tr, fullUpdate) {
const row = this.rows.get(tr.rowId);
const data = row[fullUpdate ? "full_data" : "data"];
@ -3343,9 +3343,9 @@ window.qBittorrent.DynamicTable ??= (() => {
return filteredRows;
},
setupCommonEvents: function() {},
setupCommonEvents: () => {},
setupTr: function(tr) {
setupTr: (tr) => {
tr.addClass("logTableRow");
}
});

View file

@ -88,7 +88,7 @@ window.qBittorrent.FileTree ??= (() => {
: this.nodeMap[rowId];
},
getRowId: function(node) {
getRowId: (node) => {
return node.rowId;
},

View file

@ -46,21 +46,21 @@ window.qBittorrent.Filesystem ??= (() => {
/**
* Returns the file extension part of a file name.
*/
const fileExtension = function(filename) {
const fileExtension = (filename) => {
const pointIndex = filename.lastIndexOf(".");
if (pointIndex === -1)
return "";
return filename.substring(pointIndex + 1);
};
const fileName = function(filepath) {
const fileName = (filepath) => {
const slashIndex = filepath.lastIndexOf(PathSeparator);
if (slashIndex === -1)
return filepath;
return filepath.substring(slashIndex + 1);
};
const folderName = function(filepath) {
const folderName = (filepath) => {
const slashIndex = filepath.lastIndexOf(PathSeparator);
if (slashIndex === -1)
return "";

View file

@ -37,14 +37,14 @@ window.qBittorrent.LocalPreferences ??= (() => {
};
const LocalPreferencesClass = new Class({
get: function(key, defaultValue) {
get: (key, defaultValue) => {
const value = localStorage.getItem(key);
return ((value === null) && (defaultValue !== undefined))
? defaultValue
: value;
},
set: function(key, value) {
set: (key, value) => {
try {
localStorage.setItem(key, value);
}
@ -53,7 +53,7 @@ window.qBittorrent.LocalPreferences ??= (() => {
}
},
remove: function(key) {
remove: (key) => {
try {
localStorage.removeItem(key);
}

View file

@ -53,7 +53,7 @@ window.qBittorrent.Misc ??= (() => {
};
};
const genHash = function(string) {
const genHash = (string) => {
// origins:
// https://stackoverflow.com/a/8831937
// https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0
@ -64,7 +64,7 @@ window.qBittorrent.Misc ??= (() => {
};
// getHost emulate the GUI version `QString getHost(const QString &url)`
const getHost = function(url) {
const getHost = (url) => {
// We want the hostname.
// If failed to parse the domain, original input should be returned
@ -102,7 +102,7 @@ window.qBittorrent.Misc ??= (() => {
/*
* JS counterpart of the function in src/misc.cpp
*/
const friendlyUnit = function(value, isSpeed) {
const friendlyUnit = (value, isSpeed) => {
const units = [
"QBT_TR(B)QBT_TR[CONTEXT=misc]",
"QBT_TR(KiB)QBT_TR[CONTEXT=misc]",
@ -122,14 +122,14 @@ window.qBittorrent.Misc ??= (() => {
++i;
}
function friendlyUnitPrecision(sizeUnit) {
const friendlyUnitPrecision = (sizeUnit) => {
if (sizeUnit <= 2) // KiB, MiB
return 1;
else if (sizeUnit === 3) // GiB
return 2;
else // TiB, PiB, EiB
return 3;
}
};
let ret;
if (i === 0) {
@ -150,7 +150,7 @@ window.qBittorrent.Misc ??= (() => {
/*
* JS counterpart of the function in src/misc.cpp
*/
const friendlyDuration = function(seconds, maxCap = -1) {
const friendlyDuration = (seconds, maxCap = -1) => {
if ((seconds < 0) || ((seconds >= maxCap) && (maxCap >= 0)))
return "∞";
if (seconds === 0)
@ -173,7 +173,7 @@ window.qBittorrent.Misc ??= (() => {
return "QBT_TR(%1y %2d)QBT_TR[CONTEXT=misc]".replace("%1", Math.floor(years)).replace("%2", Math.floor(days));
};
const friendlyPercentage = function(value) {
const friendlyPercentage = (value) => {
let percentage = (value * 100).round(1);
if (isNaN(percentage) || (percentage < 0))
percentage = 0;
@ -182,19 +182,19 @@ window.qBittorrent.Misc ??= (() => {
return percentage.toFixed(1) + "%";
};
const friendlyFloat = function(value, precision) {
const friendlyFloat = (value, precision) => {
return parseFloat(value).toFixed(precision);
};
/*
* JS counterpart of the function in src/misc.cpp
*/
const parseHtmlLinks = function(text) {
const parseHtmlLinks = (text) => {
const exp = /(\b(https?|ftp|file):\/\/[-\w+&@#/%?=~|!:,.;]*[-\w+&@#/%=~|])/gi;
return text.replace(exp, "<a target='_blank' rel='noopener noreferrer' href='$1'>$1</a>");
};
const parseVersion = function(versionString) {
const parseVersion = (versionString) => {
const failure = {
valid: false
};
@ -228,7 +228,7 @@ window.qBittorrent.Misc ??= (() => {
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator/Collator#parameters
const naturalSortCollator = new Intl.Collator(undefined, { numeric: true, usage: "sort" });
const safeTrim = function(value) {
const safeTrim = (value) => {
try {
return value.trim();
}
@ -239,7 +239,7 @@ window.qBittorrent.Misc ??= (() => {
}
};
const toFixedPointString = function(number, digits) {
const toFixedPointString = (number, digits) => {
// Do not round up number
const power = Math.pow(10, digits);
return (Math.floor(power * number) / power).toFixed(digits);
@ -251,7 +251,7 @@ window.qBittorrent.Misc ??= (() => {
* @param {Array<String>} terms terms to search for within the text
* @returns {Boolean} true if all terms match the text, false otherwise
*/
const containsAllTerms = function(text, terms) {
const containsAllTerms = (text, terms) => {
const textToSearch = text.toLowerCase();
return terms.every((term) => {
const isTermRequired = (term[0] === "+");

View file

@ -87,7 +87,7 @@ window.qBittorrent.Dialog ??= (() => {
},
resizable: true,
width: 480,
onCloseComplete: function() {
onCloseComplete: () => {
// make sure overlay is properly hidden upon modal closing
document.getElementById("modalOverlay").style.display = "none";
}
@ -101,75 +101,75 @@ Object.freeze(window.qBittorrent.Dialog);
const LocalPreferences = new window.qBittorrent.LocalPreferences.LocalPreferencesClass();
let saveWindowSize = function() {};
let loadWindowWidth = function() {};
let loadWindowHeight = function() {};
let showDownloadPage = function() {};
let globalUploadLimitFN = function() {};
let uploadLimitFN = function() {};
let shareRatioFN = function() {};
let toggleSequentialDownloadFN = function() {};
let toggleFirstLastPiecePrioFN = function() {};
let setSuperSeedingFN = function() {};
let setForceStartFN = function() {};
let globalDownloadLimitFN = function() {};
let StatisticsLinkFN = function() {};
let downloadLimitFN = function() {};
let deleteSelectedTorrentsFN = function() {};
let stopFN = function() {};
let startFN = function() {};
let autoTorrentManagementFN = function() {};
let recheckFN = function() {};
let reannounceFN = function() {};
let setLocationFN = function() {};
let renameFN = function() {};
let renameFilesFN = function() {};
let startVisibleTorrentsFN = function() {};
let stopVisibleTorrentsFN = function() {};
let deleteVisibleTorrentsFN = function() {};
let torrentNewCategoryFN = function() {};
let torrentSetCategoryFN = function() {};
let createCategoryFN = function() {};
let createSubcategoryFN = function() {};
let editCategoryFN = function() {};
let removeCategoryFN = function() {};
let deleteUnusedCategoriesFN = function() {};
let torrentAddTagsFN = function() {};
let torrentSetTagsFN = function() {};
let torrentRemoveAllTagsFN = function() {};
let createTagFN = function() {};
let removeTagFN = function() {};
let deleteUnusedTagsFN = function() {};
let deleteTrackerFN = function() {};
let copyNameFN = function() {};
let copyInfohashFN = function(policy) {};
let copyMagnetLinkFN = function() {};
let copyIdFN = function() {};
let copyCommentFN = function() {};
let setQueuePositionFN = function() {};
let exportTorrentFN = function() {};
let saveWindowSize = () => {};
let loadWindowWidth = () => {};
let loadWindowHeight = () => {};
let showDownloadPage = () => {};
let globalUploadLimitFN = () => {};
let uploadLimitFN = () => {};
let shareRatioFN = () => {};
let toggleSequentialDownloadFN = () => {};
let toggleFirstLastPiecePrioFN = () => {};
let setSuperSeedingFN = () => {};
let setForceStartFN = () => {};
let globalDownloadLimitFN = () => {};
let StatisticsLinkFN = () => {};
let downloadLimitFN = () => {};
let deleteSelectedTorrentsFN = () => {};
let stopFN = () => {};
let startFN = () => {};
let autoTorrentManagementFN = () => {};
let recheckFN = () => {};
let reannounceFN = () => {};
let setLocationFN = () => {};
let renameFN = () => {};
let renameFilesFN = () => {};
let startVisibleTorrentsFN = () => {};
let stopVisibleTorrentsFN = () => {};
let deleteVisibleTorrentsFN = () => {};
let torrentNewCategoryFN = () => {};
let torrentSetCategoryFN = () => {};
let createCategoryFN = () => {};
let createSubcategoryFN = () => {};
let editCategoryFN = () => {};
let removeCategoryFN = () => {};
let deleteUnusedCategoriesFN = () => {};
let torrentAddTagsFN = () => {};
let torrentSetTagsFN = () => {};
let torrentRemoveAllTagsFN = () => {};
let createTagFN = () => {};
let removeTagFN = () => {};
let deleteUnusedTagsFN = () => {};
let deleteTrackerFN = () => {};
let copyNameFN = () => {};
let copyInfohashFN = (policy) => {};
let copyMagnetLinkFN = () => {};
let copyIdFN = () => {};
let copyCommentFN = () => {};
let setQueuePositionFN = () => {};
let exportTorrentFN = () => {};
const initializeWindows = function() {
saveWindowSize = function(windowId) {
const initializeWindows = () => {
saveWindowSize = (windowId) => {
const size = $(windowId).getSize();
LocalPreferences.set("window_" + windowId + "_width", size.x);
LocalPreferences.set("window_" + windowId + "_height", size.y);
};
loadWindowWidth = function(windowId, defaultValue) {
loadWindowWidth = (windowId, defaultValue) => {
return LocalPreferences.get("window_" + windowId + "_width", defaultValue);
};
loadWindowHeight = function(windowId, defaultValue) {
loadWindowHeight = (windowId, defaultValue) => {
return LocalPreferences.get("window_" + windowId + "_height", defaultValue);
};
function addClickEvent(el, fn) {
const addClickEvent = (el, fn) => {
["Link", "Button"].each((item) => {
if ($(el + item))
$(el + item).addEventListener("click", fn);
});
}
};
addClickEvent("download", (e) => {
e.preventDefault();
@ -177,7 +177,7 @@ const initializeWindows = function() {
showDownloadPage();
});
showDownloadPage = function(urls) {
showDownloadPage = (urls) => {
const id = "downloadPage";
const contentUri = new URI("download.html");
@ -248,7 +248,7 @@ const initializeWindows = function() {
paddingHorizontal: 0,
width: loadWindowWidth(id, 900),
height: loadWindowHeight(id, 400),
onResize: function() {
onResize: () => {
saveWindowSize(id);
}
});
@ -279,7 +279,7 @@ const initializeWindows = function() {
updateMainData();
});
globalUploadLimitFN = function() {
globalUploadLimitFN = () => {
new MochaUI.Window({
id: "uploadLimitPage",
icon: "images/qbittorrent-tray.svg",
@ -296,7 +296,7 @@ const initializeWindows = function() {
});
};
uploadLimitFN = function() {
uploadLimitFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
new MochaUI.Window({
@ -316,7 +316,7 @@ const initializeWindows = function() {
}
};
shareRatioFN = function() {
shareRatioFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
let shareRatio = null;
@ -357,7 +357,7 @@ const initializeWindows = function() {
}
};
toggleSequentialDownloadFN = function() {
toggleSequentialDownloadFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
new Request({
@ -371,7 +371,7 @@ const initializeWindows = function() {
}
};
toggleFirstLastPiecePrioFN = function() {
toggleFirstLastPiecePrioFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
new Request({
@ -385,7 +385,7 @@ const initializeWindows = function() {
}
};
setSuperSeedingFN = function(val) {
setSuperSeedingFN = (val) => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
new Request({
@ -400,7 +400,7 @@ const initializeWindows = function() {
}
};
setForceStartFN = function() {
setForceStartFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
new Request({
@ -415,7 +415,7 @@ const initializeWindows = function() {
}
};
globalDownloadLimitFN = function() {
globalDownloadLimitFN = () => {
new MochaUI.Window({
id: "downloadLimitPage",
icon: "images/qbittorrent-tray.svg",
@ -432,7 +432,7 @@ const initializeWindows = function() {
});
};
StatisticsLinkFN = function() {
StatisticsLinkFN = () => {
const id = "statisticspage";
new MochaUI.Window({
id: id,
@ -450,7 +450,7 @@ const initializeWindows = function() {
});
};
downloadLimitFN = function() {
downloadLimitFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
new MochaUI.Window({
@ -470,7 +470,7 @@ const initializeWindows = function() {
}
};
deleteSelectedTorrentsFN = function(forceDeleteFiles = false) {
deleteSelectedTorrentsFN = (forceDeleteFiles = false) => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length > 0) {
if (window.qBittorrent.Cache.preferences.get().confirm_torrent_deletion) {
@ -483,11 +483,11 @@ const initializeWindows = function() {
forceDeleteFiles: forceDeleteFiles
},
contentURL: "views/confirmdeletion.html",
onContentLoaded: function(w) {
onContentLoaded: (w) => {
MochaUI.resizeWindow(w, { centered: true });
MochaUI.centerWindow(w);
},
onCloseComplete: function() {
onCloseComplete: () => {
// make sure overlay is properly hidden upon modal closing
document.getElementById("modalOverlay").style.display = "none";
}
@ -501,12 +501,12 @@ const initializeWindows = function() {
hashes: hashes.join("|"),
deleteFiles: forceDeleteFiles
},
onSuccess: function() {
onSuccess: () => {
torrentsTable.deselectAll();
updateMainData();
updatePropertiesPanel();
},
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Unable to delete torrents.)QBT_TR[CONTEXT=HttpServer]");
}
}).send();
@ -520,7 +520,7 @@ const initializeWindows = function() {
deleteSelectedTorrentsFN();
});
stopFN = function() {
stopFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
new Request({
@ -534,7 +534,7 @@ const initializeWindows = function() {
}
};
startFN = function() {
startFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
new Request({
@ -548,7 +548,7 @@ const initializeWindows = function() {
}
};
autoTorrentManagementFN = function() {
autoTorrentManagementFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length > 0) {
const enableAutoTMM = hashes.some((hash) => !(torrentsTable.getRow(hash).full_data.auto_tmm));
@ -583,7 +583,7 @@ const initializeWindows = function() {
}
};
recheckFN = function() {
recheckFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length > 0) {
if (window.qBittorrent.Cache.preferences.get().confirm_torrent_recheck) {
@ -602,10 +602,10 @@ const initializeWindows = function() {
data: {
"hashes": hashes.join("|"),
},
onSuccess: function() {
onSuccess: () => {
updateMainData();
},
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Unable to recheck torrents.)QBT_TR[CONTEXT=HttpServer]");
}
}).send();
@ -613,7 +613,7 @@ const initializeWindows = function() {
}
};
reannounceFN = function() {
reannounceFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
new Request({
@ -627,7 +627,7 @@ const initializeWindows = function() {
}
};
setLocationFN = function() {
setLocationFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
const hash = hashes[0];
@ -650,7 +650,7 @@ const initializeWindows = function() {
}
};
renameFN = function() {
renameFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length === 1) {
const hash = hashes[0];
@ -674,7 +674,7 @@ const initializeWindows = function() {
}
};
renameFilesFN = function() {
renameFilesFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length === 1) {
const hash = hashes[0];
@ -700,7 +700,7 @@ const initializeWindows = function() {
}
};
startVisibleTorrentsFN = function() {
startVisibleTorrentsFN = () => {
const hashes = torrentsTable.getFilteredTorrentsHashes(selectedStatus, selectedCategory, selectedTag, selectedTracker);
if (hashes.length > 0) {
new Request({
@ -720,7 +720,7 @@ const initializeWindows = function() {
}
};
stopVisibleTorrentsFN = function() {
stopVisibleTorrentsFN = () => {
const hashes = torrentsTable.getFilteredTorrentsHashes(selectedStatus, selectedCategory, selectedTag, selectedTracker);
if (hashes.length > 0) {
new Request({
@ -740,7 +740,7 @@ const initializeWindows = function() {
}
};
deleteVisibleTorrentsFN = function() {
deleteVisibleTorrentsFN = () => {
const hashes = torrentsTable.getFilteredTorrentsHashes(selectedStatus, selectedCategory, selectedTag, selectedTracker);
if (hashes.length > 0) {
if (window.qBittorrent.Cache.preferences.get().confirm_torrent_deletion) {
@ -753,7 +753,7 @@ const initializeWindows = function() {
isDeletingVisibleTorrents: true
},
contentURL: "views/confirmdeletion.html",
onContentLoaded: function(w) {
onContentLoaded: (w) => {
MochaUI.resizeWindow(w, { centered: true });
MochaUI.centerWindow(w);
}
@ -780,7 +780,7 @@ const initializeWindows = function() {
}
};
torrentNewCategoryFN = function() {
torrentNewCategoryFN = () => {
const action = "set";
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
@ -801,7 +801,7 @@ const initializeWindows = function() {
}
};
torrentSetCategoryFN = function(categoryHash) {
torrentSetCategoryFN = (categoryHash) => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length <= 0)
return;
@ -816,13 +816,13 @@ const initializeWindows = function() {
hashes: hashes.join("|"),
category: categoryName
},
onSuccess: function() {
onSuccess: () => {
updateMainData();
}
}).send();
};
createCategoryFN = function() {
createCategoryFN = () => {
const action = "create";
new MochaUI.Window({
id: "newCategoryPage",
@ -840,7 +840,7 @@ const initializeWindows = function() {
});
};
createSubcategoryFN = function(categoryHash) {
createSubcategoryFN = (categoryHash) => {
const action = "createSubcategory";
const categoryName = category_list.get(categoryHash).name + "/";
new MochaUI.Window({
@ -859,7 +859,7 @@ const initializeWindows = function() {
});
};
editCategoryFN = function(categoryHash) {
editCategoryFN = (categoryHash) => {
const action = "edit";
const category = category_list.get(categoryHash);
new MochaUI.Window({
@ -878,7 +878,7 @@ const initializeWindows = function() {
});
};
removeCategoryFN = function(categoryHash) {
removeCategoryFN = (categoryHash) => {
const categoryName = category_list.get(categoryHash).name;
new Request({
url: "api/v2/torrents/removeCategories",
@ -886,14 +886,14 @@ const initializeWindows = function() {
data: {
categories: categoryName
},
onSuccess: function() {
onSuccess: () => {
setCategoryFilter(CATEGORIES_ALL);
updateMainData();
}
}).send();
};
deleteUnusedCategoriesFN = function() {
deleteUnusedCategoriesFN = () => {
const categories = [];
category_list.forEach((category, hash) => {
if (torrentsTable.getFilteredTorrentsNumber("all", hash, TAGS_ALL, TRACKERS_ALL) === 0)
@ -906,14 +906,14 @@ const initializeWindows = function() {
data: {
categories: categories.join("\n")
},
onSuccess: function() {
onSuccess: () => {
setCategoryFilter(CATEGORIES_ALL);
updateMainData();
}
}).send();
};
torrentAddTagsFN = function() {
torrentAddTagsFN = () => {
const action = "set";
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
@ -934,7 +934,7 @@ const initializeWindows = function() {
}
};
torrentSetTagsFN = function(tagHash, isSet) {
torrentSetTagsFN = (tagHash, isSet) => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length <= 0)
return;
@ -950,7 +950,7 @@ const initializeWindows = function() {
}).send();
};
torrentRemoveAllTagsFN = function() {
torrentRemoveAllTagsFN = () => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
new Request({
@ -963,7 +963,7 @@ const initializeWindows = function() {
}
};
createTagFN = function() {
createTagFN = () => {
const action = "create";
new MochaUI.Window({
id: "newTagPage",
@ -982,7 +982,7 @@ const initializeWindows = function() {
updateMainData();
};
removeTagFN = function(tagHash) {
removeTagFN = (tagHash) => {
const tagName = tagList.get(tagHash).name;
new Request({
url: "api/v2/torrents/deleteTags",
@ -994,7 +994,7 @@ const initializeWindows = function() {
setTagFilter(TAGS_ALL);
};
deleteUnusedTagsFN = function() {
deleteUnusedTagsFN = () => {
const tags = [];
tagList.forEach((tag, hash) => {
if (torrentsTable.getFilteredTorrentsNumber("all", CATEGORIES_ALL, hash, TRACKERS_ALL) === 0)
@ -1010,7 +1010,7 @@ const initializeWindows = function() {
setTagFilter(TAGS_ALL);
};
deleteTrackerFN = function(trackerHash) {
deleteTrackerFN = (trackerHash) => {
const trackerHashInt = Number.parseInt(trackerHash, 10);
if ((trackerHashInt === TRACKERS_ALL) || (trackerHashInt === TRACKERS_TRACKERLESS))
return;
@ -1030,14 +1030,14 @@ const initializeWindows = function() {
padding: 10,
width: 424,
height: 100,
onCloseComplete: function() {
onCloseComplete: () => {
updateMainData();
setTrackerFilter(TRACKERS_ALL);
}
});
};
copyNameFN = function() {
copyNameFN = () => {
const selectedRows = torrentsTable.selectedRowsIds();
const names = [];
if (selectedRows.length > 0) {
@ -1050,7 +1050,7 @@ const initializeWindows = function() {
return names.join("\n");
};
copyInfohashFN = function(policy) {
copyInfohashFN = (policy) => {
const selectedRows = torrentsTable.selectedRowsIds();
const infohashes = [];
if (selectedRows.length > 0) {
@ -1075,7 +1075,7 @@ const initializeWindows = function() {
return infohashes.join("\n");
};
copyMagnetLinkFN = function() {
copyMagnetLinkFN = () => {
const selectedRows = torrentsTable.selectedRowsIds();
const magnets = [];
if (selectedRows.length > 0) {
@ -1088,11 +1088,11 @@ const initializeWindows = function() {
return magnets.join("\n");
};
copyIdFN = function() {
copyIdFN = () => {
return torrentsTable.selectedRowsIds().join("\n");
};
copyCommentFN = function() {
copyCommentFN = () => {
const selectedRows = torrentsTable.selectedRowsIds();
const comments = [];
if (selectedRows.length > 0) {
@ -1107,7 +1107,7 @@ const initializeWindows = function() {
return comments.join("\n---------\n");
};
exportTorrentFN = async function() {
exportTorrentFN = async () => {
const hashes = torrentsTable.selectedRowsIds();
for (const hash of hashes) {
const row = torrentsTable.getRow(hash);
@ -1192,7 +1192,7 @@ const initializeWindows = function() {
});
});
setQueuePositionFN = function(cmd) {
setQueuePositionFN = (cmd) => {
const hashes = torrentsTable.selectedRowsIds();
if (hashes.length) {
new Request({
@ -1238,7 +1238,7 @@ const initializeWindows = function() {
new Request({
url: "api/v2/auth/logout",
method: "post",
onSuccess: function() {
onSuccess: () => {
window.location.reload(true);
}
}).send();
@ -1252,7 +1252,7 @@ const initializeWindows = function() {
new Request({
url: "api/v2/app/shutdown",
method: "post",
onSuccess: function() {
onSuccess: () => {
const shutdownMessage = "QBT_TR(%1 has been shutdown)QBT_TR[CONTEXT=HttpServer]".replace("%1", window.qBittorrent.Client.mainTitle());
document.write(`<!doctype html><html lang="${LANG}"><head> <meta charset="UTF-8"> <meta name="color-scheme" content="light dark"> <title>${shutdownMessage}</title> <style>* {font-family: Arial, Helvetica, sans-serif;}</style></head><body> <h1 style="text-align: center;">${shutdownMessage}</h1></body></html>`);
document.close();

View file

@ -40,7 +40,7 @@ window.qBittorrent.pathAutofill ??= (() => {
};
};
function showInputSuggestions(inputElement, names) {
const showInputSuggestions = (inputElement, names) => {
const datalist = document.createElement("datalist");
datalist.id = inputElement.id + "Suggestions";
for (const name of names) {
@ -57,9 +57,9 @@ window.qBittorrent.pathAutofill ??= (() => {
inputElement.appendChild(datalist);
inputElement.setAttribute("list", datalist.id);
}
}
};
function showPathSuggestions(element, mode) {
const showPathSuggestions = (element, mode) => {
const partialPath = element.value;
if (partialPath === "")
return;
@ -68,7 +68,7 @@ window.qBittorrent.pathAutofill ??= (() => {
.then(response => response.json())
.then(filesList => { showInputSuggestions(element, filesList); })
.catch(error => {});
}
};
function attachPathAutofill() {
const directoryInputs = document.querySelectorAll(".pathDirectory:not(.pathAutoFillInitialized)");

View file

@ -46,7 +46,7 @@ window.qBittorrent.PiecesBar ??= (() => {
let piecesBarUniqueId = 0;
const PiecesBar = new Class({
initialize(pieces, parameters) {
initialize: (pieces, parameters) => {
const vals = {
"id": "piecesbar_" + (piecesBarUniqueId++),
"width": 0,
@ -253,7 +253,7 @@ window.qBittorrent.PiecesBar ??= (() => {
}
}
function checkForParent(id) {
const checkForParent = (id) => {
const obj = $(id);
if (!obj)
return;
@ -261,7 +261,7 @@ window.qBittorrent.PiecesBar ??= (() => {
return setTimeout(() => { checkForParent(id); }, 100);
obj.refresh();
}
};
return exports();
})();

View file

@ -38,7 +38,7 @@ window.qBittorrent.ProgressBar ??= (() => {
let ProgressBars = 0;
const ProgressBar = new Class({
initialize: function(value, parameters) {
initialize: (value, parameters) => {
const vals = {
"id": "progressbar_" + (ProgressBars++),
"value": [value, 0].pick(),
@ -107,7 +107,7 @@ window.qBittorrent.ProgressBar ??= (() => {
if (vals.width)
obj.setValue(vals.value);
else
setTimeout('ProgressBar_checkForParent("' + obj.id + '")');
setTimeout(ProgressBar_checkForParent, 0, obj.id);
return obj;
}
});
@ -142,19 +142,19 @@ window.qBittorrent.ProgressBar ??= (() => {
}
}
function ProgressBar_checkForParent(id) {
const ProgressBar_checkForParent = (id) => {
const obj = $(id);
if (!obj)
return;
if (!obj.parentNode)
return setTimeout('ProgressBar_checkForParent("' + id + '")', 100);
return setTimeout(ProgressBar_checkForParent, 100, id);
obj.style.width = "100%";
const w = obj.offsetWidth;
obj.vals.dark.style.width = `${w}px`;
obj.vals.light.style.width = `${w}px`;
obj.vals.width = w;
obj.setValue(obj.vals.value);
}
};
return exports();
})();

View file

@ -53,7 +53,7 @@ window.qBittorrent.PropFiles ??= (() => {
let is_seed = true;
let current_hash = "";
const normalizePriority = function(priority) {
const normalizePriority = (priority) => {
switch (priority) {
case FilePriority.Ignored:
case FilePriority.Normal:
@ -66,7 +66,7 @@ window.qBittorrent.PropFiles ??= (() => {
}
};
const getAllChildren = function(id, fileId) {
const getAllChildren = (id, fileId) => {
const node = torrentFilesTable.getNode(id);
if (!node.isFolder) {
return {
@ -78,7 +78,7 @@ window.qBittorrent.PropFiles ??= (() => {
const rowIds = [];
const fileIds = [];
const getChildFiles = function(node) {
const getChildFiles = (node) => {
if (node.isFolder) {
node.children.each((child) => {
getChildFiles(child);
@ -100,7 +100,7 @@ window.qBittorrent.PropFiles ??= (() => {
};
};
const fileCheckboxClicked = function(e) {
const fileCheckboxClicked = (e) => {
e.stopPropagation();
const checkbox = e.target;
@ -114,7 +114,7 @@ window.qBittorrent.PropFiles ??= (() => {
updateGlobalCheckbox();
};
const fileComboboxChanged = function(e) {
const fileComboboxChanged = (e) => {
const combobox = e.target;
const priority = combobox.value;
const id = combobox.getAttribute("data-id");
@ -126,11 +126,11 @@ window.qBittorrent.PropFiles ??= (() => {
updateGlobalCheckbox();
};
const isDownloadCheckboxExists = function(id) {
return ($("cbPrio" + id) !== null);
const isDownloadCheckboxExists = (id) => {
return $("cbPrio" + id) !== null;
};
const createDownloadCheckbox = function(id, fileId, checked) {
const createDownloadCheckbox = (id, fileId, checked) => {
const checkbox = new Element("input");
checkbox.type = "checkbox";
checkbox.id = "cbPrio" + id;
@ -143,12 +143,12 @@ window.qBittorrent.PropFiles ??= (() => {
return checkbox;
};
const updateDownloadCheckbox = function(id, checked) {
const updateDownloadCheckbox = (id, checked) => {
const checkbox = $("cbPrio" + id);
updateCheckbox(checkbox, checked);
};
const updateCheckbox = function(checkbox, checked) {
const updateCheckbox = (checkbox, checked) => {
switch (checked) {
case TriState.Checked:
setCheckboxChecked(checkbox);
@ -162,8 +162,8 @@ window.qBittorrent.PropFiles ??= (() => {
}
};
const isPriorityComboExists = function(id) {
return ($("comboPrio" + id) !== null);
const isPriorityComboExists = (id) => {
return $("comboPrio" + id) !== null;
};
const createPriorityCombo = (id, fileId, selectedPriority) => {
@ -195,13 +195,13 @@ window.qBittorrent.PropFiles ??= (() => {
return select;
};
const updatePriorityCombo = function(id, selectedPriority) {
const updatePriorityCombo = (id, selectedPriority) => {
const combobox = $("comboPrio" + id);
if (parseInt(combobox.value, 10) !== selectedPriority)
selectComboboxPriority(combobox, selectedPriority);
};
const selectComboboxPriority = function(combobox, priority) {
const selectComboboxPriority = (combobox, priority) => {
const options = combobox.options;
for (let i = 0; i < options.length; ++i) {
const option = options[i];
@ -214,7 +214,7 @@ window.qBittorrent.PropFiles ??= (() => {
combobox.value = priority;
};
const switchCheckboxState = function(e) {
const switchCheckboxState = (e) => {
e.stopPropagation();
const rowIds = [];
@ -256,7 +256,7 @@ window.qBittorrent.PropFiles ??= (() => {
setFilePriority(rowIds, fileIds, priority);
};
const updateGlobalCheckbox = function() {
const updateGlobalCheckbox = () => {
const checkbox = $("tristate_cb");
if (isAllCheckboxesChecked())
setCheckboxChecked(checkbox);
@ -266,24 +266,24 @@ window.qBittorrent.PropFiles ??= (() => {
setCheckboxPartial(checkbox);
};
const setCheckboxChecked = function(checkbox) {
const setCheckboxChecked = (checkbox) => {
checkbox.state = "checked";
checkbox.indeterminate = false;
checkbox.checked = true;
};
const setCheckboxUnchecked = function(checkbox) {
const setCheckboxUnchecked = (checkbox) => {
checkbox.state = "unchecked";
checkbox.indeterminate = false;
checkbox.checked = false;
};
const setCheckboxPartial = function(checkbox) {
const setCheckboxPartial = (checkbox) => {
checkbox.state = "partial";
checkbox.indeterminate = true;
};
const isAllCheckboxesChecked = function() {
const isAllCheckboxesChecked = () => {
const checkboxes = $$("input.DownloadedCB");
for (let i = 0; i < checkboxes.length; ++i) {
if (!checkboxes[i].checked)
@ -292,7 +292,7 @@ window.qBittorrent.PropFiles ??= (() => {
return true;
};
const isAllCheckboxesUnchecked = function() {
const isAllCheckboxesUnchecked = () => {
const checkboxes = $$("input.DownloadedCB");
for (let i = 0; i < checkboxes.length; ++i) {
if (checkboxes[i].checked)
@ -301,7 +301,7 @@ window.qBittorrent.PropFiles ??= (() => {
return true;
};
const setFilePriority = function(ids, fileIds, priority) {
const setFilePriority = (ids, fileIds, priority) => {
if (current_hash === "")
return;
@ -316,7 +316,7 @@ window.qBittorrent.PropFiles ??= (() => {
"id": fileIds.join("|"),
"priority": priority
},
onComplete: function() {
onComplete: () => {
loadTorrentFilesDataTimer = loadTorrentFilesData.delay(1000);
}
}).send();
@ -334,7 +334,7 @@ window.qBittorrent.PropFiles ??= (() => {
};
let loadTorrentFilesDataTimer = -1;
const loadTorrentFilesData = function() {
const loadTorrentFilesData = () => {
if ($("propFiles").hasClass("invisible")
|| $("propertiesPanel_collapseToggle").hasClass("panel-expand")) {
// Tab changed, don't do anything
@ -357,11 +357,11 @@ window.qBittorrent.PropFiles ??= (() => {
url: url,
method: "get",
noCache: true,
onComplete: function() {
onComplete: () => {
clearTimeout(loadTorrentFilesDataTimer);
loadTorrentFilesDataTimer = loadTorrentFilesData.delay(5000);
},
onSuccess: function(files) {
onSuccess: (files) => {
clearTimeout(torrentFilesFilterInputTimer);
torrentFilesFilterInputTimer = -1;
@ -377,13 +377,13 @@ window.qBittorrent.PropFiles ??= (() => {
}).send();
};
const updateData = function() {
const updateData = () => {
clearTimeout(loadTorrentFilesDataTimer);
loadTorrentFilesDataTimer = -1;
loadTorrentFilesData();
};
const handleNewTorrentFiles = function(files) {
const handleNewTorrentFiles = (files) => {
is_seed = (files.length > 0) ? files[0].is_seed : true;
const rows = files.map((file, index) => {
@ -413,7 +413,7 @@ window.qBittorrent.PropFiles ??= (() => {
updateGlobalCheckbox();
};
const addRowsToTable = function(rows) {
const addRowsToTable = (rows) => {
const selectedFiles = torrentFilesTable.selectedRowsIds();
let rowId = 0;
@ -481,7 +481,7 @@ window.qBittorrent.PropFiles ??= (() => {
torrentFilesTable.reselectRows(selectedFiles);
};
const collapseIconClicked = function(event) {
const collapseIconClicked = (event) => {
const id = event.getAttribute("data-id");
const node = torrentFilesTable.getNode(id);
const isCollapsed = (event.parentElement.getAttribute("data-collapsed") === "true");
@ -492,19 +492,19 @@ window.qBittorrent.PropFiles ??= (() => {
collapseNode(node);
};
const expandFolder = function(id) {
const expandFolder = (id) => {
const node = torrentFilesTable.getNode(id);
if (node.isFolder)
expandNode(node);
};
const collapseFolder = function(id) {
const collapseFolder = (id) => {
const node = torrentFilesTable.getNode(id);
if (node.isFolder)
collapseNode(node);
};
const filesPriorityMenuClicked = function(priority) {
const filesPriorityMenuClicked = (priority) => {
const selectedRows = torrentFilesTable.selectedRowsIds();
if (selectedRows.length === 0)
return;
@ -532,7 +532,7 @@ window.qBittorrent.PropFiles ??= (() => {
setFilePriority(Object.keys(uniqueRowIds), Object.keys(uniqueFileIds), priority);
};
const singleFileRename = function(hash) {
const singleFileRename = (hash) => {
const rowId = torrentFilesTable.selectedRowsIds()[0];
if (rowId === undefined)
return;
@ -560,7 +560,7 @@ window.qBittorrent.PropFiles ??= (() => {
});
};
const multiFileRename = function(hash) {
const multiFileRename = (hash) => {
new MochaUI.Window({
id: "multiRenamePage",
icon: "images/qbittorrent-tray.svg",
@ -583,7 +583,7 @@ window.qBittorrent.PropFiles ??= (() => {
targets: "#torrentFilesTableDiv tr",
menu: "torrentFilesMenu",
actions: {
Rename: function(element, ref) {
Rename: (element, ref) => {
const hash = torrentsTable.getCurrentTorrentID();
if (!hash)
return;
@ -594,16 +594,16 @@ window.qBittorrent.PropFiles ??= (() => {
singleFileRename(hash);
},
FilePrioIgnore: function(element, ref) {
FilePrioIgnore: (element, ref) => {
filesPriorityMenuClicked(FilePriority.Ignored);
},
FilePrioNormal: function(element, ref) {
FilePrioNormal: (element, ref) => {
filesPriorityMenuClicked(FilePriority.Normal);
},
FilePrioHigh: function(element, ref) {
FilePrioHigh: (element, ref) => {
filesPriorityMenuClicked(FilePriority.High);
},
FilePrioMaximum: function(element, ref) {
FilePrioMaximum: (element, ref) => {
filesPriorityMenuClicked(FilePriority.Maximum);
}
},
@ -662,7 +662,7 @@ window.qBittorrent.PropFiles ??= (() => {
/**
* Show/hide a node's row
*/
const _hideNode = function(node, shouldHide) {
const _hideNode = (node, shouldHide) => {
const span = $("filesTablefileName" + node.rowId);
// span won't exist if row has been filtered out
if (span === null)
@ -677,7 +677,7 @@ window.qBittorrent.PropFiles ??= (() => {
/**
* Update a node's collapsed state and icon
*/
const _updateNodeState = function(node, isCollapsed) {
const _updateNodeState = (node, isCollapsed) => {
const span = $("filesTablefileName" + node.rowId);
// span won't exist if row has been filtered out
if (span === null)
@ -695,7 +695,7 @@ window.qBittorrent.PropFiles ??= (() => {
collapseIcon.removeClass("rotate");
};
const _isCollapsed = function(node) {
const _isCollapsed = (node) => {
const span = $("filesTablefileName" + node.rowId);
if (span === null)
return true;
@ -704,15 +704,15 @@ window.qBittorrent.PropFiles ??= (() => {
return td.getAttribute("data-collapsed") === "true";
};
const expandNode = function(node) {
const expandNode = (node) => {
_collapseNode(node, false, false, false);
};
const collapseNode = function(node) {
const collapseNode = (node) => {
_collapseNode(node, true, false, false);
};
const expandAllNodes = function() {
const expandAllNodes = () => {
const root = torrentFilesTable.getRoot();
root.children.each((node) => {
node.children.each((child) => {
@ -721,7 +721,7 @@ window.qBittorrent.PropFiles ??= (() => {
});
};
const collapseAllNodes = function() {
const collapseAllNodes = () => {
const root = torrentFilesTable.getRoot();
root.children.each((node) => {
node.children.each((child) => {
@ -737,7 +737,7 @@ window.qBittorrent.PropFiles ??= (() => {
* @param {boolean} applyToChildren true if the node's children should also be collapsed, recursively
* @param {boolean} isChildNode true if the current node is a child of the original node we collapsed/expanded
*/
const _collapseNode = function(node, shouldCollapse, applyToChildren, isChildNode) {
const _collapseNode = (node, shouldCollapse, applyToChildren, isChildNode) => {
if (!node.isFolder)
return;
@ -764,7 +764,7 @@ window.qBittorrent.PropFiles ??= (() => {
});
};
const clear = function() {
const clear = () => {
torrentFilesTable.clear();
};

View file

@ -42,7 +42,7 @@ window.qBittorrent.PropGeneral ??= (() => {
});
$("progress").appendChild(piecesBar);
const clearData = function() {
const clearData = () => {
$("time_elapsed").textContent = "";
$("eta").textContent = "";
$("nb_connections").textContent = "";
@ -74,7 +74,7 @@ window.qBittorrent.PropGeneral ??= (() => {
};
let loadTorrentDataTimer = -1;
const loadTorrentData = function() {
const loadTorrentData = () => {
if ($("propGeneral").hasClass("invisible")
|| $("propertiesPanel_collapseToggle").hasClass("panel-expand")) {
// Tab changed, don't do anything
@ -91,12 +91,12 @@ window.qBittorrent.PropGeneral ??= (() => {
url: url,
method: "get",
noCache: true,
onFailure: function() {
onFailure: () => {
$("error_div").textContent = "QBT_TR(qBittorrent client is not reachable)QBT_TR[CONTEXT=HttpServer]";
clearTimeout(loadTorrentDataTimer);
loadTorrentDataTimer = loadTorrentData.delay(10000);
},
onSuccess: function(data) {
onSuccess: (data) => {
$("error_div").textContent = "";
if (data) {
// Update Torrent data
@ -229,12 +229,12 @@ window.qBittorrent.PropGeneral ??= (() => {
url: piecesUrl,
method: "get",
noCache: true,
onFailure: function() {
onFailure: () => {
$("error_div").textContent = "QBT_TR(qBittorrent client is not reachable)QBT_TR[CONTEXT=HttpServer]";
clearTimeout(loadTorrentDataTimer);
loadTorrentDataTimer = loadTorrentData.delay(10000);
},
onSuccess: function(data) {
onSuccess: (data) => {
$("error_div").textContent = "";
if (data)
@ -248,13 +248,13 @@ window.qBittorrent.PropGeneral ??= (() => {
}).send();
};
const updateData = function() {
const updateData = () => {
clearTimeout(loadTorrentDataTimer);
loadTorrentDataTimer = -1;
loadTorrentData();
};
const clear = function() {
const clear = () => {
clearData();
};

View file

@ -42,7 +42,7 @@ window.qBittorrent.PropPeers ??= (() => {
let syncTorrentPeersLastResponseId = 0;
let show_flags = true;
const loadTorrentPeersData = function() {
const loadTorrentPeersData = () => {
if ($("propPeers").hasClass("invisible")
|| $("propertiesPanel_collapseToggle").hasClass("panel-expand")) {
syncTorrentPeersLastResponseId = 0;
@ -63,11 +63,11 @@ window.qBittorrent.PropPeers ??= (() => {
url: url,
method: "get",
noCache: true,
onComplete: function() {
onComplete: () => {
clearTimeout(loadTorrentPeersTimer);
loadTorrentPeersTimer = loadTorrentPeersData.delay(window.qBittorrent.Client.getSyncMainDataInterval());
},
onSuccess: function(response) {
onSuccess: (response) => {
$("error_div").textContent = "";
if (response) {
const full_update = (response["full_update"] === true);
@ -106,13 +106,13 @@ window.qBittorrent.PropPeers ??= (() => {
}).send();
};
const updateData = function() {
const updateData = () => {
clearTimeout(loadTorrentPeersTimer);
loadTorrentPeersTimer = -1;
loadTorrentPeersData();
};
const clear = function() {
const clear = () => {
torrentPeersTable.clear();
};
@ -120,7 +120,7 @@ window.qBittorrent.PropPeers ??= (() => {
targets: "#torrentPeersTableDiv",
menu: "torrentPeersMenu",
actions: {
addPeer: function(element, ref) {
addPeer: (element, ref) => {
const hash = torrentsTable.getCurrentTorrentID();
if (!hash)
return;
@ -140,7 +140,7 @@ window.qBittorrent.PropPeers ??= (() => {
height: 260
});
},
banPeer: function(element, ref) {
banPeer: (element, ref) => {
const selectedPeers = torrentPeersTable.selectedRowsIds();
if (selectedPeers.length === 0)
return;
@ -176,7 +176,7 @@ window.qBittorrent.PropPeers ??= (() => {
});
new ClipboardJS("#CopyPeerInfo", {
text: function(trigger) {
text: (trigger) => {
return torrentPeersTable.selectedRowsIds().join("\n");
}
});

View file

@ -42,7 +42,7 @@ window.qBittorrent.PropTrackers ??= (() => {
const torrentTrackersTable = new window.qBittorrent.DynamicTable.TorrentTrackersTable();
let loadTrackersDataTimer = -1;
const loadTrackersData = function() {
const loadTrackersData = () => {
if ($("propTrackers").hasClass("invisible")
|| $("propertiesPanel_collapseToggle").hasClass("panel-expand")) {
// Tab changed, don't do anything
@ -63,11 +63,11 @@ window.qBittorrent.PropTrackers ??= (() => {
url: url,
method: "get",
noCache: true,
onComplete: function() {
onComplete: () => {
clearTimeout(loadTrackersDataTimer);
loadTrackersDataTimer = loadTrackersData.delay(10000);
},
onSuccess: function(trackers) {
onSuccess: (trackers) => {
const selectedTrackers = torrentTrackersTable.selectedRowsIds();
torrentTrackersTable.clear();
@ -117,7 +117,7 @@ window.qBittorrent.PropTrackers ??= (() => {
}).send();
};
const updateData = function() {
const updateData = () => {
clearTimeout(loadTrackersDataTimer);
loadTrackersDataTimer = -1;
loadTrackersData();
@ -127,15 +127,15 @@ window.qBittorrent.PropTrackers ??= (() => {
targets: "#torrentTrackersTableDiv",
menu: "torrentTrackersMenu",
actions: {
AddTracker: function(element, ref) {
AddTracker: (element, ref) => {
addTrackerFN();
},
EditTracker: function(element, ref) {
EditTracker: (element, ref) => {
// only allow editing of one row
element.firstChild.click();
editTrackerFN(element);
},
RemoveTracker: function(element, ref) {
RemoveTracker: (element, ref) => {
removeTrackerFN(element);
}
},
@ -162,7 +162,7 @@ window.qBittorrent.PropTrackers ??= (() => {
}
});
const addTrackerFN = function() {
const addTrackerFN = () => {
if (current_hash.length === 0)
return;
new MochaUI.Window({
@ -179,13 +179,13 @@ window.qBittorrent.PropTrackers ??= (() => {
paddingHorizontal: 0,
width: 500,
height: 260,
onCloseComplete: function() {
onCloseComplete: () => {
updateData();
}
});
};
const editTrackerFN = function(element) {
const editTrackerFN = (element) => {
if (current_hash.length === 0)
return;
@ -204,13 +204,13 @@ window.qBittorrent.PropTrackers ??= (() => {
paddingHorizontal: 0,
width: 500,
height: 150,
onCloseComplete: function() {
onCloseComplete: () => {
updateData();
}
});
};
const removeTrackerFN = function(element) {
const removeTrackerFN = (element) => {
if (current_hash.length === 0)
return;
@ -222,18 +222,18 @@ window.qBittorrent.PropTrackers ??= (() => {
hash: current_hash,
urls: selectedTrackers.map(encodeURIComponent).join("|")
},
onSuccess: function() {
onSuccess: () => {
updateData();
}
}).send();
};
const clear = function() {
const clear = () => {
torrentTrackersTable.clear();
};
new ClipboardJS("#CopyTrackerUrl", {
text: function(trigger) {
text: (trigger) => {
return torrentTrackersTable.selectedRowsIds().join("\n");
}
});

View file

@ -42,7 +42,7 @@ window.qBittorrent.PropWebseeds ??= (() => {
let current_hash = "";
let loadWebSeedsDataTimer = -1;
const loadWebSeedsData = function() {
const loadWebSeedsData = () => {
if ($("propWebSeeds").hasClass("invisible")
|| $("propertiesPanel_collapseToggle").hasClass("panel-expand")) {
// Tab changed, don't do anything
@ -62,11 +62,11 @@ window.qBittorrent.PropWebseeds ??= (() => {
url: new URI("api/v2/torrents/webseeds").setData("hash", current_hash),
method: "get",
noCache: true,
onComplete: function() {
onComplete: () => {
clearTimeout(loadWebSeedsDataTimer);
loadWebSeedsDataTimer = loadWebSeedsData.delay(10000);
},
onSuccess: function(webseeds) {
onSuccess: (webseeds) => {
const selectedWebseeds = torrentWebseedsTable.selectedRowsIds();
torrentWebseedsTable.clear();
@ -88,7 +88,7 @@ window.qBittorrent.PropWebseeds ??= (() => {
}).send();
};
const updateData = function() {
const updateData = () => {
clearTimeout(loadWebSeedsDataTimer);
loadWebSeedsDataTimer = -1;
loadWebSeedsData();
@ -98,15 +98,15 @@ window.qBittorrent.PropWebseeds ??= (() => {
targets: "#torrentWebseedsTableDiv",
menu: "torrentWebseedsMenu",
actions: {
AddWebSeeds: function(element, ref) {
AddWebSeeds: (element, ref) => {
addWebseedFN();
},
EditWebSeed: function(element, ref) {
EditWebSeed: (element, ref) => {
// only allow editing of one row
element.firstChild.click();
editWebSeedFN(element);
},
RemoveWebSeed: function(element, ref) {
RemoveWebSeed: (element, ref) => {
removeWebSeedFN(element);
}
},
@ -134,7 +134,7 @@ window.qBittorrent.PropWebseeds ??= (() => {
}
});
const addWebseedFN = function() {
const addWebseedFN = () => {
if (current_hash.length === 0)
return;
@ -151,13 +151,13 @@ window.qBittorrent.PropWebseeds ??= (() => {
paddingHorizontal: 0,
width: 500,
height: 260,
onCloseComplete: function() {
onCloseComplete: () => {
updateData();
}
});
};
const editWebSeedFN = function(element) {
const editWebSeedFN = (element) => {
if (current_hash.length === 0)
return;
@ -180,13 +180,13 @@ window.qBittorrent.PropWebseeds ??= (() => {
paddingHorizontal: 0,
width: 500,
height: 150,
onCloseComplete: function() {
onCloseComplete: () => {
updateData();
}
});
};
const removeWebSeedFN = function(element) {
const removeWebSeedFN = (element) => {
if (current_hash.length === 0)
return;
@ -198,18 +198,18 @@ window.qBittorrent.PropWebseeds ??= (() => {
hash: current_hash,
urls: selectedWebseeds.map(webseed => encodeURIComponent(webseed)).join("|")
},
onSuccess: function() {
onSuccess: () => {
updateData();
}
}).send();
};
const clear = function() {
const clear = () => {
torrentWebseedsTable.clear();
};
new ClipboardJS("#CopyWebseedUrl", {
text: function(trigger) {
text: (trigger) => {
return torrentWebseedsTable.selectedRowsIds().join("\n");
}
});

View file

@ -44,10 +44,10 @@ window.qBittorrent.MultiRename ??= (() => {
replaceAll: false,
fileEnumerationStart: 0,
onChanged: function(rows) {},
onInvalidRegex: function(err) {},
onRenamed: function(rows) {},
onRenameError: function(err) {},
onChanged: (rows) => {},
onInvalidRegex: (err) => {},
onRenamed: (rows) => {},
onRenameError: (err) => {},
_inner_update: function() {
const findMatches = (regex, str) => {

View file

@ -105,7 +105,7 @@ window.qBittorrent.Search ??= (() => {
}
});
const init = function() {
const init = () => {
// load "Search in" preference from local storage
$("searchInTorrentName").value = (LocalPreferences.get("search_in_filter") === "names") ? "names" : "everywhere";
const searchResultsTableContextMenu = new window.qBittorrent.ContextMenu.ContextMenu({
@ -166,15 +166,15 @@ window.qBittorrent.Search ??= (() => {
createSearchTab(id, pattern);
};
const numSearchTabs = function() {
const numSearchTabs = () => {
return $("searchTabs").getElements("li").length;
};
const getSearchIdFromTab = function(tab) {
const getSearchIdFromTab = (tab) => {
return Number(tab.id.substring(searchTabIdPrefix.length));
};
const createSearchTab = function(searchId, pattern) {
const createSearchTab = (searchId, pattern) => {
const newTabId = `${searchTabIdPrefix}${searchId}`;
const tabElem = new Element("a", {
text: pattern,
@ -233,7 +233,7 @@ window.qBittorrent.Search ??= (() => {
updateSearchResultsData(searchId);
};
const closeSearchTab = function(el) {
const closeSearchTab = (el) => {
const tab = el.closest("li.searchTab");
if (!tab)
return;
@ -282,7 +282,7 @@ window.qBittorrent.Search ??= (() => {
}
};
const saveCurrentTabState = function() {
const saveCurrentTabState = () => {
const currentSearchId = getSelectedSearchId();
if (!currentSearchId)
return;
@ -313,7 +313,7 @@ window.qBittorrent.Search ??= (() => {
state.selectedRowIds = [...searchResultsTable.selectedRows];
};
const setActiveTab = function(tab) {
const setActiveTab = (tab) => {
const searchId = getSearchIdFromTab(tab);
if (searchId === getSelectedSearchId())
return;
@ -377,7 +377,7 @@ window.qBittorrent.Search ??= (() => {
setupSearchTableEvents(true);
};
const getStatusIconElement = function(text, image) {
const getStatusIconElement = (text, image) => {
return new Element("img", {
alt: text,
title: text,
@ -388,7 +388,7 @@ window.qBittorrent.Search ??= (() => {
});
};
const updateStatusIconElement = function(searchId, text, image) {
const updateStatusIconElement = (searchId, text, image) => {
const searchTab = $(`${searchTabIdPrefix}${searchId}`);
if (searchTab) {
const statusIcon = searchTab.getElement(".statusIcon");
@ -398,7 +398,7 @@ window.qBittorrent.Search ??= (() => {
}
};
const startSearch = function(pattern, category, plugins) {
const startSearch = (pattern, category, plugins) => {
searchPatternChanged = false;
const url = new URI("api/v2/search/start");
@ -422,7 +422,7 @@ window.qBittorrent.Search ??= (() => {
}).send();
};
const stopSearch = function(searchId) {
const stopSearch = (searchId) => {
const url = new URI("api/v2/search/stop");
new Request({
url: url,
@ -430,7 +430,7 @@ window.qBittorrent.Search ??= (() => {
data: {
id: searchId
},
onSuccess: function(response) {
onSuccess: (response) => {
resetSearchState(searchId);
// not strictly necessary to do this when the tab is being closed, but there's no harm in it
updateStatusIconElement(searchId, "QBT_TR(Search aborted)QBT_TR[CONTEXT=SearchJobWidget]", "images/task-reject.svg");
@ -438,12 +438,12 @@ window.qBittorrent.Search ??= (() => {
}).send();
};
const getSelectedSearchId = function() {
const getSelectedSearchId = () => {
const selectedTab = $("searchTabs").getElement("li.selected");
return selectedTab ? getSearchIdFromTab(selectedTab) : null;
};
const startStopSearch = function() {
const startStopSearch = () => {
const currentSearchId = getSelectedSearchId();
const state = searchState.get(currentSearchId);
const isSearchRunning = state && state.running;
@ -463,12 +463,12 @@ window.qBittorrent.Search ??= (() => {
}
};
const openSearchTorrentDescriptionUrl = function() {
const openSearchTorrentDescriptionUrl = () => {
for (const rowID of searchResultsTable.selectedRowsIds())
window.open(searchResultsTable.getRow(rowID).full_data.descrLink, "_blank");
};
const copySearchTorrentName = function() {
const copySearchTorrentName = () => {
const names = [];
searchResultsTable.selectedRowsIds().each((rowId) => {
names.push(searchResultsTable.getRow(rowId).full_data.fileName);
@ -476,7 +476,7 @@ window.qBittorrent.Search ??= (() => {
return names.join("\n");
};
const copySearchTorrentDownloadLink = function() {
const copySearchTorrentDownloadLink = () => {
const urls = [];
searchResultsTable.selectedRowsIds().each((rowId) => {
urls.push(searchResultsTable.getRow(rowId).full_data.fileUrl);
@ -484,7 +484,7 @@ window.qBittorrent.Search ??= (() => {
return urls.join("\n");
};
const copySearchTorrentDescriptionUrl = function() {
const copySearchTorrentDescriptionUrl = () => {
const urls = [];
searchResultsTable.selectedRowsIds().each((rowId) => {
urls.push(searchResultsTable.getRow(rowId).full_data.descrLink);
@ -492,7 +492,7 @@ window.qBittorrent.Search ??= (() => {
return urls.join("\n");
};
const downloadSearchTorrent = function() {
const downloadSearchTorrent = () => {
const urls = [];
for (const rowID of searchResultsTable.selectedRowsIds())
urls.push(searchResultsTable.getRow(rowID).full_data.fileUrl);
@ -504,7 +504,7 @@ window.qBittorrent.Search ??= (() => {
showDownloadPage(urls);
};
const manageSearchPlugins = function() {
const manageSearchPlugins = () => {
const id = "searchPlugins";
if (!$(id)) {
new MochaUI.Window({
@ -522,10 +522,10 @@ window.qBittorrent.Search ??= (() => {
onResize: window.qBittorrent.Misc.createDebounceHandler(500, (e) => {
saveWindowSize(id);
}),
onBeforeBuild: function() {
onBeforeBuild: () => {
loadSearchPlugins();
},
onClose: function() {
onClose: () => {
clearTimeout(loadSearchPluginsTimer);
loadSearchPluginsTimer = -1;
}
@ -533,12 +533,12 @@ window.qBittorrent.Search ??= (() => {
}
};
const loadSearchPlugins = function() {
const loadSearchPlugins = () => {
getPlugins();
loadSearchPluginsTimer = loadSearchPlugins.delay(2000);
};
const onSearchPatternChanged = function() {
const onSearchPatternChanged = () => {
const currentSearchId = getSelectedSearchId();
const state = searchState.get(currentSearchId);
const currentSearchPattern = $("searchPattern").value.trim();
@ -553,11 +553,11 @@ window.qBittorrent.Search ??= (() => {
}
};
const categorySelected = function() {
const categorySelected = () => {
selectedCategory = $("categorySelect").value;
};
const pluginSelected = function() {
const pluginSelected = () => {
selectedPlugin = $("pluginsSelect").value;
if (selectedPlugin !== prevSelectedPlugin) {
@ -566,7 +566,7 @@ window.qBittorrent.Search ??= (() => {
}
};
const reselectCategory = function() {
const reselectCategory = () => {
for (let i = 0; i < $("categorySelect").options.length; ++i) {
if ($("categorySelect").options[i].get("value") === selectedCategory)
$("categorySelect").options[i].selected = true;
@ -575,7 +575,7 @@ window.qBittorrent.Search ??= (() => {
categorySelected();
};
const reselectPlugin = function() {
const reselectPlugin = () => {
for (let i = 0; i < $("pluginsSelect").options.length; ++i) {
if ($("pluginsSelect").options[i].get("value") === selectedPlugin)
$("pluginsSelect").options[i].selected = true;
@ -584,7 +584,7 @@ window.qBittorrent.Search ??= (() => {
pluginSelected();
};
const resetSearchState = function(searchId) {
const resetSearchState = (searchId) => {
document.getElementById("startSearchButton").lastChild.textContent = "QBT_TR(Search)QBT_TR[CONTEXT=SearchEngineWidget]";
const state = searchState.get(searchId);
if (state) {
@ -642,7 +642,7 @@ window.qBittorrent.Search ??= (() => {
reselectCategory();
};
const getPlugins = function() {
const getPlugins = () => {
new Request.JSON({
url: new URI("api/v2/search/plugins"),
method: "get",
@ -706,7 +706,7 @@ window.qBittorrent.Search ??= (() => {
}).send();
};
const getPlugin = function(name) {
const getPlugin = (name) => {
for (let i = 0; i < searchPlugins.length; ++i) {
if (searchPlugins[i].name === name)
return searchPlugins[i];
@ -715,7 +715,7 @@ window.qBittorrent.Search ??= (() => {
return null;
};
const resetFilters = function() {
const resetFilters = () => {
searchText.filterPattern = "";
$("searchInNameFilter").value = "";
@ -734,23 +734,23 @@ window.qBittorrent.Search ??= (() => {
$("searchMaxSizePrefix").value = searchSizeFilter.maxUnit;
};
const getSearchInTorrentName = function() {
const getSearchInTorrentName = () => {
return ($("searchInTorrentName").value === "names") ? "names" : "everywhere";
};
const searchInTorrentName = function() {
const searchInTorrentName = () => {
LocalPreferences.set("search_in_filter", getSearchInTorrentName());
searchFilterChanged();
};
const searchSeedsFilterChanged = function() {
const searchSeedsFilterChanged = () => {
searchSeedsFilter.min = $("searchMinSeedsFilter").value;
searchSeedsFilter.max = $("searchMaxSeedsFilter").value;
searchFilterChanged();
};
const searchSizeFilterChanged = function() {
const searchSizeFilterChanged = () => {
searchSizeFilter.min = $("searchMinSizeFilter").value;
searchSizeFilter.minUnit = $("searchMinSizePrefix").value;
searchSizeFilter.max = $("searchMaxSizeFilter").value;
@ -759,17 +759,17 @@ window.qBittorrent.Search ??= (() => {
searchFilterChanged();
};
const searchSizeFilterPrefixChanged = function() {
const searchSizeFilterPrefixChanged = () => {
if ((Number($("searchMinSizeFilter").value) !== 0) || (Number($("searchMaxSizeFilter").value) !== 0))
searchSizeFilterChanged();
};
const searchFilterChanged = function() {
const searchFilterChanged = () => {
searchResultsTable.updateTable();
$("numSearchResultsVisible").textContent = searchResultsTable.getFilteredAndSortedRows().length;
};
const setupSearchTableEvents = function(enable) {
const setupSearchTableEvents = (enable) => {
const clickHandler = (e) => { downloadSearchTorrent(); };
if (enable) {
$$(".searchTableRow").each((target) => {
@ -881,7 +881,7 @@ window.qBittorrent.Search ??= (() => {
};
new ClipboardJS(".copySearchDataToClipboard", {
text: function(trigger) {
text: (trigger) => {
switch (trigger.id) {
case "copySearchTorrentName":
return copySearchTorrentName();

View file

@ -29,7 +29,7 @@
"use strict";
MochaUI.extend({
addUpLimitSlider: function(hashes) {
addUpLimitSlider: (hashes) => {
if ($("uplimitSliderarea")) {
// Get global upload limit
let maximum = 500;
@ -37,7 +37,7 @@ MochaUI.extend({
url: "api/v2/transfer/uploadLimit",
method: "get",
data: {},
onSuccess: function(data) {
onSuccess: (data) => {
if (data) {
const tmp = data.toInt();
if (tmp > 0) {
@ -61,7 +61,7 @@ MochaUI.extend({
steps: maximum,
offset: 0,
initialStep: up_limit.round(),
onChange: function(pos) {
onChange: (pos) => {
if (pos > 0) {
$("uplimitUpdatevalue").value = pos;
$("upLimitUnit").style.visibility = "visible";
@ -70,7 +70,7 @@ MochaUI.extend({
$("uplimitUpdatevalue").value = "∞";
$("upLimitUnit").style.visibility = "hidden";
}
}.bind(this)
}
});
// Set default value
if (up_limit === 0) {
@ -89,7 +89,7 @@ MochaUI.extend({
data: {
hashes: hashes.join("|")
},
onSuccess: function(data) {
onSuccess: (data) => {
if (data) {
let up_limit = data[hashes[0]];
for (const key in data) {
@ -104,7 +104,7 @@ MochaUI.extend({
steps: maximum,
offset: 0,
initialStep: (up_limit / 1024.0).round(),
onChange: function(pos) {
onChange: (pos) => {
if (pos > 0) {
$("uplimitUpdatevalue").value = pos;
$("upLimitUnit").style.visibility = "visible";
@ -113,7 +113,7 @@ MochaUI.extend({
$("uplimitUpdatevalue").value = "∞";
$("upLimitUnit").style.visibility = "hidden";
}
}.bind(this)
}
});
// Set default value
if (up_limit === 0) {
@ -133,7 +133,7 @@ MochaUI.extend({
}
},
addDlLimitSlider: function(hashes) {
addDlLimitSlider: (hashes) => {
if ($("dllimitSliderarea")) {
// Get global upload limit
let maximum = 500;
@ -141,7 +141,7 @@ MochaUI.extend({
url: "api/v2/transfer/downloadLimit",
method: "get",
data: {},
onSuccess: function(data) {
onSuccess: (data) => {
if (data) {
const tmp = data.toInt();
if (tmp > 0) {
@ -165,7 +165,7 @@ MochaUI.extend({
steps: maximum,
offset: 0,
initialStep: dl_limit.round(),
onChange: function(pos) {
onChange: (pos) => {
if (pos > 0) {
$("dllimitUpdatevalue").value = pos;
$("dlLimitUnit").style.visibility = "visible";
@ -174,7 +174,7 @@ MochaUI.extend({
$("dllimitUpdatevalue").value = "∞";
$("dlLimitUnit").style.visibility = "hidden";
}
}.bind(this)
}
});
// Set default value
if (dl_limit === 0) {
@ -193,7 +193,7 @@ MochaUI.extend({
data: {
hashes: hashes.join("|")
},
onSuccess: function(data) {
onSuccess: (data) => {
if (data) {
let dl_limit = data[hashes[0]];
for (const key in data) {
@ -208,7 +208,7 @@ MochaUI.extend({
steps: maximum,
offset: 0,
initialStep: (dl_limit / 1024.0).round(),
onChange: function(pos) {
onChange: (pos) => {
if (pos > 0) {
$("dllimitUpdatevalue").value = pos;
$("dlLimitUnit").style.visibility = "visible";
@ -217,7 +217,7 @@ MochaUI.extend({
$("dllimitUpdatevalue").value = "∞";
$("dlLimitUnit").style.visibility = "hidden";
}
}.bind(this)
}
});
// Set default value
if (dl_limit === 0) {

View file

@ -56,10 +56,10 @@
hashes: hashesList,
location: location
},
onSuccess: function() {
onSuccess: () => {
window.parent.qBittorrent.Client.closeWindows();
},
onFailure: function(xhr) {
onFailure: (xhr) => {
$("error_div").textContent = xhr.response;
}
}).send();

View file

@ -112,14 +112,14 @@
seedingTimeLimit: seedingTimeLimitValue,
inactiveSeedingTimeLimit: inactiveSeedingTimeLimitValue
},
onComplete: function() {
onComplete: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();
});
});
function getSelectedRadioValue(name) {
const getSelectedRadioValue = (name) => {
const radios = document.getElementsByName(name);
for (let i = 0; i < radios.length; ++i) {
@ -127,9 +127,9 @@
if (radio.checked)
return radio.value;
}
}
};
function setSelectedRadioValue(name, value) {
const setSelectedRadioValue = (name, value) => {
const radios = document.getElementsByName(name);
for (let i = 0; i < radios.length; ++i) {
@ -137,9 +137,9 @@
if (radio.value === value)
radio.checked = true;
}
}
};
function shareLimitChanged() {
const shareLimitChanged = () => {
const customShareLimit = getSelectedRadioValue("shareLimit") === "custom";
$("setRatio").disabled = !customShareLimit;
$("setTotalMinutes").disabled = !customShareLimit;
@ -148,20 +148,20 @@
enableInputBoxes();
$("save").disabled = !isFormValid();
}
};
function enableInputBoxes() {
const enableInputBoxes = () => {
$("ratio").disabled = $("setRatio").disabled || !$("setRatio").checked;
$("totalMinutes").disabled = $("setTotalMinutes").disabled || !$("setTotalMinutes").checked;
$("inactiveMinutes").disabled = $("setInactiveMinutes").disabled || !$("setInactiveMinutes").checked;
$("save").disabled = !isFormValid();
}
};
function isFormValid() {
const isFormValid = () => {
return !((getSelectedRadioValue("shareLimit") === "custom") && !$("setRatio").checked
&& !$("setTotalMinutes").checked && !$("setInactiveMinutes").checked);
}
};
</script>
</head>

View file

@ -32,7 +32,7 @@
"use strict";
const hashes = new URI().getData("hashes").split("|");
const setUpLimit = function() {
const setUpLimit = () => {
const limit = $("uplimitUpdatevalue").value.toInt() * 1024;
if (hashes[0] === "global") {
new Request({
@ -41,7 +41,7 @@
data: {
"limit": limit
},
onComplete: function() {
onComplete: () => {
window.parent.updateMainData();
window.parent.qBittorrent.Client.closeWindows();
}
@ -55,7 +55,7 @@
"hashes": hashes.join("|"),
"limit": limit
},
onComplete: function() {
onComplete: () => {
window.parent.qBittorrent.Client.closeWindows();
}
}).send();

View file

@ -13,7 +13,7 @@
<script>
"use strict";
(function() {
(() => {
MochaUI.initializeTabs("aboutTabs");
$("aboutAboutLink").addEventListener("click", () => {

View file

@ -32,11 +32,11 @@
data: {
hashes: hashes.join("|"),
},
onSuccess: function() {
onSuccess: () => {
updateMainData();
window.qBittorrent.Client.closeWindow("confirmRecheckDialog");
},
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Unable to recheck torrents.)QBT_TR[CONTEXT=HttpServer]");
}
}).send();

View file

@ -61,7 +61,7 @@
data: {
"delete_torrent_content_files": deleteCB.checked
},
onSuccess: function() {
onSuccess: () => {
prefDeleteContentFiles = deleteCB.checked;
setRememberBtnEnabled(false);
}
@ -84,13 +84,13 @@
"hashes": hashes.join("|"),
"deleteFiles": deleteCB.checked
},
onSuccess: function() {
onSuccess: () => {
torrentsTable.deselectAll();
updateMainData();
updatePropertiesPanel();
window.qBittorrent.Client.closeWindows();
},
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Unable to delete torrents.)QBT_TR[CONTEXT=HttpServer]");
},
}).send();

View file

@ -93,7 +93,7 @@
};
};
const addCookie = function() {
const addCookie = () => {
const newRow = document.querySelector("#manageCookiesTable tr.newRow").cloneNode(true);
newRow.querySelector(".removeCookie").addEventListener("click", (event) => {
deleteCookie(event.target);
@ -103,11 +103,11 @@
return newRow;
};
const deleteCookie = function(element) {
const deleteCookie = (element) => {
element.closest("tr").destroy();
};
const save = function() {
const save = () => {
const rows = [...document.querySelectorAll("#manageCookiesTable tbody tr")].filter(e => !e.hasClass("invisible"));
const cookies = rows.map(row => {
const expDateValue = row.querySelector("td.expDate input").valueAsNumber;
@ -142,7 +142,7 @@
}).send();
};
const loadCookies = function() {
const loadCookies = () => {
new Request.JSON({
url: "api/v2/app/cookies",
method: "get",
@ -171,7 +171,7 @@
}).send();
};
const setup = function() {
const setup = () => {
loadCookies();
document.querySelector(".addCookie").addEventListener("click", (event) => {

View file

@ -114,19 +114,19 @@
targets: ".categoriesFilterContextMenuTarget",
menu: "categoriesFilterMenu",
actions: {
createCategory: function(element, ref) {
createCategory: (element, ref) => {
createCategoryFN();
},
createSubcategory: function(element, ref) {
createSubcategory: (element, ref) => {
createSubcategoryFN(Number(element.id));
},
editCategory: function(element, ref) {
editCategory: (element, ref) => {
editCategoryFN(Number(element.id));
},
deleteCategory: function(element, ref) {
deleteCategory: (element, ref) => {
removeCategoryFN(Number(element.id));
},
deleteUnusedCategories: function(element, ref) {
deleteUnusedCategories: (element, ref) => {
deleteUnusedCategoriesFN();
},
startTorrents: (element, ref) => {
@ -156,13 +156,13 @@
targets: ".tagsFilterContextMenuTarget",
menu: "tagsFilterMenu",
actions: {
createTag: function(element, ref) {
createTag: (element, ref) => {
createTagFN();
},
deleteTag: function(element, ref) {
deleteTag: (element, ref) => {
removeTagFN(Number(element.id));
},
deleteUnusedTags: function(element, ref) {
deleteUnusedTags: (element, ref) => {
deleteUnusedTagsFN();
},
startTorrents: (element, ref) => {
@ -192,7 +192,7 @@
targets: ".trackersFilterContextMenuTarget",
menu: "trackersFilterMenu",
actions: {
deleteTracker: function(element, ref) {
deleteTracker: (element, ref) => {
deleteTrackerFN(element.id);
},
startTorrents: (element, ref) => {

View file

@ -37,7 +37,7 @@
};
};
const setup = function() {
const setup = () => {
new Keyboard({
defaultEventType: "keydown",
events: {
@ -58,7 +58,7 @@
$("newPluginPath").select();
};
const newPluginOk = function() {
const newPluginOk = () => {
const path = $("newPluginPath").value.trim();
if (path) {
new Request({
@ -67,7 +67,7 @@
data: {
sources: path,
},
onRequest: function() {
onRequest: () => {
window.qBittorrent.SearchPlugins.closeSearchWindow("installSearchPlugin");
}
}).send();

View file

@ -361,14 +361,14 @@
url: url,
method: "get",
noCache: true,
onFailure: function(response) {
onFailure: (response) => {
const errorDiv = $("error_div");
if (errorDiv)
errorDiv.textContent = "QBT_TR(qBittorrent client is not reachable)QBT_TR[CONTEXT=HttpServer]";
tableInfo[curTab].progress = false;
syncLogWithInterval(10000);
},
onSuccess: function(response) {
onSuccess: (response) => {
$("error_div").textContent = "";
if ($("logTabColumn").hasClass("invisible"))
@ -412,7 +412,7 @@
};
new ClipboardJS(".copyLogDataToClipboard", {
text: function() {
text: () => {
const msg = [];
tableInfo[currentSelectedTab].instance.selectedRowsIds().forEach((rowId) => {
msg.push(tableInfo[currentSelectedTab].instance.getRow(rowId).full_data[(currentSelectedTab === "main") ? "message" : "ip"]);

View file

@ -1746,7 +1746,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
input.value = max;
};
const updateFileLogEnabled = function() {
const updateFileLogEnabled = () => {
const isFileLogEnabled = $("filelog_checkbox").checked;
$("filelog_save_path_input").disabled = !isFileLogEnabled;
$("filelog_backup_checkbox").disabled = !isFileLogEnabled;
@ -1756,12 +1756,12 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
updateFileLogDeleteEnabled();
};
const updateFileLogBackupEnabled = function() {
const updateFileLogBackupEnabled = () => {
const pros = $("filelog_backup_checkbox").getProperties("disabled", "checked");
$("filelog_max_size_input").disabled = pros.disabled || !pros.checked;
};
const updateFileLogDeleteEnabled = function() {
const updateFileLogDeleteEnabled = () => {
const pros = $("filelog_delete_old_checkbox").getProperties("disabled", "checked");
$("filelog_age_input").disabled = pros.disabled || !pros.checked;
$("filelog_age_type_select").disabled = pros.disabled || !pros.checked;
@ -1770,7 +1770,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
// Downloads tab
let watchedFoldersTable;
const updateTempDirEnabled = function() {
const updateTempDirEnabled = () => {
const isTempDirEnabled = $("temppath_checkbox").checked;
$("temppath_text").disabled = !isTempDirEnabled;
};
@ -1835,22 +1835,22 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
return folders;
};
const updateExcludedFileNamesEnabled = function() {
const updateExcludedFileNamesEnabled = () => {
const isAExcludedFileNamesEnabled = $("excludedFileNamesCheckbox").checked;
$("excludedFileNamesTextarea").disabled = !isAExcludedFileNamesEnabled;
};
const updateExportDirEnabled = function() {
const updateExportDirEnabled = () => {
const isExportDirEnabled = $("exportdir_checkbox").checked;
$("exportdir_text").disabled = !isExportDirEnabled;
};
const updateExportDirFinEnabled = function() {
const updateExportDirFinEnabled = () => {
const isExportDirFinEnabled = $("exportdirfin_checkbox").checked;
$("exportdirfin_text").disabled = !isExportDirFinEnabled;
};
const updateMailNotification = function() {
const updateMailNotification = () => {
const isMailNotificationEnabled = $("mail_notification_checkbox").checked;
$("src_email_txt").disabled = !isMailNotificationEnabled;
$("dest_email_txt").disabled = !isMailNotificationEnabled;
@ -1865,65 +1865,65 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
}
};
const updateMailAuthSettings = function() {
const updateMailAuthSettings = () => {
const isMailAuthEnabled = $("mail_auth_checkbox").checked;
$("mail_username_text").disabled = !isMailAuthEnabled;
$("mail_password_text").disabled = !isMailAuthEnabled;
};
const sendTestEmail = function() {
const sendTestEmail = () => {
new Request({
url: "api/v2/app/sendTestEmail",
method: "post",
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Could not contact qBittorrent)QBT_TR[CONTEXT=HttpServer]");
},
onSuccess: function() {
onSuccess: () => {
alert("QBT_TR(Attempted to send email. Check your inbox to confirm success)QBT_TR[CONTEXT=OptionsDialog]");
}
}).send();
};
const updateAutoRunOnTorrentAdded = function() {
const updateAutoRunOnTorrentAdded = () => {
const isAutoRunOnTorrentAddedEnabled = $("autorunOnTorrentAddedCheckbox").checked;
$("autorunOnTorrentAddedProgram").disabled = !isAutoRunOnTorrentAddedEnabled;
};
const updateAutoRun = function() {
const updateAutoRun = () => {
const isAutoRunEnabled = $("autorun_checkbox").checked;
$("autorunProg_txt").disabled = !isAutoRunEnabled;
};
// Connection tab
const updateMaxConnecEnabled = function() {
const updateMaxConnecEnabled = () => {
const isMaxConnecEnabled = $("max_connec_checkbox").checked;
$("max_connec_value").disabled = !isMaxConnecEnabled;
};
const updateMaxConnecPerTorrentEnabled = function() {
const updateMaxConnecPerTorrentEnabled = () => {
const isMaxConnecPerTorrentEnabled = $("max_connec_per_torrent_checkbox").checked;
$("max_connec_per_torrent_value").disabled = !isMaxConnecPerTorrentEnabled;
};
const updateMaxUploadsEnabled = function() {
const updateMaxUploadsEnabled = () => {
const isMaxUploadsEnabled = $("max_uploads_checkbox").checked;
$("max_uploads_value").disabled = !isMaxUploadsEnabled;
};
const updateMaxUploadsPerTorrentEnabled = function() {
const updateMaxUploadsPerTorrentEnabled = () => {
const isMaxUploadsPerTorrentEnabled = $("max_uploads_per_torrent_checkbox").checked;
$("max_uploads_per_torrent_value").disabled = !isMaxUploadsPerTorrentEnabled;
};
const updateI2PSettingsEnabled = function() {
const updateI2PSettingsEnabled = () => {
const isI2PEnabled = $("i2pEnabledCheckbox").checked;
$("i2pAddress").disabled = !isI2PEnabled;
$("i2pPort").disabled = !isI2PEnabled;
$("i2pMixedMode").disabled = !isI2PEnabled;
};
const updatePeerProxySettings = function() {
const updatePeerProxySettings = () => {
const proxyType = $("peer_proxy_type_select").value;
const isProxyDisabled = (proxyType === "None");
const isProxySocks4 = (proxyType === "SOCKS4");
@ -1941,7 +1941,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
updatePeerProxyAuthSettings();
};
const updatePeerProxyAuthSettings = function() {
const updatePeerProxyAuthSettings = () => {
const proxyType = $("peer_proxy_type_select").value;
const isProxyDisabled = (proxyType === "None");
const isPeerProxyAuthEnabled = (!$("peer_proxy_auth_checkbox").disabled && $("peer_proxy_auth_checkbox").checked);
@ -1949,13 +1949,13 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
$("peer_proxy_password_text").disabled = (isProxyDisabled || !isPeerProxyAuthEnabled);
};
const updateFilterSettings = function() {
const updateFilterSettings = () => {
const isIPFilterEnabled = $("ipfilter_text_checkbox").checked;
$("ipfilter_text").disabled = !isIPFilterEnabled;
};
// Speed tab
const updateSchedulingEnabled = function() {
const updateSchedulingEnabled = () => {
const isLimitSchedulingEnabled = $("limitSchedulingCheckbox").checked;
$("schedule_from_hour").disabled = !isLimitSchedulingEnabled;
$("schedule_from_min").disabled = !isLimitSchedulingEnabled;
@ -1965,7 +1965,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
};
// Bittorrent tab
const updateQueueingSystem = function() {
const updateQueueingSystem = () => {
const isQueueingEnabled = $("queueing_checkbox").checked;
$("max_active_dl_value").disabled = !isQueueingEnabled;
$("max_active_up_value").disabled = !isQueueingEnabled;
@ -1974,14 +1974,14 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
updateSlowTorrentsSettings();
};
const updateSlowTorrentsSettings = function() {
const updateSlowTorrentsSettings = () => {
const isDontCountSlowTorrentsEnabled = (!$("dont_count_slow_torrents_checkbox").disabled) && $("dont_count_slow_torrents_checkbox").checked;
$("dl_rate_threshold").disabled = !isDontCountSlowTorrentsEnabled;
$("ul_rate_threshold").disabled = !isDontCountSlowTorrentsEnabled;
$("torrent_inactive_timer").disabled = !isDontCountSlowTorrentsEnabled;
};
const updateMaxRatioTimeEnabled = function() {
const updateMaxRatioTimeEnabled = () => {
const isMaxRatioEnabled = $("max_ratio_checkbox").checked;
$("max_ratio_value").disabled = !isMaxRatioEnabled;
@ -1994,44 +1994,44 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
$("max_ratio_act").disabled = !(isMaxRatioEnabled || isMaxSeedingTimeEnabled || isMaxInactiveSeedingTimeEnabled);
};
const updateAddTrackersEnabled = function() {
const updateAddTrackersEnabled = () => {
const isAddTrackersEnabled = $("add_trackers_checkbox").checked;
$("add_trackers_textarea").disabled = !isAddTrackersEnabled;
};
// WebUI tab
const updateHttpsSettings = function() {
const updateHttpsSettings = () => {
const isUseHttpsEnabled = $("use_https_checkbox").checked;
$("ssl_cert_text").disabled = !isUseHttpsEnabled;
$("ssl_key_text").disabled = !isUseHttpsEnabled;
};
const updateBypasssAuthSettings = function() {
const updateBypasssAuthSettings = () => {
const isBypassAuthSubnetWhitelistEnabled = $("bypass_auth_subnet_whitelist_checkbox").checked;
$("bypass_auth_subnet_whitelist_textarea").disabled = !isBypassAuthSubnetWhitelistEnabled;
};
const updateAlternativeWebUISettings = function() {
const updateAlternativeWebUISettings = () => {
const isUseAlternativeWebUIEnabled = $("use_alt_webui_checkbox").checked;
$("webui_files_location_textarea").disabled = !isUseAlternativeWebUIEnabled;
};
const updateHostHeaderValidationSettings = function() {
const updateHostHeaderValidationSettings = () => {
const isHostHeaderValidationEnabled = $("host_header_validation_checkbox").checked;
$("webui_domain_textarea").disabled = !isHostHeaderValidationEnabled;
};
const updateWebUICustomHTTPHeadersSettings = function() {
const updateWebUICustomHTTPHeadersSettings = () => {
const isEnabled = $("webUIUseCustomHTTPHeadersCheckbox").checked;
$("webUICustomHTTPHeadersTextarea").disabled = !isEnabled;
};
const updateWebUIReverseProxySettings = function() {
const updateWebUIReverseProxySettings = () => {
const isEnabled = $("webUIReverseProxySupportCheckbox").checked;
$("webUIReverseProxiesListTextarea").disabled = !isEnabled;
};
const updateDynDnsSettings = function() {
const updateDynDnsSettings = () => {
const isDynDnsEnabled = $("use_dyndns_checkbox").checked;
$("dyndns_select").disabled = !isDynDnsEnabled;
$("dyndns_domain_text").disabled = !isDynDnsEnabled;
@ -2039,21 +2039,21 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
$("dyndns_password_text").disabled = !isDynDnsEnabled;
};
const registerDynDns = function() {
const registerDynDns = () => {
if ($("dyndns_select").value.toInt() === 1)
window.open("http://www.no-ip.com/services/managed_dns/free_dynamic_dns.html", "NO-IP Registration");
else
window.open("https://www.dyndns.com/account/services/hosts/add.html", "DynDNS Registration");
};
const generateRandomPort = function() {
const generateRandomPort = () => {
const min = 1024;
const max = 65535;
const port = Math.floor(Math.random() * (max - min + 1) + min);
$("port_value").value = port;
};
const time_padding = function(val) {
const time_padding = (val) => {
let ret = val.toString();
if (ret.length === 1)
ret = "0" + ret;
@ -2061,17 +2061,17 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
};
// Advanced Tab
const updateNetworkInterfaces = function(default_iface, default_iface_name) {
const updateNetworkInterfaces = (default_iface, default_iface_name) => {
const url = "api/v2/app/networkInterfaceList";
$("networkInterface").getChildren().each(c => c.destroy());
new Request.JSON({
url: url,
method: "get",
noCache: true,
onFailure: function() {
onFailure: () => {
alert("Could not contact qBittorrent");
},
onSuccess: function(ifaces) {
onSuccess: (ifaces) => {
if (!Array.isArray(ifaces))
return;
@ -2088,7 +2088,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
}).send();
};
const updateInterfaceAddresses = function(iface, default_addr) {
const updateInterfaceAddresses = (iface, default_addr) => {
const url = "api/v2/app/networkInterfaceAddressList";
$("optionalIPAddressToBind").getChildren().each(c => c.destroy());
new Request.JSON({
@ -2098,10 +2098,10 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
data: {
"iface": iface
},
onFailure: function() {
onFailure: () => {
alert("Could not contact qBittorrent");
},
onSuccess: function(addresses) {
onSuccess: (addresses) => {
if (!addresses)
return;
@ -2128,7 +2128,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
$("locale_select").value = selected;
};
const loadPreferences = function() {
const loadPreferences = () => {
window.parent.qBittorrent.Cache.preferences.init({
onSuccess: (pref) => {
// Behavior tab
@ -2546,7 +2546,7 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
});
};
const applyPreferences = function() {
const applyPreferences = () => {
const settings = {};
// Validate form data
@ -3005,11 +3005,11 @@ Use ';' to split multiple entries. Can use wildcard '*'.)QBT_TR[CONTEXT=OptionsD
// Send it to qBT
window.parent.qBittorrent.Cache.preferences.set({
data: settings,
onFailure: function() {
onFailure: () => {
alert("QBT_TR(Unable to save program preferences, qBittorrent is probably unreachable.)QBT_TR[CONTEXT=HttpServer]");
window.parent.qBittorrent.Client.closeWindows();
},
onSuccess: function() {
onSuccess: () => {
// Close window
window.parent.location.reload();
window.parent.qBittorrent.Client.closeWindows();

View file

@ -32,7 +32,7 @@
<script>
"use strict";
(function() {
(() => {
// Tabs
MochaUI.initializeTabs("preferencesTabs");

View file

@ -92,7 +92,7 @@
let prevOffsetLeft;
let prevOffsetTop;
const setup = function() {
const setup = () => {
searchPluginsTable = new window.qBittorrent.DynamicTable.SearchPluginsTable();
searchPluginsTableContextMenu = new window.qBittorrent.ContextMenu.SearchPluginsTableContextMenu({
targets: ".searchPluginsTableRow",
@ -107,11 +107,11 @@
updateTable();
};
const closeSearchWindow = function(id) {
const closeSearchWindow = (id) => {
window.parent.MochaUI.closeWindow(window.parent.$(id));
};
const installPlugin = function(path) {
const installPlugin = (path) => {
new MochaUI.Window({
id: "installSearchPlugin",
icon: "images/qbittorrent-tray.svg",
@ -128,7 +128,7 @@
});
};
const uninstallPlugin = function() {
const uninstallPlugin = () => {
const plugins = searchPluginsTable.selectedRowsIds().join("|");
const url = new URI("api/v2/search/uninstallPlugin");
new Request({
@ -140,7 +140,7 @@
}).send();
};
const enablePlugin = function() {
const enablePlugin = () => {
const plugins = searchPluginsTable.selectedRowsIds();
let enable = true;
if (plugins && plugins.length)
@ -157,7 +157,7 @@
}).send();
};
const checkForUpdates = function() {
const checkForUpdates = () => {
const url = new URI("api/v2/search/updatePlugins");
new Request({
url: url,
@ -165,7 +165,7 @@
}).send();
};
const calculateContextMenuOffsets = function() {
const calculateContextMenuOffsets = () => {
prevOffsetLeft = document.getElementById("searchPlugins").getBoundingClientRect().left;
prevOffsetTop = document.getElementById("searchPlugins").getBoundingClientRect().top;
@ -175,13 +175,13 @@
};
};
const updateSearchPluginsTableContextMenuOffset = function() {
const updateSearchPluginsTableContextMenuOffset = () => {
// only re-calculate if window has moved
if ((prevOffsetLeft !== document.getElementById("searchPlugins").getBoundingClientRect().left) || (prevOffsetTop !== document.getElementById("searchPlugins").getBoundingClientRect().top))
searchPluginsTableContextMenu.options.offsets = calculateContextMenuOffsets();
};
const setupSearchPluginTableEvents = function(enable) {
const setupSearchPluginTableEvents = (enable) => {
const clickHandler = (e) => { enablePlugin(); };
const menuHandler = (e) => { updateSearchPluginsTableContextMenuOffset(); };
if (enable) {
@ -198,7 +198,7 @@
}
};
const updateTable = function() {
const updateTable = () => {
// clear event listeners
setupSearchPluginTableEvents(false);

View file

@ -32,75 +32,75 @@
targets: ".torrentsTableContextMenuTarget",
menu: "torrentsTableMenu",
actions: {
start: function(element, ref) {
start: (element, ref) => {
startFN();
},
stop: function(element, ref) {
stop: (element, ref) => {
stopFN();
},
forceStart: function(element, ref) {
forceStart: (element, ref) => {
setForceStartFN();
},
delete: function(element, ref) {
delete: (element, ref) => {
deleteSelectedTorrentsFN();
},
setLocation: function(element, ref) {
setLocation: (element, ref) => {
setLocationFN();
},
rename: function(element, ref) {
rename: (element, ref) => {
renameFN();
},
renameFiles: function(element, ref) {
renameFiles: (element, ref) => {
renameFilesFN();
},
queueTop: function(element, ref) {
queueTop: (element, ref) => {
setQueuePositionFN("topPrio");
},
queueUp: function(element, ref) {
queueUp: (element, ref) => {
setQueuePositionFN("increasePrio");
},
queueDown: function(element, ref) {
queueDown: (element, ref) => {
setQueuePositionFN("decreasePrio");
},
queueBottom: function(element, ref) {
queueBottom: (element, ref) => {
setQueuePositionFN("bottomPrio");
},
downloadLimit: function(element, ref) {
downloadLimit: (element, ref) => {
downloadLimitFN();
},
uploadLimit: function(element, ref) {
uploadLimit: (element, ref) => {
uploadLimitFN();
},
shareRatio: function(element, ref) {
shareRatio: (element, ref) => {
shareRatioFN();
},
sequentialDownload: function(element, ref) {
sequentialDownload: (element, ref) => {
toggleSequentialDownloadFN();
},
firstLastPiecePrio: function(element, ref) {
firstLastPiecePrio: (element, ref) => {
toggleFirstLastPiecePrioFN();
},
autoTorrentManagement: function(element, ref) {
autoTorrentManagement: (element, ref) => {
autoTorrentManagementFN();
},
forceRecheck: function(element, ref) {
forceRecheck: (element, ref) => {
recheckFN();
},
forceReannounce: function(element, ref) {
forceReannounce: (element, ref) => {
reannounceFN();
},
superSeeding: function(element, ref) {
superSeeding: (element, ref) => {
setSuperSeedingFN(!ref.getItemChecked("superSeeding"));
},
exportTorrent: function(element, ref) {
exportTorrent: (element, ref) => {
exportTorrentFN();
}
},

View file

@ -28,7 +28,7 @@
"use strict";
function submitLoginForm(event) {
const submitLoginForm = (event) => {
event.preventDefault();
const errorMsgElement = document.getElementById("error_msg");
@ -56,7 +56,7 @@ function submitLoginForm(event) {
// clear the field
passwordElement.value = "";
}
};
document.addEventListener("DOMContentLoaded", () => {
const loginForm = document.getElementById("loginform");