diff --git a/src/webui/www/private/css/style.css b/src/webui/www/private/css/style.css index 4962a1667..3540cae2d 100644 --- a/src/webui/www/private/css/style.css +++ b/src/webui/www/private/css/style.css @@ -418,50 +418,10 @@ a.propButton img { /* Sliders */ .slider { - clear: both; font-size: 12px; font-weight: bold; - margin-bottom: 15px; + margin: 4px; position: relative; - width: 400px; -} - -.sliderWrapper { - font-size: 1px; - height: 9px; - line-height: 1px; - position: relative; - width: 422px; -} - -.sliderarea { - background: #f2f2f2 url("../images/slider-area.gif") repeat-x; - border: 1px solid #a3a3a3; - border-bottom: 1px solid #cccccc; - border-left: 1px solid #cccccc; - font-size: 1px; - height: 7px; - left: 0; - line-height: 1px; - overflow: hidden; - padding: 0; - position: absolute; - top: 0; - width: 420px; -} - -.sliderknob { - background: url("../images/knob.gif") no-repeat; - cursor: pointer; - font-size: 1px; - height: 9px; - left: 0; - line-height: 1px; - overflow: hidden; - position: absolute; - top: 0; - width: 19px; - z-index: 2; } .update { diff --git a/src/webui/www/private/downloadlimit.html b/src/webui/www/private/downloadlimit.html index 4b313ed83..a2155cbb4 100644 --- a/src/webui/www/private/downloadlimit.html +++ b/src/webui/www/private/downloadlimit.html @@ -5,9 +5,6 @@ QBT_TR(Torrent Download Speed Limiting)QBT_TR[CONTEXT=TransferListWidget] - - - @@ -15,75 +12,23 @@
-
-
- - - QBT_TR(KiB/s)QBT_TR[CONTEXT=SpeedLimitDialog] +
+
+ + + QBT_TR(KiB/s)QBT_TR[CONTEXT=SpeedLimitDialog]
-
-
-
-
-
+
- +
diff --git a/src/webui/www/private/scripts/speedslider.js b/src/webui/www/private/scripts/speedslider.js index f2c96f66a..973fe8c93 100644 --- a/src/webui/www/private/scripts/speedslider.js +++ b/src/webui/www/private/scripts/speedslider.js @@ -28,222 +28,157 @@ "use strict"; -MochaUI.extend({ - addUpLimitSlider: (hashes) => { - if (document.getElementById("uplimitSliderarea")) { - // Get global upload limit - fetch("api/v2/transfer/uploadLimit", { - method: "GET", - cache: "no-store" +window.qBittorrent ??= {}; +window.qBittorrent.SpeedSlider ??= (() => { + const exports = () => { + return { + setup: setup, + setLimit: setLimit, + }; + }; + + const hashes = new URLSearchParams(window.location.search).get("hashes").split("|"); + + const setup = (type) => { + window.addEventListener("keydown", (event) => { + switch (event.key) { + case "Enter": + event.preventDefault(); + document.getElementById("applyButton").click(); + break; + case "Escape": + event.preventDefault(); + window.parent.qBittorrent.Client.closeFrameWindow(window); + break; + } + }); + + const method = type === "upload" ? "uploadLimit" : "downloadLimit"; + + // Get global upload limit + fetch(`api/v2/transfer/${method}`, { + method: "GET", + cache: "no-store" + }) + .then(async (response) => { + if (!response.ok) + return; + + const data = await response.text(); + + let maximum = 500; + const tmp = Number(data); + if (tmp > 0) { + maximum = tmp / 1024.0; + } + else { + if (hashes[0] === "global") + maximum = 10000; + else + maximum = 1000; + } + + // Get torrents download limit + // And create slider + if (hashes[0] === "global") { + let limit = maximum; + if (limit < 0) + limit = 0; + maximum = 10000; + + setupSlider(Math.round(limit), maximum); + } + else { + fetch(`api/v2/torrents/${method}`, { + method: "POST", + body: new URLSearchParams({ + hashes: hashes.join("|") + }) + }) + .then(async (response) => { + if (!response.ok) + return; + + const data = await response.json(); + + let limit = data[hashes[0]]; + for (const key in data) { + if (limit !== data[key]) { + limit = 0; + break; + } + } + if (limit < 0) + limit = 0; + + setupSlider(Math.round(limit / 1024), maximum); + }); + } + }); + }; + + const setupSlider = (limit, maximum) => { + const input = document.getElementById("limitSliderInput"); + input.setAttribute("max", maximum); + input.setAttribute("min", 0); + input.value = limit; + input.addEventListener("input", (event) => { + const pos = Number(event.target.value); + if (pos > 0) { + document.getElementById("limitUpdatevalue").value = pos; + document.getElementById("limitUnit").style.visibility = "visible"; + } + else { + document.getElementById("limitUpdatevalue").value = "∞"; + document.getElementById("limitUnit").style.visibility = "hidden"; + } + }); + // Set default value + if (limit === 0) { + document.getElementById("limitUpdatevalue").value = "∞"; + document.getElementById("limitUnit").style.visibility = "hidden"; + } + else { + document.getElementById("limitUpdatevalue").value = limit; + document.getElementById("limitUnit").style.visibility = "visible"; + } + }; + + const setLimit = (type) => { + const limit = Number(document.getElementById("limitUpdatevalue").value) * 1024; + const method = type === "upload" ? "setUploadLimit" : "setDownloadLimit"; + if (hashes[0] === "global") { + fetch(`api/v2/transfer/${method}`, { + method: "POST", + body: new URLSearchParams({ + limit: limit + }) }) - .then(async (response) => { + .then((response) => { if (!response.ok) return; - const data = await response.text(); - - let maximum = 500; - const tmp = Number(data); - if (tmp > 0) { - maximum = tmp / 1024.0; - } - else { - if (hashes[0] === "global") - maximum = 10000; - else - maximum = 1000; - } - - // Get torrents upload limit - // And create slider - if (hashes[0] === "global") { - let up_limit = maximum; - if (up_limit < 0) - up_limit = 0; - maximum = 10000; - new Slider(document.getElementById("uplimitSliderarea"), document.getElementById("uplimitSliderknob"), { - steps: maximum, - offset: 0, - initialStep: Math.round(up_limit), - onChange: (pos) => { - if (pos > 0) { - document.getElementById("uplimitUpdatevalue").value = pos; - document.getElementById("upLimitUnit").style.visibility = "visible"; - } - else { - document.getElementById("uplimitUpdatevalue").value = "∞"; - document.getElementById("upLimitUnit").style.visibility = "hidden"; - } - } - }); - // Set default value - if (up_limit === 0) { - document.getElementById("uplimitUpdatevalue").value = "∞"; - document.getElementById("upLimitUnit").style.visibility = "hidden"; - } - else { - document.getElementById("uplimitUpdatevalue").value = Math.round(up_limit); - document.getElementById("upLimitUnit").style.visibility = "visible"; - } - } - else { - fetch("api/v2/torrents/uploadLimit", { - method: "POST", - body: new URLSearchParams({ - hashes: hashes.join("|") - }) - }) - .then(async (response) => { - if (!response.ok) - return; - - const data = await response.json(); - - let up_limit = data[hashes[0]]; - for (const key in data) { - if (up_limit !== data[key]) { - up_limit = 0; - break; - } - } - if (up_limit < 0) - up_limit = 0; - new Slider(document.getElementById("uplimitSliderarea"), document.getElementById("uplimitSliderknob"), { - steps: maximum, - offset: 0, - initialStep: Math.round(up_limit / 1024), - onChange: (pos) => { - if (pos > 0) { - document.getElementById("uplimitUpdatevalue").value = pos; - document.getElementById("upLimitUnit").style.visibility = "visible"; - } - else { - document.getElementById("uplimitUpdatevalue").value = "∞"; - document.getElementById("upLimitUnit").style.visibility = "hidden"; - } - } - }); - // Set default value - if (up_limit === 0) { - document.getElementById("uplimitUpdatevalue").value = "∞"; - document.getElementById("upLimitUnit").style.visibility = "hidden"; - } - else { - document.getElementById("uplimitUpdatevalue").value = Math.round(up_limit / 1024); - document.getElementById("upLimitUnit").style.visibility = "visible"; - } - }); - } + window.parent.updateMainData(); + window.parent.qBittorrent.Client.closeFrameWindow(window); }); } - }, - - addDlLimitSlider: (hashes) => { - if (document.getElementById("dllimitSliderarea")) { - // Get global upload limit - fetch("api/v2/transfer/downloadLimit", { - method: "GET", - cache: "no-store" + else { + fetch(`api/v2/torrents/${method}`, { + method: "POST", + body: new URLSearchParams({ + hashes: hashes.join("|"), + limit: limit + }) }) - .then(async (response) => { + .then((response) => { if (!response.ok) return; - const data = await response.text(); - - let maximum = 500; - const tmp = Number(data); - if (tmp > 0) { - maximum = tmp / 1024.0; - } - else { - if (hashes[0] === "global") - maximum = 10000; - else - maximum = 1000; - } - - // Get torrents download limit - // And create slider - if (hashes[0] === "global") { - let dl_limit = maximum; - if (dl_limit < 0) - dl_limit = 0; - maximum = 10000; - new Slider(document.getElementById("dllimitSliderarea"), document.getElementById("dllimitSliderknob"), { - steps: maximum, - offset: 0, - initialStep: Math.round(dl_limit), - onChange: (pos) => { - if (pos > 0) { - document.getElementById("dllimitUpdatevalue").value = pos; - document.getElementById("dlLimitUnit").style.visibility = "visible"; - } - else { - document.getElementById("dllimitUpdatevalue").value = "∞"; - document.getElementById("dlLimitUnit").style.visibility = "hidden"; - } - } - }); - // Set default value - if (dl_limit === 0) { - document.getElementById("dllimitUpdatevalue").value = "∞"; - document.getElementById("dlLimitUnit").style.visibility = "hidden"; - } - else { - document.getElementById("dllimitUpdatevalue").value = Math.round(dl_limit); - document.getElementById("dlLimitUnit").style.visibility = "visible"; - } - } - else { - fetch("api/v2/torrents/downloadLimit", { - method: "POST", - body: new URLSearchParams({ - hashes: hashes.join("|") - }) - }) - .then(async (response) => { - if (!response.ok) - return; - - const data = await response.json(); - - let dl_limit = data[hashes[0]]; - for (const key in data) { - if (dl_limit !== data[key]) { - dl_limit = 0; - break; - } - } - if (dl_limit < 0) - dl_limit = 0; - new Slider(document.getElementById("dllimitSliderarea"), document.getElementById("dllimitSliderknob"), { - steps: maximum, - offset: 0, - initialStep: Math.round(dl_limit / 1024), - onChange: (pos) => { - if (pos > 0) { - document.getElementById("dllimitUpdatevalue").value = pos; - document.getElementById("dlLimitUnit").style.visibility = "visible"; - } - else { - document.getElementById("dllimitUpdatevalue").value = "∞"; - document.getElementById("dlLimitUnit").style.visibility = "hidden"; - } - } - }); - // Set default value - if (dl_limit === 0) { - document.getElementById("dllimitUpdatevalue").value = "∞"; - document.getElementById("dlLimitUnit").style.visibility = "hidden"; - } - else { - document.getElementById("dllimitUpdatevalue").value = Math.round(dl_limit / 1024); - document.getElementById("dlLimitUnit").style.visibility = "visible"; - } - }); - } + window.parent.qBittorrent.Client.closeFrameWindow(window); }); } - } -}); + }; + + return exports(); +})(); +Object.freeze(window.qBittorrent.SpeedSlider); diff --git a/src/webui/www/private/uploadlimit.html b/src/webui/www/private/uploadlimit.html index fb60da531..6c1c08509 100644 --- a/src/webui/www/private/uploadlimit.html +++ b/src/webui/www/private/uploadlimit.html @@ -5,9 +5,6 @@ QBT_TR(Torrent Upload Speed Limiting)QBT_TR[CONTEXT=TransferListWidget] - - - @@ -15,75 +12,23 @@
-
-
- - - QBT_TR(KiB/s)QBT_TR[CONTEXT=SpeedLimitDialog] +
+
+ + + QBT_TR(KiB/s)QBT_TR[CONTEXT=SpeedLimitDialog]
-
-
-
-
-
+
- +