mirror of
https://github.com/wassname/wtforms-parsleyjs.git
synced 2026-07-20 12:50:09 +08:00
Implemented validation for DateField and DateTimeField, uses a custom validation script, which currently need some work.
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
$(document).ready(function() {
|
||||
window.ParsleyValidator.addValidator('datefield', function (str, format) {
|
||||
/**
|
||||
* Modified version of micro-strptime.js.
|
||||
* https://github.com/cho45/micro-strptime.js
|
||||
*/
|
||||
if (!format) throw Error("Missing format");
|
||||
fds = {
|
||||
'%': '%',
|
||||
'A': '[a-z]+',
|
||||
'B': '[a-z]+',
|
||||
'Y': '[0-9]{4}',
|
||||
'm': '[0-9]{0,2}',
|
||||
'd': '[0-9]{0,2}',
|
||||
'H': '[0-9]{0,2}',
|
||||
'M': '[0-9]{0,2}',
|
||||
'S': '[0-9]{0,2}',
|
||||
's': '[0-9]+',
|
||||
'Z': 'UTC|Z|[+-][0-9][0-9]:?[0-9][0-9]',
|
||||
'I': '[0-9]{0,2}',
|
||||
'p': 'AM|PM'
|
||||
};
|
||||
// Create a regular expression from the format string, that matches a string of that format.
|
||||
var re = new RegExp(format.replace(/%(?:([a-zA-Z%])|('[^']+')|("[^"]+"))/g, function (_, a, b, c) {
|
||||
var fd = a || b || c;
|
||||
var d = fds[fd];
|
||||
if (!d) throw Error("Unknown format descripter: " + fd);
|
||||
return '(' + d + ')';
|
||||
}), 'i');
|
||||
return re.test(str);
|
||||
}, 32).addMessage('en', 'datefield', 'The input needs to be in the correct date format.')
|
||||
});
|
||||
@@ -20,7 +20,8 @@ from wtforms.fields import StringField as _StringField, BooleanField as _Boolean
|
||||
DecimalField as _DecimalField, IntegerField as _IntegerField, \
|
||||
FloatField as _FloatField, PasswordField as _PasswordField, \
|
||||
SelectField as _SelectField, TextAreaField as _TextAreaField, \
|
||||
RadioField as _RadioField
|
||||
RadioField as _RadioField, DateField as _DateField, \
|
||||
DateTimeField as _DateTimeField
|
||||
|
||||
|
||||
def parsley_kwargs(field, kwargs):
|
||||
@@ -39,6 +40,10 @@ def parsley_kwargs(field, kwargs):
|
||||
one. Do check if the behaviour suits your needs.
|
||||
"""
|
||||
new_kwargs = copy.deepcopy(kwargs)
|
||||
|
||||
if isinstance(field, DateField) or isinstance(field, DateTimeField):
|
||||
_date_kwargs(new_kwargs, field)
|
||||
|
||||
for vali in field.validators:
|
||||
if isinstance(vali, Email):
|
||||
_email_kwargs(new_kwargs)
|
||||
@@ -162,6 +167,9 @@ def _trigger_kwargs(kwargs, trigger=u'change'):
|
||||
def _message_kwargs(kwargs, message):
|
||||
kwargs[u'data-parsley-error-message'] = message
|
||||
|
||||
def _date_kwargs(kwargs, field):
|
||||
kwargs[u'data-parsley-datefield'] = field.format
|
||||
|
||||
class ParsleyInputMixin(Input):
|
||||
def __call__(self, field, **kwargs):
|
||||
kwargs = parsley_kwargs(field, kwargs)
|
||||
@@ -257,3 +265,14 @@ class TextAreaField(_TextAreaField):
|
||||
class SelectField(_SelectField):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(SelectField, self).__init__(widget=Select(), *args, **kwargs)
|
||||
|
||||
|
||||
class DateTimeField(_DateTimeField):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(DateTimeField, self).__init__(widget=TextInput(), *args, **kwargs)
|
||||
|
||||
|
||||
class DateField(_DateField):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(DateField, self).__init__(widget=TextInput(), *args, **kwargs)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user