WebUI: use defer when loading scripts

So that the HTML layout can be rendered earlier.
This commit is contained in:
Chocobo1 2025-05-28 23:17:58 +08:00
parent 9b66693cb8
commit 753c6629a3
No known key found for this signature in database
GPG key ID: 210D9C873253A68C
25 changed files with 216 additions and 208 deletions

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Add Peers)QBT_TR[CONTEXT=PeersAdditionDialog]</title> <title>QBT_TR(Add Peers)QBT_TR[CONTEXT=PeersAdditionDialog]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Add trackers)QBT_TR[CONTEXT=TrackersAdditionDialog]</title> <title>QBT_TR(Add trackers)QBT_TR[CONTEXT=TrackersAdditionDialog]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Add web seeds)QBT_TR[CONTEXT=HttpServer]</title> <title>QBT_TR(Add web seeds)QBT_TR[CONTEXT=HttpServer]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Deletion confirmation)QBT_TR[CONTEXT=RSSWidget]</title> <title>QBT_TR(Deletion confirmation)QBT_TR[CONTEXT=RSSWidget]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Clear downloaded episodes)QBT_TR[CONTEXT=AutomatedRssDownloader]</title> <title>QBT_TR(Clear downloaded episodes)QBT_TR[CONTEXT=AutomatedRssDownloader]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Rule deletion confirmation)QBT_TR[CONTEXT=AutomatedRssDownloader]</title> <title>QBT_TR(Rule deletion confirmation)QBT_TR[CONTEXT=AutomatedRssDownloader]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Remove tracker)QBT_TR[CONTEXT=confirmDeletionDlg]</title> <title>QBT_TR(Remove tracker)QBT_TR[CONTEXT=confirmDeletionDlg]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -6,10 +6,10 @@
<title>QBT_TR(Add Torrent Links)QBT_TR[CONTEXT=downloadFromURL]</title> <title>QBT_TR(Add Torrent Links)QBT_TR[CONTEXT=downloadFromURL]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<link rel="stylesheet" href="css/Window.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/Window.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script src="scripts/download.js?v=${CACHEID}"></script> <script defer src="scripts/download.js?v=${CACHEID}"></script>
<script src="scripts/pathAutofill.js?v=${CACHEID}"></script> <script defer src="scripts/pathAutofill.js?v=${CACHEID}"></script>
</head> </head>
<body> <body>
@ -160,31 +160,33 @@
<script> <script>
"use strict"; "use strict";
const encodedUrls = new URLSearchParams(window.location.search).get("urls"); window.addEventListener("DOMContentLoaded", (event) => {
if (encodedUrls !== null) { const encodedUrls = new URLSearchParams(window.location.search).get("urls");
const urls = encodedUrls.split("|").map(decodeURIComponent); if (encodedUrls !== null) {
if (urls.length > 0) const urls = encodedUrls.split("|").map(decodeURIComponent);
document.getElementById("urls").value = urls.join("\n"); if (urls.length > 0)
} document.getElementById("urls").value = urls.join("\n");
}
let submitted = false; let submitted = false;
document.getElementById("downloadForm").addEventListener("submit", (event) => { document.getElementById("downloadForm").addEventListener("submit", (event) => {
document.getElementById("startTorrentHidden").value = document.getElementById("startTorrent").checked ? "false" : "true"; document.getElementById("startTorrentHidden").value = document.getElementById("startTorrent").checked ? "false" : "true";
document.getElementById("dlLimitHidden").value = Number(document.getElementById("dlLimitText").value) * 1024; document.getElementById("dlLimitHidden").value = Number(document.getElementById("dlLimitText").value) * 1024;
document.getElementById("upLimitHidden").value = Number(document.getElementById("upLimitText").value) * 1024; document.getElementById("upLimitHidden").value = Number(document.getElementById("upLimitText").value) * 1024;
document.getElementById("download_spinner").style.display = "block"; document.getElementById("download_spinner").style.display = "block";
submitted = true; submitted = true;
});
document.getElementById("download_frame").addEventListener("load", (event) => {
if (submitted)
window.parent.qBittorrent.Client.closeFrameWindow(window);
});
window.qBittorrent.pathAutofill.attachPathAutofill();
}); });
document.getElementById("download_frame").addEventListener("load", (event) => {
if (submitted)
window.parent.qBittorrent.Client.closeFrameWindow(window);
});
window.qBittorrent.pathAutofill.attachPathAutofill();
</script> </script>
</body> </body>

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Please type a RSS feed URL)QBT_TR[CONTEXT=RSSWidget]</title> <title>QBT_TR(Please type a RSS feed URL)QBT_TR[CONTEXT=RSSWidget]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Tracker editing)QBT_TR[CONTEXT=TrackerListWidget]</title> <title>QBT_TR(Tracker editing)QBT_TR[CONTEXT=TrackerListWidget]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Edit web seed)QBT_TR[CONTEXT=HttpServer]</title> <title>QBT_TR(Edit web seed)QBT_TR[CONTEXT=HttpServer]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,10 +5,10 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(New Category)QBT_TR[CONTEXT=TransferListWidget]</title> <title>QBT_TR(New Category)QBT_TR[CONTEXT=TransferListWidget]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script src="scripts/misc.js?locale=${LANG}&v=${CACHEID}"></script> <script defer src="scripts/misc.js?locale=${LANG}&v=${CACHEID}"></script>
<script src="scripts/pathAutofill.js?v=${CACHEID}"></script> <script defer src="scripts/pathAutofill.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Please type a RSS feed URL)QBT_TR[CONTEXT=RSSWidget]</title> <title>QBT_TR(Please type a RSS feed URL)QBT_TR[CONTEXT=RSSWidget]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Please choose a folder name)QBT_TR[CONTEXT=RSSWidget]</title> <title>QBT_TR(Please choose a folder name)QBT_TR[CONTEXT=RSSWidget]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(New rule name)QBT_TR[CONTEXT=AutomatedRssDownloader]</title> <title>QBT_TR(New rule name)QBT_TR[CONTEXT=AutomatedRssDownloader]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,9 +5,9 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Add tags)QBT_TR[CONTEXT=TransferListWidget]</title> <title>QBT_TR(Add tags)QBT_TR[CONTEXT=TransferListWidget]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script src="scripts/misc.js?locale=${LANG}&v=${CACHEID}"></script> <script defer src="scripts/misc.js?locale=${LANG}&v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Rename)QBT_TR[CONTEXT=TransferListWidget]</title> <title>QBT_TR(Rename)QBT_TR[CONTEXT=TransferListWidget]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Please choose a new name for this RSS feed)QBT_TR[CONTEXT=RSSWidget]</title> <title>QBT_TR(Please choose a new name for this RSS feed)QBT_TR[CONTEXT=RSSWidget]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,9 +5,9 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Renaming)QBT_TR[CONTEXT=TorrentContentTreeView]</title> <title>QBT_TR(Renaming)QBT_TR[CONTEXT=TorrentContentTreeView]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script src="scripts/filesystem.js?v=${CACHEID}"></script> <script defer src="scripts/filesystem.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -4,11 +4,11 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Renaming)QBT_TR[CONTEXT=TorrentContentTreeView]</title> <title>QBT_TR(Renaming)QBT_TR[CONTEXT=TorrentContentTreeView]</title>
<script src="scripts/filesystem.js?v=${CACHEID}"></script> <script defer src="scripts/filesystem.js?v=${CACHEID}"></script>
<script src="scripts/misc.js?locale=${LANG}&v=${CACHEID}"></script> <script defer src="scripts/misc.js?locale=${LANG}&v=${CACHEID}"></script>
<script src="scripts/file-tree.js?v=${CACHEID}"></script> <script defer src="scripts/file-tree.js?v=${CACHEID}"></script>
<script src="scripts/dynamicTable.js?locale=${LANG}&v=${CACHEID}"></script> <script defer src="scripts/dynamicTable.js?locale=${LANG}&v=${CACHEID}"></script>
<script src="scripts/rename-files.js?v=${CACHEID}"></script> <script defer src="scripts/rename-files.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Rule renaming)QBT_TR[CONTEXT=AutomatedRssDownloader]</title> <title>QBT_TR(Rule renaming)QBT_TR[CONTEXT=AutomatedRssDownloader]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,9 +5,9 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Set location)QBT_TR[CONTEXT=HttpServer]</title> <title>QBT_TR(Set location)QBT_TR[CONTEXT=HttpServer]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script src="scripts/pathAutofill.js?v=${CACHEID}"></script> <script defer src="scripts/pathAutofill.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Torrent Upload/Download Ratio Limiting)QBT_TR[CONTEXT=UpDownRatioDialog]</title> <title>QBT_TR(Torrent Upload/Download Ratio Limiting)QBT_TR[CONTEXT=UpDownRatioDialog]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script> <script>
"use strict"; "use strict";

View file

@ -5,8 +5,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>QBT_TR(Speed limit)QBT_TR[CONTEXT=SpeedLimit]</title> <title>QBT_TR(Speed limit)QBT_TR[CONTEXT=SpeedLimit]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
</head> </head>
<body> <body>
@ -19,140 +19,144 @@
</div> </div>
<input type="range" id="limitSliderInput" min="0" value="0" style="width: 100%;" aria-label="QBT_TR(Speed limit)QBT_TR[CONTEXT=SpeedLimit]"> <input type="range" id="limitSliderInput" min="0" value="0" style="width: 100%;" aria-label="QBT_TR(Speed limit)QBT_TR[CONTEXT=SpeedLimit]">
</div> </div>
<input type="button" id="applyButton" value="QBT_TR(Apply)QBT_TR[CONTEXT=HttpServer]" onclick="saveLimit()"> <input type="button" id="applyButton" value="QBT_TR(Apply)QBT_TR[CONTEXT=HttpServer]">
</div> </div>
<script> <script>
"use strict"; "use strict";
window.addEventListener("keydown", (event) => { window.addEventListener("DOMContentLoaded", (event) => {
switch (event.key) { const applyButton = document.getElementById("applyButton");
case "Enter":
event.preventDefault();
document.getElementById("applyButton").click();
break;
case "Escape":
event.preventDefault();
window.parent.qBittorrent.Client.closeFrameWindow(window);
break;
}
});
const params = new URLSearchParams(window.location.search); window.addEventListener("keydown", (event) => {
const type = params.get("type"); switch (event.key) {
const hashes = params.get("hashes").split("|"); case "Enter":
event.preventDefault();
const isGlobal = (hashes[0] === "global"); applyButton.click();
// Otherwise it's download limit break;
const isUpload = (type === "upload"); case "Escape":
event.preventDefault();
const getLimitMethod = isUpload ? "uploadLimit" : "downloadLimit"; window.parent.qBittorrent.Client.closeFrameWindow(window);
const setLimitMethod = isUpload ? "setUploadLimit" : "setDownloadLimit"; break;
}
const limitUpdateValue = document.getElementById("limitUpdateValue");
const limitUnit = document.getElementById("limitUnit");
const setLimitUpdateValue = (value) => {
if (value === 0) {
limitUpdateValue.value = "∞";
limitUnit.style.visibility = "hidden";
}
else {
limitUpdateValue.value = value;
limitUnit.style.visibility = "visible";
}
};
const setupSlider = (limit, maximum) => {
const input = document.getElementById("limitSliderInput");
input.max = maximum;
input.value = limit;
input.addEventListener("input", (event) => {
setLimitUpdateValue(Number(event.target.value));
}); });
// Set default value
setLimitUpdateValue(limit);
};
const saveLimit = () => { const params = new URLSearchParams(window.location.search);
const limit = Number(limitUpdateValue.value) * 1024; const type = params.get("type");
if (isGlobal) { const hashes = params.get("hashes").split("|");
fetch(`api/v2/transfer/${setLimitMethod}`, {
method: "POST",
body: new URLSearchParams({
limit: limit
})
})
.then((response) => {
if (!response.ok)
return;
window.parent.updateMainData(); const isGlobal = (hashes[0] === "global");
window.parent.qBittorrent.Client.closeFrameWindow(window); // Otherwise it's download limit
}); const isUpload = (type === "upload");
}
else {
fetch(`api/v2/torrents/${setLimitMethod}`, {
method: "POST",
body: new URLSearchParams({
hashes: hashes.join("|"),
limit: limit
})
})
.then((response) => {
if (!response.ok)
return;
window.parent.qBittorrent.Client.closeFrameWindow(window); const getLimitMethod = isUpload ? "uploadLimit" : "downloadLimit";
}); const setLimitMethod = isUpload ? "setUploadLimit" : "setDownloadLimit";
}
};
document.getElementById("limitUpdateLabel").textContent = const limitUpdateValue = document.getElementById("limitUpdateValue");
isUpload const limitUnit = document.getElementById("limitUnit");
? `QBT_TR(Upload limit:)QBT_TR[CONTEXT=SpeedLimit]`
: `QBT_TR(Download limit:)QBT_TR[CONTEXT=SpeedLimit]`;
fetch(`api/v2/transfer/${getLimitMethod}`, { const setLimitUpdateValue = (value) => {
method: "GET", if (value === 0) {
cache: "no-store" limitUpdateValue.value = "∞";
}) limitUnit.style.visibility = "hidden";
.then(async (response) => {
if (!response.ok)
return;
const data = await response.text();
const globalLimit = Math.max((Number(data) / 1024), 0);
// Get torrents download limit
// And create slider
if (isGlobal) {
setupSlider(globalLimit, 10000);
} }
else { else {
fetch(`api/v2/torrents/${getLimitMethod}`, { limitUpdateValue.value = value;
limitUnit.style.visibility = "visible";
}
};
const setupSlider = (limit, maximum) => {
const input = document.getElementById("limitSliderInput");
input.max = maximum;
input.value = limit;
input.addEventListener("input", (event) => {
setLimitUpdateValue(Number(event.target.value));
});
// Set default value
setLimitUpdateValue(limit);
};
applyButton.addEventListener("click", (event) => {
const limit = Number(limitUpdateValue.value) * 1024;
if (isGlobal) {
fetch(`api/v2/transfer/${setLimitMethod}`, {
method: "POST", method: "POST",
body: new URLSearchParams({ body: new URLSearchParams({
hashes: hashes.join("|") limit: limit
}) })
}) })
.then(async (response) => { .then((response) => {
if (!response.ok) if (!response.ok)
return; return;
const data = await response.json(); window.parent.updateMainData();
window.parent.qBittorrent.Client.closeFrameWindow(window);
});
}
else {
fetch(`api/v2/torrents/${setLimitMethod}`, {
method: "POST",
body: new URLSearchParams({
hashes: hashes.join("|"),
limit: limit
})
})
.then((response) => {
if (!response.ok)
return;
const firstLimit = Math.max(data[hashes[0]], 0); window.parent.qBittorrent.Client.closeFrameWindow(window);
const isAllFirstLimit = Object.values(data).every(value => value === firstLimit);
const limit = isAllFirstLimit ? Math.round(firstLimit / 1024) : 0;
setupSlider(limit, ((globalLimit > 0) ? globalLimit : 1000));
}); });
} }
}); });
limitUpdateValue.focus(); document.getElementById("limitUpdateLabel").textContent =
isUpload
? `QBT_TR(Upload limit:)QBT_TR[CONTEXT=SpeedLimit]`
: `QBT_TR(Download limit:)QBT_TR[CONTEXT=SpeedLimit]`;
fetch(`api/v2/transfer/${getLimitMethod}`, {
method: "GET",
cache: "no-store"
})
.then(async (response) => {
if (!response.ok)
return;
const data = await response.text();
const globalLimit = Math.max((Number(data) / 1024), 0);
// Get torrents download limit
// And create slider
if (isGlobal) {
setupSlider(globalLimit, 10000);
}
else {
fetch(`api/v2/torrents/${getLimitMethod}`, {
method: "POST",
body: new URLSearchParams({
hashes: hashes.join("|")
})
})
.then(async (response) => {
if (!response.ok)
return;
const data = await response.json();
const firstLimit = Math.max(data[hashes[0]], 0);
const isAllFirstLimit = Object.values(data).every(value => value === firstLimit);
const limit = isAllFirstLimit ? Math.round(firstLimit / 1024) : 0;
setupSlider(limit, ((globalLimit > 0) ? globalLimit : 1000));
});
}
});
limitUpdateValue.focus();
});
</script> </script>
</body> </body>

View file

@ -6,10 +6,10 @@
<title>QBT_TR(Upload local torrent)QBT_TR[CONTEXT=HttpServer]</title> <title>QBT_TR(Upload local torrent)QBT_TR[CONTEXT=HttpServer]</title>
<link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/style.css?v=${CACHEID}" type="text/css">
<link rel="stylesheet" href="css/Window.css?v=${CACHEID}" type="text/css"> <link rel="stylesheet" href="css/Window.css?v=${CACHEID}" type="text/css">
<script src="scripts/localpreferences.js?v=${CACHEID}"></script> <script defer src="scripts/localpreferences.js?v=${CACHEID}"></script>
<script src="scripts/color-scheme.js?v=${CACHEID}"></script> <script defer src="scripts/color-scheme.js?v=${CACHEID}"></script>
<script src="scripts/download.js?v=${CACHEID}"></script> <script defer src="scripts/download.js?v=${CACHEID}"></script>
<script src="scripts/pathAutofill.js?v=${CACHEID}"></script> <script defer src="scripts/pathAutofill.js?v=${CACHEID}"></script>
</head> </head>
<body> <body>
@ -157,28 +157,30 @@
<script> <script>
"use strict"; "use strict";
let submitted = false; window.addEventListener("DOMContentLoaded", (event) => {
let submitted = false;
document.getElementById("uploadForm").addEventListener("submit", (event) => { document.getElementById("uploadForm").addEventListener("submit", (event) => {
document.getElementById("startTorrentHidden").value = document.getElementById("startTorrent").checked ? "false" : "true"; document.getElementById("startTorrentHidden").value = document.getElementById("startTorrent").checked ? "false" : "true";
document.getElementById("dlLimitHidden").value = Number(document.getElementById("dlLimitText").value) * 1024; document.getElementById("dlLimitHidden").value = Number(document.getElementById("dlLimitText").value) * 1024;
document.getElementById("upLimitHidden").value = Number(document.getElementById("upLimitText").value) * 1024; document.getElementById("upLimitHidden").value = Number(document.getElementById("upLimitText").value) * 1024;
document.getElementById("upload_spinner").style.display = "block"; document.getElementById("upload_spinner").style.display = "block";
submitted = true; submitted = true;
});
document.getElementById("upload_frame").addEventListener("load", (event) => {
if (submitted)
window.parent.qBittorrent.Client.closeFrameWindow(window);
});
const userAgent = (navigator.userAgentData?.platform ?? navigator.platform).toLowerCase();
if (userAgent.includes("ipad") || userAgent.includes("iphone") || (userAgent.includes("mac") && (navigator.maxTouchPoints > 1)))
document.getElementById("fileselect").accept = ".torrent";
window.qBittorrent.pathAutofill.attachPathAutofill();
}); });
document.getElementById("upload_frame").addEventListener("load", (event) => {
if (submitted)
window.parent.qBittorrent.Client.closeFrameWindow(window);
});
const userAgent = (navigator.userAgentData?.platform ?? navigator.platform).toLowerCase();
if (userAgent.includes("ipad") || userAgent.includes("iphone") || (userAgent.includes("mac") && (navigator.maxTouchPoints > 1)))
document.getElementById("fileselect").accept = ".torrent";
window.qBittorrent.pathAutofill.attachPathAutofill();
</script> </script>
</body> </body>