Skip to content

Commit

Permalink
Simplify field type and field attribute mappings
Browse files Browse the repository at this point in the history
  • Loading branch information
treyhunner authored and tuxcanfly committed Sep 23, 2013
1 parent e73a97d commit 374aa9d
Showing 1 changed file with 25 additions and 18 deletions.
43 changes: 25 additions & 18 deletions parsley/decorators.py
Expand Up @@ -3,35 +3,42 @@
from django import forms


FIELD_TYPES = [
(forms.URLField, "url"),
(forms.EmailField, "email"),
(forms.IntegerField, "digits"),
(forms.DecimalField, "number"),
(forms.FloatField, "number"),
]


FIELD_ATTRS = [
("min_length", "minlength"),
("max_length", "maxlength"),
("min_value", "min"),
("max_value", "max"),
]


def update_widget_attrs(field):
attrs = field.widget.attrs
if field.required:
attrs["data-required"] = "true"
if isinstance(field, forms.URLField):
attrs["data-type"] = "url"
if isinstance(field, forms.EmailField):
attrs["data-type"] = "email"
if isinstance(field, forms.IntegerField):
attrs["data-type"] = "digits"
if isinstance(field, forms.DecimalField):
attrs["data-type"] = "number"
if isinstance(field, forms.FloatField):
attrs["data-type"] = "number"
if isinstance(field, forms.RegexField):
attrs.update({"data-regexp": field.regex.pattern})
if field.regex.flags & re.IGNORECASE:
attrs.update({"data-regexp-flag": "i"})
if isinstance(field, forms.MultiValueField):
for subfield in field.fields:
update_widget_attrs(subfield)
if hasattr(field, "max_length") and field.max_length:
attrs["data-maxlength"] = field.max_length
if hasattr(field, "min_length") and field.min_length:
attrs["data-minlength"] = field.min_length
if hasattr(field, 'min_value') and field.min_value:
attrs['data-min'] = field.min_value
if hasattr(field, 'max_value') and field.max_value:
attrs['data-max'] = field.max_value
# Set data-* attributes for parsley based on Django field attributes
for attr, data_attr, in FIELD_ATTRS:
if getattr(field, attr, None):
attrs["data-{0}".format(data_attr)] = getattr(field, attr)
# Set data-type attribute based on Django field instance type
for klass, field_type in FIELD_TYPES:
if isinstance(field, klass):
attrs["data-type"] = field_type


def parsleyfy(klass):
Expand Down

0 comments on commit 374aa9d

Please sign in to comment.