Skip to content

Commit c8eaab9

Browse files
author
matthewcsimpson
committed
pr feedback
1 parent 2b6f091 commit c8eaab9

5 files changed

Lines changed: 114 additions & 12 deletions

File tree

Dist/Functional/RangeSlider.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,15 @@ var __WT_RANGE_SLIDER_CORE = (function () {
5151

5252
function constrainLeftValue(rawValue, rightValueStr, minDifference) {
5353
return Math.min(
54-
parseFloat(rawValue),
55-
parseFloat(rightValueStr) - minDifference,
54+
Number(rawValue),
55+
Number(rightValueStr) - minDifference,
5656
);
5757
}
5858

5959
function constrainRightValue(rawValue, leftValueStr, minDifference) {
6060
return Math.max(
61-
parseFloat(rawValue),
62-
parseFloat(leftValueStr) + minDifference,
61+
Number(rawValue),
62+
Number(leftValueStr) + minDifference,
6363
);
6464
}
6565

Dist/Functional/RangeSliderSimple.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ var __WT_RANGE_SLIDER_SIMPLE_CORE = (function () {
4747

4848
function constrainLeftValue(rawValue, rightValueStr, minDifference) {
4949
return Math.min(
50-
parseFloat(rawValue),
51-
parseFloat(rightValueStr) - minDifference,
50+
Number(rawValue),
51+
Number(rightValueStr) - minDifference,
5252
);
5353
}
5454

5555
function constrainRightValue(rawValue, leftValueStr, minDifference) {
5656
return Math.max(
57-
parseFloat(rawValue),
58-
parseFloat(leftValueStr) + minDifference,
57+
Number(rawValue),
58+
Number(leftValueStr) + minDifference,
5959
);
6060
}
6161

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,19 @@ Multiple Scripts: Add as many scripts as you need to your project by referencing
7979
<script src="https://cdn.jsdelivr.net/gh/TheCodeRaccoons/webtricks@1/dist/Functional/FormCheck.min.js"></script>
8080
```
8181

82-
**Range sliders:** each script is **self-contained** (one tag). Use **`RangeSlider.js`** for custom thumbs or **`RangeSliderSimple.js`** for native thumbs only. Use jsDelivr (not raw `githubusercontent.com`, which often serves `text/plain` and blocks execution).
82+
**Range sliders:** each script is **self-contained** (one tag). Use **`RangeSlider.js`** for custom thumbs or **`RangeSliderSimple.js`** for native thumbs only. Use jsDelivr (not raw `githubusercontent.com`, which often serves `text/plain` and blocks execution). The URLs below use **`@1`**, same as the other jsDelivr examples in this README—**not `@main`**, so embeds stay on a stable major ref.
8383

8484
```
8585
<script src="https://cdn.jsdelivr.net/gh/TheCodeRaccoons/WebTricks@1/Dist/Functional/RangeSlider.js"></script>
8686
```
8787

88-
Native-thumb variant (`RangeSliderSimple` is **1.0.0** in source; pin further with a [release tag](https://github.com/TheCodeRaccoons/WebTricks/releases) or commit hash if you need an exact file):
88+
Native-thumb variant (`RangeSliderSimple` is **1.0.0** in source):
8989

9090
```
9191
<script src="https://cdn.jsdelivr.net/gh/TheCodeRaccoons/WebTricks@1/Dist/Functional/RangeSliderSimple.js"></script>
9292
```
9393

94-
Prefer **`@1`**, a **semver release tag** (e.g. `@v1.0.0`), or a **commit SHA** over **`@main`** for production embeds so the script URL does not move unexpectedly.
94+
For a **stricter** pin, use a [release tag](https://github.com/TheCodeRaccoons/WebTricks/releases) (e.g. `@v1.1.0` for RangeSlider, `@v1.0.0` for RangeSliderSimple) or a **commit SHA**.
9595

9696
If a page uses **both** slider types, you may include **both** scripts; they use separate attribute namespaces (`wt-rangeslider-*` vs `wt-rangeslidersimple-*`).
9797

__tests__/RangeSlider.test.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,53 @@ describe('RangeSlider', () => {
4848
expect(window.webtricks.some((e) => e.RangeSlider)).toBe(true);
4949
});
5050

51+
describe('constraint numeric parsing (integers and decimals)', () => {
52+
test('integer string handles setRange without truncation', () => {
53+
mountRangeSlider();
54+
const wrapper = document.querySelector(
55+
'[wt-rangeslider-element="slider-wrapper"]',
56+
);
57+
const rs = new RangeSlider(wrapper);
58+
rs.setRange('33', '77');
59+
const left = wrapper.querySelector(
60+
'[wt-rangeslider-element="input-left"]',
61+
);
62+
const right = wrapper.querySelector(
63+
'[wt-rangeslider-element="input-right"]',
64+
);
65+
expect(left.value).toBe('33');
66+
expect(right.value).toBe('77');
67+
});
68+
69+
test('decimal string handles keep fractional precision when constraining', () => {
70+
document.body.innerHTML = `
71+
<div wt-rangeslider-element="slider-wrapper">
72+
<div wt-rangeslider-element="slider"
73+
wt-rangeslider-min="0"
74+
wt-rangeslider-max="10"
75+
wt-rangeslider-steps="0.1"
76+
wt-rangeslider-mindifference="0.2">
77+
<div wt-rangeslider-element="range"></div>
78+
<div wt-rangeslider-element="thumb-left"></div>
79+
<div wt-rangeslider-element="thumb-right"></div>
80+
<input type="range" wt-rangeslider-element="input-left" />
81+
<input type="range" wt-rangeslider-element="input-right" />
82+
</div>
83+
</div>
84+
`;
85+
const wrapper = document.querySelector(
86+
'[wt-rangeslider-element="slider-wrapper"]',
87+
);
88+
const rs = new RangeSlider(wrapper);
89+
rs.setTo('2.5');
90+
rs.setFrom('2.35');
91+
const left = wrapper.querySelector(
92+
'[wt-rangeslider-element="input-left"]',
93+
);
94+
expect(left.value).toBe('2.3');
95+
});
96+
});
97+
5198
test('decimal mindifference constrains without parseInt truncation', () => {
5299
document.body.innerHTML = `
53100
<div wt-rangeslider-element="slider-wrapper">

__tests__/RangeSliderSimple.test.js

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,62 @@ describe('RangeSliderSimple', () => {
6767
expect(window.webtricks.some((e) => e.RangeSliderSimple)).toBe(true);
6868
});
6969

70-
test('integer step and minDifference still constrain (parseFloat handles whole numbers)', () => {
70+
describe('constraint numeric parsing (supports integers and decimals, not parseInt truncation)', () => {
71+
test('integer string handles setRange without truncation', () => {
72+
mountSlider();
73+
const wrapper = document.querySelector(
74+
'[wt-rangeslidersimple-element="slider-wrapper"]',
75+
);
76+
const instance = new RangeSliderSimple(wrapper);
77+
const left = wrapper.querySelector(
78+
'[wt-rangeslidersimple-element="input-left"]',
79+
);
80+
const right = wrapper.querySelector(
81+
'[wt-rangeslidersimple-element="input-right"]',
82+
);
83+
84+
instance.setRange('33', '77');
85+
86+
expect(left.value).toBe('33');
87+
expect(right.value).toBe('77');
88+
});
89+
90+
test('decimal string handles keep fractional precision when constraining', () => {
91+
document.body.innerHTML = `
92+
<div wt-rangeslidersimple-element="slider-wrapper">
93+
<div wt-rangeslidersimple-element="slider"
94+
wt-rangeslidersimple-min="0"
95+
wt-rangeslidersimple-max="10"
96+
wt-rangeslidersimple-steps="0.1"
97+
wt-rangeslidersimple-mindifference="0.2">
98+
<input type="range" wt-rangeslidersimple-element="input-left" />
99+
<input type="range" wt-rangeslidersimple-element="input-right" />
100+
</div>
101+
</div>
102+
`;
103+
const wrapper = document.querySelector(
104+
'[wt-rangeslidersimple-element="slider-wrapper"]',
105+
);
106+
const instance = new RangeSliderSimple(wrapper);
107+
108+
instance.setTo('2.5');
109+
instance.setFrom('2.35');
110+
111+
// min(2.35, 2.5 - 0.2) = 2.3 — parseInt would wrongly use min(2, 2.3) = 2
112+
expect(
113+
wrapper.querySelector(
114+
'[wt-rangeslidersimple-element="input-left"]',
115+
).value,
116+
).toBe('2.3');
117+
expect(
118+
wrapper.querySelector(
119+
'[wt-rangeslidersimple-element="input-right"]',
120+
).value,
121+
).toBe('2.5');
122+
});
123+
});
124+
125+
test('integer step and minDifference still constrain (Number handles whole numbers)', () => {
71126
mountSlider();
72127
const wrapper = document.querySelector(
73128
'[wt-rangeslidersimple-element="slider-wrapper"]',

0 commit comments

Comments
 (0)