|
@@ -1,7 +1,7 @@
|
|
# -*- coding: utf-8 -*-
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
"""
|
|
- flaskbb.utils.wtforms
|
|
|
|
- ~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
+ flaskbb.utils.widgets
|
|
|
|
+ ~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
Additional widgets for wtforms
|
|
Additional widgets for wtforms
|
|
|
|
|
|
@@ -12,7 +12,7 @@ from datetime import datetime
|
|
from wtforms.widgets.core import Select, HTMLString, html_params
|
|
from wtforms.widgets.core import Select, HTMLString, html_params
|
|
|
|
|
|
|
|
|
|
-class SelectDateWidget(object):
|
|
|
|
|
|
+class SelectBirthdayWidget(object):
|
|
"""Renders a DateTime field with 3 selects.
|
|
"""Renders a DateTime field with 3 selects.
|
|
For more information see: http://stackoverflow.com/a/14664504
|
|
For more information see: http://stackoverflow.com/a/14664504
|
|
"""
|
|
"""
|
|
@@ -28,41 +28,62 @@ class SelectDateWidget(object):
|
|
}
|
|
}
|
|
|
|
|
|
def __init__(self, years=range(1930, datetime.utcnow().year + 1)):
|
|
def __init__(self, years=range(1930, datetime.utcnow().year + 1)):
|
|
- super(SelectDateWidget, self).__init__()
|
|
|
|
|
|
+ """Initialzes the widget.
|
|
|
|
+
|
|
|
|
+ :param years: The min year which should be chooseable.
|
|
|
|
+ Defatuls to ``1930``.
|
|
|
|
+ """
|
|
|
|
+ super(SelectBirthdayWidget, self).__init__()
|
|
self.FORMAT_CHOICES['%Y'] = [(x, str(x)) for x in years]
|
|
self.FORMAT_CHOICES['%Y'] = [(x, str(x)) for x in years]
|
|
|
|
|
|
def __call__(self, field, **kwargs):
|
|
def __call__(self, field, **kwargs):
|
|
field_id = kwargs.pop('id', field.id)
|
|
field_id = kwargs.pop('id', field.id)
|
|
html = []
|
|
html = []
|
|
allowed_format = ['%d', '%m', '%Y']
|
|
allowed_format = ['%d', '%m', '%Y']
|
|
|
|
+ surrounded_div = kwargs.get('surrounded_div', None)
|
|
|
|
|
|
- for format in field.format.split():
|
|
|
|
- if (format in allowed_format):
|
|
|
|
- choices = self.FORMAT_CHOICES[format]
|
|
|
|
- id_suffix = format.replace('%', '-')
|
|
|
|
|
|
+ for date_format in field.format.split():
|
|
|
|
+ if (date_format in allowed_format):
|
|
|
|
+ choices = self.FORMAT_CHOICES[date_format]
|
|
|
|
+ id_suffix = date_format.replace('%', '-')
|
|
id_current = field_id + id_suffix
|
|
id_current = field_id + id_suffix
|
|
|
|
|
|
- kwargs['class'] = self.FORMAT_CLASSES[format]
|
|
|
|
|
|
+ select_class = "{} {}".format(self.FORMAT_CLASSES[date_format],
|
|
|
|
+ kwargs['class'])
|
|
|
|
+ kwargs['class'] = select_class
|
|
|
|
+
|
|
try:
|
|
try:
|
|
del kwargs['placeholder']
|
|
del kwargs['placeholder']
|
|
- except:
|
|
|
|
|
|
+ except KeyError:
|
|
pass
|
|
pass
|
|
|
|
|
|
|
|
+ if surrounded_div is not None:
|
|
|
|
+ html.append("<div class='%s'>" % surrounded_div)
|
|
|
|
+
|
|
html.append('<select %s>' % html_params(name=field.name,
|
|
html.append('<select %s>' % html_params(name=field.name,
|
|
id=id_current,
|
|
id=id_current,
|
|
**kwargs))
|
|
**kwargs))
|
|
|
|
|
|
if field.data:
|
|
if field.data:
|
|
- current_value = int(field.data.strftime(format))
|
|
|
|
|
|
+ current_value = int(field.data.strftime(date_format))
|
|
else:
|
|
else:
|
|
current_value = None
|
|
current_value = None
|
|
|
|
|
|
for value, label in choices:
|
|
for value, label in choices:
|
|
selected = (value == current_value)
|
|
selected = (value == current_value)
|
|
|
|
+
|
|
|
|
+ # Defaults to blank
|
|
|
|
+ if value == 1 or value == 1930:
|
|
|
|
+ html.append(Select.render_option("None", " ", selected))
|
|
|
|
+
|
|
html.append(Select.render_option(value, label, selected))
|
|
html.append(Select.render_option(value, label, selected))
|
|
|
|
+
|
|
html.append('</select>')
|
|
html.append('</select>')
|
|
|
|
+
|
|
|
|
+ if surrounded_div is not None:
|
|
|
|
+ html.append("</div>")
|
|
else:
|
|
else:
|
|
- html.append(format)
|
|
|
|
|
|
+ html.append(date_format)
|
|
html.append(
|
|
html.append(
|
|
"""<input type="hidden" value="{}" {}></input>""".format(
|
|
"""<input type="hidden" value="{}" {}></input>""".format(
|
|
html_params(name=field.name, id=id_current, **kwargs)))
|
|
html_params(name=field.name, id=id_current, **kwargs)))
|