Implemented validation for DateField and DateTimeField, uses a custom validation script, which currently need some work.

This commit is contained in:
James O'Toole
2015-02-15 04:27:06 +00:00
parent 4be20fe74d
commit cc156b1f84
2 changed files with 52 additions and 1 deletions
+32
View File
@@ -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 -1
View File
@@ -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)