Commit e78e6e1d authored by Paul Brown's avatar Paul Brown

move 'data-date-format' to form_widget_args and allow overriding hardcoded kwargs

parent ed7a1351
...@@ -7,6 +7,10 @@ from flask.ext.admin._compat import text_type, as_unicode ...@@ -7,6 +7,10 @@ from flask.ext.admin._compat import text_type, as_unicode
from . import widgets as admin_widgets from . import widgets as admin_widgets
"""
An understanding of WTForms's Custom Widgets is helpful for understanding this code: http://wtforms.simplecodes.com/docs/0.6.2/widgets.html#custom-widgets
"""
__all__ = ['DateTimeField', 'TimeField', 'Select2Field', 'Select2TagsField'] __all__ = ['DateTimeField', 'TimeField', 'Select2Field', 'Select2TagsField']
class DateTimeField(fields.DateTimeField): class DateTimeField(fields.DateTimeField):
...@@ -14,7 +18,7 @@ class DateTimeField(fields.DateTimeField): ...@@ -14,7 +18,7 @@ class DateTimeField(fields.DateTimeField):
Allows modifying the datetime format of a DateTimeField using form_args. Allows modifying the datetime format of a DateTimeField using form_args.
""" """
widget = admin_widgets.DateTimePickerWidget() widget = admin_widgets.DateTimePickerWidget()
def __init__(self, label=None, validators=None, format=None, widget_format=None, **kwargs): def __init__(self, label=None, validators=None, format=None, **kwargs):
""" """
Constructor Constructor
...@@ -22,7 +26,7 @@ class DateTimeField(fields.DateTimeField): ...@@ -22,7 +26,7 @@ class DateTimeField(fields.DateTimeField):
Label Label
:param validators: :param validators:
Field validators Field validators
:param format: :param format:
Format for text to date conversion. Defaults to '%Y-%m-%d %H:%M:%S' Format for text to date conversion. Defaults to '%Y-%m-%d %H:%M:%S'
:param widget_format: :param widget_format:
Widget date format. Defaults to 'yyyy-mm-dd hh:ii:ss' Widget date format. Defaults to 'yyyy-mm-dd hh:ii:ss'
...@@ -30,11 +34,9 @@ class DateTimeField(fields.DateTimeField): ...@@ -30,11 +34,9 @@ class DateTimeField(fields.DateTimeField):
Any additional parameters Any additional parameters
""" """
super(DateTimeField, self).__init__(label, validators, **kwargs) super(DateTimeField, self).__init__(label, validators, **kwargs)
self.format = format or '%Y-%m-%d %H:%M:%S'
self.widget_format = widget_format or 'yyyy-mm-dd hh:ii:ss'
self.format = format or '%Y-%m-%d %H:%M:%S'
class TimeField(fields.Field): class TimeField(fields.Field):
""" """
A text field which stores a `datetime.time` object. A text field which stores a `datetime.time` object.
...@@ -67,7 +69,6 @@ class TimeField(fields.Field): ...@@ -67,7 +69,6 @@ class TimeField(fields.Field):
'%I:%M:%S %p', '%I:%M %p') '%I:%M:%S %p', '%I:%M %p')
self.default_format = default_format or '%H:%M:%S' self.default_format = default_format or '%H:%M:%S'
self.widget_format = widget_format or 'hh:ii:ss'
def _value(self): def _value(self):
if self.raw_data: if self.raw_data:
......
...@@ -3,9 +3,7 @@ from flask.globals import _request_ctx_stack ...@@ -3,9 +3,7 @@ from flask.globals import _request_ctx_stack
from flask.ext.admin.babel import gettext, ngettext from flask.ext.admin.babel import gettext, ngettext
from flask.ext.admin import helpers as h from flask.ext.admin import helpers as h
__all__ = ['Select2Widget', 'DatePickerWidget', 'DateTimePickerWidget', 'RenderTemplateWidget', __all__ = ['Select2Widget', 'DatePickerWidget', 'DateTimePickerWidget', 'RenderTemplateWidget', 'Select2TagsWidget', ]
'Select2TagsWidget', ]
class Select2Widget(widgets.Select): class Select2Widget(widgets.Select):
""" """
...@@ -15,10 +13,9 @@ class Select2Widget(widgets.Select): ...@@ -15,10 +13,9 @@ class Select2Widget(widgets.Select):
work. work.
""" """
def __call__(self, field, **kwargs): def __call__(self, field, **kwargs):
kwargs.setdefault('data-role', u'select2')
allow_blank = getattr(field, 'allow_blank', False) allow_blank = getattr(field, 'allow_blank', False)
kwargs['data-role'] = u'select2'
if allow_blank and not self.multiple: if allow_blank and not self.multiple:
kwargs['data-allow-blank'] = u'1' kwargs['data-allow-blank'] = u'1'
...@@ -30,8 +27,8 @@ class Select2TagsWidget(widgets.TextInput): ...@@ -30,8 +27,8 @@ class Select2TagsWidget(widgets.TextInput):
You must include select2.js, form.js and select2 stylesheet for it to work. You must include select2.js, form.js and select2 stylesheet for it to work.
""" """
def __call__(self, field, **kwargs): def __call__(self, field, **kwargs):
kwargs['data-role'] = u'select2' kwargs.setdefault('data-role', u'select2')
kwargs['data-tags'] = u'1' kwargs.setdefault('data-tags', u'1')
return super(Select2TagsWidget, self).__call__(field, **kwargs) return super(Select2TagsWidget, self).__call__(field, **kwargs)
...@@ -43,9 +40,10 @@ class DatePickerWidget(widgets.TextInput): ...@@ -43,9 +40,10 @@ class DatePickerWidget(widgets.TextInput):
You must include bootstrap-datepicker.js and form.js for styling to work. You must include bootstrap-datepicker.js and form.js for styling to work.
""" """
def __call__(self, field, **kwargs): def __call__(self, field, **kwargs):
kwargs['data-role'] = u'datepicker' kwargs.setdefault('data-role', u'datepicker')
kwargs['data-date-format'] = u'yyyy-mm-dd' kwargs.setdefault('data-date-format', u'yyyy-mm-dd')
kwargs['data-date-autoclose'] = u'true' kwargs.setdefault('data-date-autoclose', u'true')
self.date_format = kwargs['data-date-format']
return super(DatePickerWidget, self).__call__(field, **kwargs) return super(DatePickerWidget, self).__call__(field, **kwargs)
...@@ -56,11 +54,11 @@ class DateTimePickerWidget(widgets.TextInput): ...@@ -56,11 +54,11 @@ class DateTimePickerWidget(widgets.TextInput):
You must include bootstrap-datepicker.js and form.js for styling to work. You must include bootstrap-datepicker.js and form.js for styling to work.
""" """
def __call__(self, field, **kwargs): def __call__(self, field, **kwargs):
kwargs['data-role'] = u'datetimepicker' kwargs.setdefault('data-role', u'datetimepicker')
kwargs['data-date-format'] = field.widget_format or u'yyyy-mm-dd hh:ii:ss' kwargs.setdefault('data-date-format', u'yyyy-mm-dd hh:ii:ss')
kwargs['data-date-autoclose'] = u'true' kwargs.setdefault('data-date-autoclose', u'true')
kwargs['data-date-today-btn'] = u'linked' kwargs.setdefault('data-date-today-btn', u'linked')
kwargs['data-date-today-highlight'] = u'true' kwargs.setdefault('data-date-today-highlight', u'true')
return super(DateTimePickerWidget, self).__call__(field, **kwargs) return super(DateTimePickerWidget, self).__call__(field, **kwargs)
...@@ -71,9 +69,9 @@ class TimePickerWidget(widgets.TextInput): ...@@ -71,9 +69,9 @@ class TimePickerWidget(widgets.TextInput):
You must include bootstrap-datepicker.js and form.js for styling to work. You must include bootstrap-datepicker.js and form.js for styling to work.
""" """
def __call__(self, field, **kwargs): def __call__(self, field, **kwargs):
kwargs['data-role'] = u'timepicker' kwargs.setdefault('data-role', u'timepicker')
kwargs['data-date-format'] = field.widget_format or 'hh:ii:ss' kwargs.setdefault('data-date-format', u'hh:ii:ss')
kwargs['data-date-autoclose'] = u'true' kwargs.setdefault('data-date-autoclose', u'true')
return super(TimePickerWidget, self).__call__(field, **kwargs) return super(TimePickerWidget, self).__call__(field, **kwargs)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment