Skip to content

Commit 4e9b083

Browse files
committed
netteForms: min/max/range can compare strings
1 parent 5bc038b commit 4e9b083

File tree

3 files changed

+62
-6
lines changed

3 files changed

+62
-6
lines changed

src/assets/netteForms.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -492,16 +492,25 @@
492492
},
493493

494494
min: function(elem, arg, val) {
495-
return arg === null || parseFloat(val) >= arg;
495+
if (Number.isFinite(arg)) {
496+
val = parseFloat(val);
497+
}
498+
return val >= arg;
496499
},
497500

498501
max: function(elem, arg, val) {
499-
return arg === null || parseFloat(val) <= arg;
502+
if (Number.isFinite(arg)) {
503+
val = parseFloat(val);
504+
}
505+
return val <= arg;
500506
},
501507

502508
range: function(elem, arg, val) {
503-
return Array.isArray(arg) ?
504-
((arg[0] === null || parseFloat(val) >= arg[0]) && (arg[1] === null || parseFloat(val) <= arg[1])) : null;
509+
if (!Array.isArray(arg)) {
510+
return null;
511+
}
512+
return (arg[0] === null || Nette.validators.min(elem, arg[0], val))
513+
&& (arg[1] === null || Nette.validators.max(elem, arg[1], val));
505514
},
506515

507516
submitted: function(elem) {

tests/netteForms/spec/Nette.validateRuleSpec.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ describe('Nette.getValue & validateRule', function() {
6464
expect(Nette.validateRule(el, 'min', -1000)).toBe(false);
6565
expect(Nette.validateRule(el, 'max', -2000)).toBe(false);
6666
expect(Nette.validateRule(el, 'max', -1000)).toBe(true);
67-
expect(Nette.validateRule(el, 'range', ['-2000', '-1000'])).toBe(true);
67+
expect(Nette.validateRule(el, 'range', [-2000, -1000])).toBe(true);
68+
expect(Nette.validateRule(el, 'range', ['-1200', '-1300'])).toBe(true);
6869
expect(Nette.validateRule(el, 'range', [10, null])).toBe(false);
6970

7071
el.value = '-12.5';
@@ -74,7 +75,8 @@ describe('Nette.getValue & validateRule', function() {
7475
expect(Nette.validateRule(el, 'min', -10)).toBe(false);
7576
expect(Nette.validateRule(el, 'max', -2000)).toBe(false);
7677
expect(Nette.validateRule(el, 'max', -10)).toBe(true);
77-
expect(Nette.validateRule(el, 'range', ['-12.6', '-12.4'])).toBe(true);
78+
expect(Nette.validateRule(el, 'range', [-12.6, -12.4])).toBe(true);
79+
expect(Nette.validateRule(el, 'range', ['-12.4', '-12.6'])).toBe(true);
7880
expect(Nette.validateRule(el, 'range', [-5, 10])).toBe(false);
7981
});
8082

tests/netteForms/spec/Nette.validatorsSpec.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,51 @@ describe('Nette.validators', function() {
2222
});
2323

2424

25+
it('min', function() {
26+
expect(Nette.validators.min(null, 0, '')).toBe(false);
27+
expect(Nette.validators.min(null, 0, 'foo')).toBe(false);
28+
expect(Nette.validators.min(null, 0, '0')).toBe(true);
29+
expect(Nette.validators.min(null, 0, '1')).toBe(true);
30+
expect(Nette.validators.min(null, 0, '-1')).toBe(false);
31+
expect(Nette.validators.min(null, 0, 0)).toBe(true);
32+
expect(Nette.validators.min(null, 0, 1)).toBe(true);
33+
expect(Nette.validators.min(null, 0, -1)).toBe(false);
34+
expect(Nette.validators.min(null, '2023-10-29', '2023-10-30')).toBe(true);
35+
expect(Nette.validators.min(null, '2023-10-29', '2023-10-28')).toBe(false);
36+
});
37+
38+
39+
it('max', function() {
40+
expect(Nette.validators.max(null, 0, '')).toBe(false);
41+
expect(Nette.validators.max(null, 0, 'foo')).toBe(false);
42+
expect(Nette.validators.max(null, 0, '0')).toBe(true);
43+
expect(Nette.validators.max(null, 0, '1')).toBe(false);
44+
expect(Nette.validators.max(null, 0, '-1')).toBe(true);
45+
expect(Nette.validators.max(null, 0, 0)).toBe(true);
46+
expect(Nette.validators.max(null, 0, 1)).toBe(false);
47+
expect(Nette.validators.max(null, 0, -1)).toBe(true);
48+
expect(Nette.validators.max(null, '2023-10-29', '2023-10-30')).toBe(false);
49+
expect(Nette.validators.max(null, '2023-10-29', '2023-10-28')).toBe(true);
50+
});
51+
52+
53+
it('range', function() {
54+
let el = document.createElement('input');
55+
56+
expect(Nette.validators.range(el, null, 0)).toBe(null);
57+
expect(Nette.validators.range(el, 'foo', 0)).toBe(null);
58+
expect(Nette.validators.range(el, ['0', null], 0)).toBe(true);
59+
expect(Nette.validators.range(el, ['1', null], 0)).toBe(false);
60+
expect(Nette.validators.range(el, [-1, 1], 0)).toBe(true);
61+
expect(Nette.validators.range(el, ['2023-10-29', '2023-10-31'], '2023-10-30')).toBe(true);
62+
expect(Nette.validators.range(el, ['2023-10-29', '2023-10-31'], '2023-10-28')).toBe(false);
63+
expect(Nette.validators.range(el, [null, '1'], 0)).toBe(true);
64+
expect(Nette.validators.range(el, ['10:30', '14:00'], '12:30')).toBe(true);
65+
expect(Nette.validators.range(el, ['10:30', '14:00'], '09:30')).toBe(false);
66+
expect(Nette.validators.range(el, ['14:00', '10:30'], '12:30')).toBe(false);
67+
});
68+
69+
2570
it('email', function() {
2671
expect(Nette.validators.email(null, null, '')).toBe(false);
2772
expect(Nette.validators.email(null, null, 'hello')).toBe(false);

0 commit comments

Comments
 (0)