WebUI: disallow number literals with zero fractions or dangling dots

Javascript treats them all the same as `Number`.
This commit is contained in:
Chocobo1
2025-08-26 17:21:22 +08:00
parent 86acc01b1a
commit acab056fe4
8 changed files with 21 additions and 20 deletions

View File

@@ -68,6 +68,7 @@ export default [
"Stylistic/quote-props": ["error", "consistent-as-needed"], "Stylistic/quote-props": ["error", "consistent-as-needed"],
"Stylistic/semi": "error", "Stylistic/semi": "error",
"Stylistic/spaced-comment": ["error", "always", { exceptions: ["*"] }], "Stylistic/spaced-comment": ["error", "always", { exceptions: ["*"] }],
"Unicorn/no-zero-fractions": "error",
"Unicorn/prefer-number-properties": "error" "Unicorn/prefer-number-properties": "error"
} }
} }

View File

@@ -1628,7 +1628,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
if (prop_h !== null) if (prop_h !== null)
prop_h = Number(prop_h) * Window.getSize().y; prop_h = Number(prop_h) * Window.getSize().y;
else else
prop_h = Window.getSize().y / 2.0; prop_h = Window.getSize().y / 2;
new MochaUI.Panel({ new MochaUI.Panel({
id: "propertiesPanel", id: "propertiesPanel",
title: "Panel", title: "Panel",

View File

@@ -340,7 +340,7 @@ window.qBittorrent.ContextMenu ??= (() => {
else else
there_are_f_l_piece_prio = true; there_are_f_l_piece_prio = true;
if (data["progress"] !== 1.0) // not downloaded if (data["progress"] !== 1) // not downloaded
all_are_downloaded = false; all_are_downloaded = false;
else if (data["super_seeding"] !== true) else if (data["super_seeding"] !== true)
all_are_super_seeding = false; all_are_super_seeding = false;

View File

@@ -1980,10 +1980,10 @@ window.qBittorrent.DynamicTable ??= (() => {
getFilteredAndSortedRows() { getFilteredAndSortedRows() {
const getSizeFilters = () => { 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 minSize = (window.qBittorrent.Search.searchSizeFilter.min > 0) ? (window.qBittorrent.Search.searchSizeFilter.min * Math.pow(1024, window.qBittorrent.Search.searchSizeFilter.minUnit)) : 0;
let maxSize = (window.qBittorrent.Search.searchSizeFilter.max > 0.00) ? (window.qBittorrent.Search.searchSizeFilter.max * Math.pow(1024, window.qBittorrent.Search.searchSizeFilter.maxUnit)) : 0.00; let maxSize = (window.qBittorrent.Search.searchSizeFilter.max > 0) ? (window.qBittorrent.Search.searchSizeFilter.max * Math.pow(1024, window.qBittorrent.Search.searchSizeFilter.maxUnit)) : 0;
if ((minSize > maxSize) && (maxSize > 0.00)) { if ((minSize > maxSize) && (maxSize > 0)) {
const tmp = minSize; const tmp = minSize;
minSize = maxSize; minSize = maxSize;
maxSize = tmp; maxSize = tmp;
@@ -2018,16 +2018,16 @@ window.qBittorrent.DynamicTable ??= (() => {
const seedsFilters = getSeedsFilters(); const seedsFilters = getSeedsFilters();
const searchInTorrentName = document.getElementById("searchInTorrentName").value === "names"; const searchInTorrentName = document.getElementById("searchInTorrentName").value === "names";
if (searchInTorrentName || (filterTerms.length > 0) || (window.qBittorrent.Search.searchSizeFilter.min > 0.00) || (window.qBittorrent.Search.searchSizeFilter.max > 0.00)) { if (searchInTorrentName || (filterTerms.length > 0) || (window.qBittorrent.Search.searchSizeFilter.min > 0) || (window.qBittorrent.Search.searchSizeFilter.max > 0)) {
for (const row of this.getRowValues()) { for (const row of this.getRowValues()) {
if (searchInTorrentName && !window.qBittorrent.Misc.containsAllTerms(row.full_data.fileName, searchTerms)) if (searchInTorrentName && !window.qBittorrent.Misc.containsAllTerms(row.full_data.fileName, searchTerms))
continue; continue;
if ((filterTerms.length > 0) && !window.qBittorrent.Misc.containsAllTerms(row.full_data.fileName, filterTerms)) if ((filterTerms.length > 0) && !window.qBittorrent.Misc.containsAllTerms(row.full_data.fileName, filterTerms))
continue; continue;
if ((sizeFilters.min > 0.00) && (row.full_data.fileSize < sizeFilters.min)) if ((sizeFilters.min > 0) && (row.full_data.fileSize < sizeFilters.min))
continue; continue;
if ((sizeFilters.max > 0.00) && (row.full_data.fileSize > sizeFilters.max)) if ((sizeFilters.max > 0) && (row.full_data.fileSize > sizeFilters.max))
continue; continue;
if ((seedsFilters.min > 0) && (row.full_data.nbSeeders < seedsFilters.min)) if ((seedsFilters.min > 0) && (row.full_data.nbSeeders < seedsFilters.min))
continue; continue;

View File

@@ -131,7 +131,7 @@ window.qBittorrent.FileTree ??= (() => {
} }
calculateRemaining() { calculateRemaining() {
this.remaining = this.isIgnored() ? 0 : (this.size * (1.0 - (this.progress / 100))); this.remaining = this.isIgnored() ? 0 : (this.size * (1 - (this.progress / 100)));
} }
serialize() { serialize() {

View File

@@ -80,9 +80,9 @@ window.qBittorrent.Search ??= (() => {
max: 0 max: 0
}; };
const searchSizeFilter = { const searchSizeFilter = {
min: 0.00, min: 0,
minUnit: 2, // B = 0, KiB = 1, MiB = 2, GiB = 3, TiB = 4, PiB = 5, EiB = 6 minUnit: 2, // B = 0, KiB = 1, MiB = 2, GiB = 3, TiB = 4, PiB = 5, EiB = 6
max: 0.00, max: 0,
maxUnit: 3 maxUnit: 3
}; };
@@ -789,9 +789,9 @@ window.qBittorrent.Search ??= (() => {
document.getElementById("searchMinSeedsFilter").value = searchSeedsFilter.min; document.getElementById("searchMinSeedsFilter").value = searchSeedsFilter.min;
document.getElementById("searchMaxSeedsFilter").value = searchSeedsFilter.max; document.getElementById("searchMaxSeedsFilter").value = searchSeedsFilter.max;
searchSizeFilter.min = 0.00; searchSizeFilter.min = 0;
searchSizeFilter.minUnit = 2; // B = 0, KiB = 1, MiB = 2, GiB = 3, TiB = 4, PiB = 5, EiB = 6 searchSizeFilter.minUnit = 2; // B = 0, KiB = 1, MiB = 2, GiB = 3, TiB = 4, PiB = 5, EiB = 6
searchSizeFilter.max = 0.00; searchSizeFilter.max = 0;
searchSizeFilter.maxUnit = 3; searchSizeFilter.maxUnit = 3;
document.getElementById("searchMinSizeFilter").value = searchSizeFilter.min; document.getElementById("searchMinSizeFilter").value = searchSizeFilter.min;
document.getElementById("searchMinSizePrefix").value = searchSizeFilter.minUnit; document.getElementById("searchMinSizePrefix").value = searchSizeFilter.minUnit;

View File

@@ -84,7 +84,7 @@
return; return;
const shareLimit = getSelectedRadioValue("shareLimit"); const shareLimit = getSelectedRadioValue("shareLimit");
let ratioLimitValue = 0.00; let ratioLimitValue = 0;
let seedingTimeLimitValue = 0; let seedingTimeLimitValue = 0;
let inactiveSeedingTimeLimitValue = 0; let inactiveSeedingTimeLimitValue = 0;
let shareLimitActionValue = "Default"; let shareLimitActionValue = "Default";

View File

@@ -68,11 +68,11 @@ test("Test toFixedPointString()", () => {
expect(toFixedPointString(-35.855, 3)).toBe("-35.855"); expect(toFixedPointString(-35.855, 3)).toBe("-35.855");
expect(toFixedPointString(-35.855, 4)).toBe("-35.8550"); expect(toFixedPointString(-35.855, 4)).toBe("-35.8550");
expect(toFixedPointString(100.00, 0)).toBe("100"); expect(toFixedPointString(100, 0)).toBe("100");
expect(toFixedPointString(100.00, 1)).toBe("100.0"); expect(toFixedPointString(100, 1)).toBe("100.0");
expect(toFixedPointString(100.00, 2)).toBe("100.00"); expect(toFixedPointString(100, 2)).toBe("100.00");
expect(toFixedPointString(-100.00, 0)).toBe("-100"); expect(toFixedPointString(-100, 0)).toBe("-100");
expect(toFixedPointString(-100.00, 1)).toBe("-100.0"); expect(toFixedPointString(-100, 1)).toBe("-100.0");
expect(toFixedPointString(-100.00, 2)).toBe("-100.00"); expect(toFixedPointString(-100, 2)).toBe("-100.00");
}); });