Skip to content

Commit 27cf0d0

Browse files
committed
netteForms.js: validates fucking HTML5 type 'number'
1 parent 90cdc20 commit 27cf0d0

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

src/assets/netteForms.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,12 @@ Nette.validateControl = function(elem, rules, onlyCheck, value) {
177177
return false;
178178
}
179179
}
180+
181+
if (!onlyCheck && elem.type === 'number' && !elem.validity.valid) {
182+
Nette.addError(elem, 'Please enter a valid value.');
183+
return false;
184+
}
185+
180186
return true;
181187
};
182188

@@ -292,6 +298,9 @@ Nette.validateRule = function(elem, op, arg, value) {
292298

293299
Nette.validators = {
294300
filled: function(elem, arg, val) {
301+
if (elem.type === 'number' && elem.validity.badInput) {
302+
return true;
303+
}
295304
return val !== '' && val !== false && val !== null
296305
&& (!Nette.isArray(val) || !!val.length)
297306
&& (!window.FileList || !(val instanceof window.FileList) || val.length);
@@ -337,14 +346,35 @@ Nette.validators = {
337346
},
338347

339348
minLength: function(elem, arg, val) {
349+
if (elem.type === 'number') {
350+
if (elem.validity.tooShort) {
351+
return false
352+
} else if (elem.validity.badInput) {
353+
return null;
354+
}
355+
}
340356
return val.length >= arg;
341357
},
342358

343359
maxLength: function(elem, arg, val) {
360+
if (elem.type === 'number') {
361+
if (elem.validity.tooLong) {
362+
return false
363+
} else if (elem.validity.badInput) {
364+
return null;
365+
}
366+
}
344367
return val.length <= arg;
345368
},
346369

347370
length: function(elem, arg, val) {
371+
if (elem.type === 'number') {
372+
if (elem.validity.tooShort || elem.validity.tooLong) {
373+
return false
374+
} else if (elem.validity.badInput) {
375+
return null;
376+
}
377+
}
348378
arg = Nette.isArray(arg) ? arg : [arg, arg];
349379
return (arg[0] === null || val.length >= arg[0]) && (arg[1] === null || val.length <= arg[1]);
350380
},
@@ -378,10 +408,16 @@ Nette.validators = {
378408
},
379409

380410
integer: function(elem, arg, val) {
411+
if (elem.type === 'number' && elem.validity.badInput) {
412+
return false;
413+
}
381414
return (/^-?[0-9]+$/).test(val);
382415
},
383416

384417
'float': function(elem, arg, val, value) {
418+
if (elem.type === 'number' && elem.validity.badInput) {
419+
return false;
420+
}
385421
val = val.replace(' ', '').replace(',', '.');
386422
if ((/^-?[0-9]*[.,]?[0-9]+$/).test(val)) {
387423
value.value = val;
@@ -391,14 +427,35 @@ Nette.validators = {
391427
},
392428

393429
min: function(elem, arg, val) {
430+
if (elem.type === 'number') {
431+
if (elem.validity.rangeUnderflow) {
432+
return false
433+
} else if (elem.validity.badInput) {
434+
return null;
435+
}
436+
}
394437
return Nette.validators.range(elem, [arg, null], val);
395438
},
396439

397440
max: function(elem, arg, val) {
441+
if (elem.type === 'number') {
442+
if (elem.validity.rangeOverflow) {
443+
return false
444+
} else if (elem.validity.badInput) {
445+
return null;
446+
}
447+
}
398448
return Nette.validators.range(elem, [null, arg], val);
399449
},
400450

401451
range: function(elem, arg, val) {
452+
if (elem.type === 'number') {
453+
if (elem.validity.rangeUnderflow || elem.validity.rangeOverflow) {
454+
return false
455+
} else if (elem.validity.badInput) {
456+
return null;
457+
}
458+
}
402459
return Nette.isArray(arg) ?
403460
((arg[0] === null || parseFloat(val) >= arg[0]) && (arg[1] === null || parseFloat(val) <= arg[1])) : null;
404461
},

0 commit comments

Comments
 (0)